我正在使用Arduino中的套接字通信,我需要try/catch块来正确处理,你们有什么建议吗?我在网上搜索没有成功。
编辑:
我正在使用的代码使用WiFly模块与移动应用程序进行交互,我正在构建一个机器人模块,并使用安卓系统对移动应用程序进行一些控制。一切都很好,但有时套接字会断开连接,所以我需要为这种情况添加处理,类似于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();
    }
}发布于 2012-04-19 21:45:20
未列出try catch的Arduino reference is (有关原因的详细信息,例如,请参阅此related answer)。我假设,在µ控制器上实现try catch可能有点困难/不可能。
在大多数语言中,Try catch是一个非常昂贵的操作:对于try块和每个catch块,程序堆栈都会被复制一次。如果try出错,try-block堆栈将被丢弃,catch块堆栈之一将被执行。
我不是cpu架构的专家,但我可以想象,这需要大量的内存交换和类似的操作-使用简单的µ控制器应该很难实现。
也许值得看看C-Programmers do patterns similar to try/catch是如何
发布于 2012-04-19 23:23:37
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;https://stackoverflow.com/questions/10228562
复制相似问题