NZa*_*Zal 15 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();
}
}
Run Code Online (Sandbox Code Playgroud)
Vik*_*ica 21
在Arduino的参考不上市try catch(对于为什么见,例如,该信息相关的答案).我认为,在μ控制器上实现try catch可能有点困难/不可能.
在大多数语言中尝试catch是一项非常昂贵的操作:程序堆栈会为try块和每个catch块复制一次.如果尝试出错,则将丢弃try-block堆栈,并执行其中一个catch块堆栈.
我不是cpu架构的专家,但我可以想象,这需要大量的内存交换和类似的操作 - 使用简单的μ控制器应该很难实现.
编辑
可能值得看看C-Programmers如何执行类似于try/catch的模式
Mat*_*och 11
Arduino不支持异常处理.但是,您不需要使用异常处理来使代码健壮.通过简单地检查可能失败的函数的返回值,您可以实现相同的目的.
因为client.connected()每次循环都会检查,因为client.available()如果没有连接则返回0,唯一可能的故障是尚未处理的是返回client.read().
例如,您可以通过更改行来解决此问题:
char c = client.read();
Run Code Online (Sandbox Code Playgroud)
至:
int i = client.read();
if (i == -1) {
break;
}
char c = (char) i;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42069 次 |
| 最近记录: |