2012-04-19 58 views
12

Arduinoのソケット通信で作業していますが、適切な処理のためにtry/catchブロックが必要です。何をお勧めしますか?インターネット上での私の検索は成功しませんでした。Arduinoのtry/catchブロック

編集:

私が働いているコードは、モバイルアプリケーションと対話するWIFLYモジュールを使用して、私は、Androidを使用して、モバイルアプリケーションの上にいくつかのコントロールを持つロボットモジュールを構築しています。 すべてうまく動作しますが、ソケットが切断されることがありますので、そのようなケースではtry/catchブロックと同様の処理を追加する必要がありますが、Arduinoの類似ブロックは見つかりませんでした。

マイコード:

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(); 
    } 
} 
+0

あなたは私たちにいくつかのより多くの情報を提供する必要がありますに

char c = client.read(); 

をあなたは見つけました... –

+0

私はちょうど質問を更新しました – NZal

答えて

17

Arduino reference istry catch(参照理由の詳細については、例えば、このrelated answer)をリストしていません。そして、私は、μコントローラを試してみることを実装することは、難しい/不可能なものになる可能性があると仮定します。

ほとんどの言語でcatchを試すのは非常にコストがかかります。プログラムスタックは、tryブロックと各catchブロックに対して1回コピーされます。試行が間違った場合、try-blockスタックは破棄され、catchブロックスタックの1つが実行されます。
私はCPUアーキテクチャのエキスパートではありませんが、これはメモリのスワッピングなどの操作が多く必要であることが想像できます。シンプルなμコントローラでは実現するのは難しいでしょう。

編集
それはどのようにC-Programmers do patterns similar to try/catch

+0

この回答を見てください:http://stackoverflow.com/a/10586093/22470 – powtac

9

Arduino doesn't support exception handling見て価値があるかもしれません。ただし、コードを堅牢にするために例外処理を使用する必要はありません。失敗する可能性のある関数の戻り値をチェックするだけで、同じ目的を達成できます。

はループの都度チェックされ、client.available()は接続されていないと0を返しますので、まだ処理されていない唯一の障害はclient.read()からの復帰です。

あなたは、たとえば、行変更することで、この問題を解決することができ:何、あなたが試してみましたどのような...

int i = client.read(); 
if (i == -1) { 
    break; 
} 
char c = (char) i; 
+0

ありがとうたくさん!これは啓発だった! – NZal

+0

:(そのエラー処理は利用できません...上記の代替の "ロバストな戻り値チェック"は疑問です。例えばSerial.printはsucessfulyを実行したかどうか情報をほとんど提供しません。 Serial.printがそのデータを逃していないので、RAMを使い果たして自分のスケッチを回避する方法をまだまだ手に入れているのです! – humanityANDpeace

+0

SRAMが使い果たされているのは、何度も遭遇した問題です。スケッチがメモリをどのように使用しているかを知りたいのであれば、MemoryFreeライブラリを使って利用可能なSRAMの量をチェックすることができます(最も簡単な方法は、http://playground.arduino.cc/Code/AvailableMemoryのMemoryFree.cppコードをスケッチにコピーし、 'freeMemory()'を呼び出すことです)。 –

関連する問題