传递意外消息时,此代码会导致缓冲区溢出吗?同样,期望的消息是简单的“ 1”和“ -1”。
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}
String data_received = rcv;
if (data_received == "") {
Serial.println("Null");
} else {
correction_var = data_received.toInt();
}
由于我的arduino的RTC突然开始表现异常,并且我找不到适当的原因,除了在他发疯之前,显然一条消息未能发送到Arduino。此处的这段代码可以处理收到的消息,因此可能某些内容超出了应有的范围,并弄乱了RTC的警报变量?
更新:所以这都不是缓冲区溢出问题,Ardunino的RTC显然存在某种问题,因为即使在重置代码后,问题仍然存在,这一次还是从一开始,因此我决定创建一个新线程。
最佳答案
您只是在读取无限数量的值而无需检查缓冲区是否已满。从您的代码:
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i++] = (char)modem.read();
}
很明显,您的char-array rcv将在接收到64个字符后溢出。接收缓冲区已满时,也许您应该停止读取?
char rcv[64] {};
int i = 0;
while (modem.available() && i < 64) {
rcv[i++] = (char)modem.read();
}
或者,您也可以在读取新值后覆盖最旧的值。
char rcv[64] {};
int i = 0;
while (modem.available()) {
rcv[i % 64] = (char)modem.read();
++i;
}