I am working with socket communication in Arduino, and I need the try/catch block for proper handling, what do you guys suggest? My search on the internet wasn't successful.
edit:
The code I am working with uses the WiFly module to interact with a mobile application, I am building a robot module with some controls over mobile application using Android. Everything works just fine, but sometimes the socket gets disconnected, so I need to add handling for such cases, something similar to try/catch block, but I didn't find similar block for Arduino.
My code:
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(); } }
There is no exception system, so you cannot try and catch.
What Does Try/Catch Block Mean? "Try" and "catch" are keywords that represent the handling of exceptions due to data or coding errors during program execution. A try block is the block of code in which exceptions occur. A catch block catches and handles try block exceptions.
JavaScript try and catchThe try statement allows you to define a block of code to be tested for errors while it is being executed. The catch statement allows you to define a block of code to be executed, if an error occurs in the try block.
The Arduino reference is not listing try catch
(for details of why see, for example, this related answer). And I assume, that implementing try catch on a µ-controller could be kind of difficult/impossible.
Try catch in most languages is a quite expensive operation: The program stack get copied once for the try block and for each catch block. In case the try goes wrong the try-block stack will be discarded and one of the catch block stacks will be executed.
I am not an expert of cpu architecture, but I can imagine, that this needs a lot of memory swapping and similar operations — it should be hard to achieve with a simple µ-controller.
It might worth to look how C-Programmers do patterns similar to try/catch
Arduino doesn't support exception handling. However, you don't need to use exception handling to make your code robust. By simply checking the return values of functions that can fail you can achieve the same end.
Since client.connected()
is checked every time around the loop, and since client.available()
will return 0 if not connected the only possible failure that is not already being handled is the return from client.read()
.
You can fix this, for example, by changing the line:
char c = client.read();
to:
int i = client.read(); if (i == -1) { break; } char c = (char) i;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With