我正在尝试使用sketch Arduino Uno为我的Ethernet构建shield。我正在使用Arduino simulator来调试我的代码。这是我在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;
}
}
如何解决问题?
答案 0 :(得分:1)
关于这个问题的任何想法?
您的代码看起来很干净,如果您不相信它,您仍然可以复制您在C中编写的可以在计算机上编译和调试的内容,方法是创建一些模拟{{1的行为的模拟类},client
等。(这是Arduino模拟器当然会做的事情)。
我发现的大多数Arduino模拟器都不是真正的模拟器(不像Serial
甚至qemu
用于实际操作系统),它们只是解析代码并硬编码一些Arduino库的功能。这就是为什么他们经常不支持高级的东西,甚至不支持完整的C语言甚至最差(看起来像你的情况)引入错误。
因此,正如我所说,你应该更好地使用真正的Arduino,并使用调试打印输出语句或使用AVR调试器来调试代码。