在Arduino中尝试/捕获块

时间:2012-04-19 12:55:18

标签: try-catch arduino

我正在使用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();
    }
}

2 个答案:

答案 0 :(得分:19)

Arduino reference is未列出try catch(有关原因的详细信息,请参阅此related answer)。我认为,在μ控制器上实现try catch可能有点困难/不可能。

在大多数语言中尝试catch是一项非常昂贵的操作:程序堆栈会为try块和每个catch块复制一次。如果尝试出错,则将丢弃try-block堆栈,并执行其中一个catch块堆栈 我不是cpu架构的专家,但我可以想象,这需要大量的内存交换和类似的操作 - 使用简单的μ控制器应该很难实现。

值得看看C-Programmers do patterns similar to try/catch

答案 1 :(得分:11)

Arduino doesn't support exception handling。但是,您不需要使用异常处理来使代码健壮。通过简单地检查可能失败的函数的返回值,您可以实现相同的目的。

由于每次循环都会检查client.connected(),并且由于client.available()将返回0(如果未连接),唯一可能的失败是尚未处理的是client.read()的返回。

您可以通过更改以下行来解决此问题:

char c = client.read();

为:

int i = client.read();
if (i == -1) {
    break;
}
char c = (char) i;
相关问题