1. ホーム
  2. try-catch

[解決済み] Arduinoのtry/catchブロック

2022-02-25 17:45:04

質問

Arduinoでソケット通信をしているのですが、try/catchブロックで適切に処理したいのですが、皆さんはどのようにお考えでしょうか?ネットで検索してもうまくいきませんでした。

を編集します。

私が取り組んでいるコードは、モバイルアプリケーションと対話するためにWiFlyモジュールを使用しています。私は、Androidを使用してモバイルアプリケーション上でいくつかのコントロールを持つロボットモジュールを構築しています。 すべてがうまくいくのですが、時々ソケットが切断されることがあります。そのような場合の処理を追加する必要があります。

私のコード

void loop() {
    Client client = server.available();
    if (client) {
        while (client.connected()) {
            if (client.available()) {
                // Serial.print("client connected \n");
                char c = client.read();

                if(c == 'L')
                    turnLeft();
                if(c == 'R')
                    turnRight();
                if(c == 'F')
                    goForward();
                if(c == 'B')
                    goBackward();
                if(c == 'S')
                    Stop();

                Serial.print(c);
            }
        }

        // give the web browser time to receive the data
        delay(100);
        client.stop();
    }
}

解決方法は?

その Arduinoのリファレンスは 掲載しない try catch (理由の詳細については、例えば、次のものを参照してください。 関連回答 ). そして、μ-controllerにtry catchを実装することは、ある種の困難さ/不可能さがあると推測します。

ほとんどの言語では、キャッチボールはかなり高価な操作です。プログラムスタックは、tryブロックとcatchブロックごとに一度ずつコピーされます。トライが失敗した場合、トライブロックのスタックは破棄され、キャッチブロックのスタックの1つが実行されます。
私はCPUアーキテクチャの専門家ではありませんが、これには多くのメモリスワップや同様の操作が必要で、単純なμコントローラで実現するのは難しいだろうと想像できます。

を見る価値があるかもしれません。 C言語プログラマーはtry/catchに似たパターンを行う