传递意外消息时,此代码会导致缓冲区溢出吗?同样,期望的消息是简单的“ 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;
}

09-06 22:41