【发布时间】:2018-08-07 09:02:24
【问题描述】:
我正在使用 Arduino Uno 将几个变量保存到 EEPROM 中。我对此的解决方案是创建一个自定义结构来存储所有需要的变量,然后使用 EEPROM.put 将它们存储到内置的 EEPROM 中。
我的问题不是在放数据时出现,而是在获取数据时出现。每当我在代码中更改某些内容和/或在短时间内使用 Arduino 时,存储在 EEPROM 中的数据就会损坏。
我通过 Serial.println() 函数检查数据。据我所知,字符串数据有时会损坏,但其他数据类型不会损坏。可能是字符串数据的问题?
struct EEPROMDATA
{
String customMessage, emergencyMessage;
String emergencyContact[3];
String ownerContact;
String idleMessage;
int travelThreshold;
int idleThreshold;
char password[6];
location locationList[3];
};
EEPROMDATA eepromstruct;
void loadReset()
{
EEPROM.get(100, eepromstruct);
}
void saveReset()
{
EEPROM.put(100, eepromstruct);
}
这些是我用来从 EEPROM 保存(放置)和加载(获取)数据的函数。我读过某处以避免在第 0 个地址写入数据,这就是地址设置为 100 的原因。
请记住,这不是写入 EEPROM 的问题,因为我的程序目前没有任何对 EEPROM.put 或 saveReset() 的引用。不知何故,在程序过程中,EEPROM 数据被破坏了。不知道是硬件问题还是软件问题。
编辑:我忘了注意,在解决此问题时,每当发生损坏时,我都会重新初始化,然后再次将数据保存在 EEPROM 中。之后它会在短时间内正常工作(连续打开/关闭然后测试数据、重置设备等),直到它再次损坏。
【问题讨论】:
-
为什么你认为如果你不保存数据就不应该损坏它们('no reference to saveReset')?
-
我忘了注意一旦发生损坏我会重新初始化然后保存数据。然后它会在短时间内正常工作,直到再次损坏。
标签: c++ memory struct arduino arduino-uno