Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

try/catch block in Arduino

Tags:

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();     } } 
like image 737
NZal Avatar asked Apr 19 '12 12:04

NZal


People also ask

Is there a try catch in Arduino?

There is no exception system, so you cannot try and catch.

What is a try catch block?

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.

What is try catch function?

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.


Video Answer


2 Answers

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

like image 103
vikingosegundo Avatar answered Oct 11 '22 18:10

vikingosegundo


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; 
like image 25
Matthew Murdoch Avatar answered Oct 11 '22 18:10

Matthew Murdoch