1

我正在尝试使用以太网屏蔽为我的Arduino Uno构建草图。我正在使用Arduino 模拟器来调试我的代码。这是我在函数中遇到问题的地方: loop()

void loop() {
    while (!ConnectServer());
    while (client.connected()) {
        int i = 0;
        char c = 'o';
        while (client.available()) {
            c = client.read();
            if(c == ';')break;
            commandBuff[i++] = c;
        }
        commandBuff[i] = '\0';          //Skip this line
        ParseCommand(commandBuff);      //And this line
    }
    if (!client.connected()) {
        client.stop();
    }
}

问题是,当它;从输入中获得 a 时。它不仅跳出了内部循环,而且还跳过了内部 while 循环之外的两行代码。并回到外部while循环的条件语句......

我不认为这与它有关ConnectServer(),但我仍然在粘贴它的代码:

bool ConnectServer() {
    char response;
    if (client.connect(server, 80)) {
        client.println("EHLO");
        response = client.read();
        if (response == 'e') {
            return true;
        }
    } 
    else {
         return false;
    }
}

我该如何解决问题?

4

1 回答 1

1

关于这个问题的任何想法?

你的代码看起来很干净,如果你不相信它,你仍然可以复制你用 C 编写的内容,你可以在你的计算机上编译和调试,方法是创建一些模拟 等行为的模型类clientSerial(是 Arduino 模拟器肯定会做的事情)。

我发现的大多数 Arduino 模拟器都不是真正的模拟器(与真正的操作系统不同qemu,甚至vmware是真正的操作系统),它们只是解析代码并对 Arduino 库的一些功能进行硬编码。这就是为什么他们通常不支持高级的东西,甚至不支持完整的 C 语言,甚至最糟糕的(看起来是你的情况)引入错误。

因此,正如我评论的那样,您最好使用真正的 Arduino,并使用调试打印输出语句或 AVR 调试器来调试您的代码。

于 2013-06-30T16:22:00.837 回答