首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino中的try/catch块

Arduino中的try/catch块
EN

Stack Overflow用户
提问于 2012-04-19 20:55:18
回答 2查看 61.2K关注 0票数 22

我正在使用Arduino中的套接字通信,我需要try/catch块来正确处理,你们有什么建议吗?我在网上搜索没有成功。

编辑:

我正在使用的代码使用WiFly模块与移动应用程序进行交互,我正在构建一个机器人模块,并使用安卓系统对移动应用程序进行一些控制。一切都很好,但有时套接字会断开连接,所以我需要为这种情况添加处理,类似于try/catch块,但我没有为Arduino找到类似的块。

我的代码:

代码语言:javascript
复制
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();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-19 21:45:20

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

在大多数语言中,Try catch是一个非常昂贵的操作:对于try块和每个catch块,程序堆栈都会被复制一次。如果try出错,try-block堆栈将被丢弃,catch块堆栈之一将被执行。

我不是cpu架构的专家,但我可以想象,这需要大量的内存交换和类似的操作-使用简单的µ控制器应该很难实现。

也许值得看看C-Programmers do patterns similar to try/catch是如何

票数 28
EN

Stack Overflow用户

发布于 2012-04-19 23:23:37

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

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

例如,您可以通过更改行来解决此问题:

代码语言:javascript
复制
char c = client.read();

至:

代码语言:javascript
复制
int i = client.read();
if (i == -1) {
    break;
}
char c = (char) i;
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10228562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档