跳过'中的Arduino代码;而';陈述

跳过'中的Arduino代码;而';陈述,arduino,Arduino,我正试图为我的朋友建立一个。我正在使用调试我的代码。下面是我在loop()函数中遇到问题的地方: void loop() { while (!ConnectServer()); while (client.connected()) { int i = 0; char c = 'o'; while (client.available()) { c = client.read(); if(

我正试图为我的朋友建立一个。我正在使用调试我的代码。下面是我在
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();
    }
}
问题是,当它得到一个
来自输入。它不仅中断了内部循环,而且还跳过了内部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;
    }
}
我如何解决这个问题

你知道这个问题吗

您的代码看起来很干净,如果您不确信它是干净的,您仍然可以复制您用C编写的代码,通过创建一些模拟
客户端
串行
等行为的模型类,您可以在计算机上编译和调试这些代码。。(这是Arduino模拟器肯定会做的事情)

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

因此,正如我所评论的,您最好使用真正的Arduino,并使用debug printout语句或AVR调试器来调试代码

你知道这个问题吗

您的代码看起来很干净,如果您不确信它是干净的,您仍然可以复制您用C编写的代码,通过创建一些模拟
客户端
串行
等行为的模型类,您可以在计算机上编译和调试这些代码。。(这是Arduino模拟器肯定会做的事情)

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


因此,正如我所评论的,您最好使用真正的Arduino,并使用debug printout语句或AVR调试器来调试代码。

是什么让您认为这两行代码被跳过了?我只是单步执行代码。这很奇怪。您是否尝试过代码的干净构建(即从头开始)?干净构建?我使用的是模拟器而不是设备…问题似乎是模拟器?是什么让你认为这两行代码被跳过了?我是单步执行代码的。这很奇怪。您是否尝试过代码的干净构建(即从头开始)?干净构建?我使用的是模拟器而不是设备…问题似乎是模拟器?