0

我在循环函数中有以下几行:

item = String(buffer);
Serial.println(item);  

其中 item 是 String 并且 buffer 是 char 数组。在我在文件末尾添加一个函数(在循环函数之外)之前,这非常有效:

void storeData(String item){
  Serial.println("StoreData");
  for (int k=0; k<11; k++){
    Serial.print("*");
    if(item == products[k]){
      items[index] = names[k];
      index++;
      Serial.print("\n");
      Serial.print(item);
      Serial.print("\t");
      Serial.print(names[k]);
    }
  }
}

它将字符串item与值列表进行比较,如果找到值,则存储相应的名称。当我在最后添加此代码时,即使我不调用该函数,转换的输出也变为:

978973103 Á
9789731030418

其中第一个值是不正确的转换,第二个是 的值buffer

可能会发生什么?我一遍又一遍地重新启动并重新布线并从头开始重做所有事情。

4

2 回答 2

1

您可能用完了 2K SRAM。字符串数组可以很快用完。

此外,我建议使用该F()函数,而不是使用 RAM 作为常量。例如Serial.println(F("StoreData")

最新的 IDE 显示了预期的 RAM 使用情况。但这是一个猜测。如果它甚至接近,则可能存在问题。我在代码中的特定点使用以下MemoryFree 库来揭示高水位。

于 2013-06-18T13:06:38.097 回答
0

由于项目是字符串。我想你可以尝试使用

Serial.println(item);

代替

Serial.print(item);

在你的 storeData 函数中。其他字符串也类似

于 2013-06-18T15:25:46.203 回答