gpt4 book ai didi

c++ - Arduino EEPROM 获取损坏的值

转载 作者:行者123 更新时间:2023-11-28 01:36:38 24 4
gpt4 key购买 nike

我正在使用 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 中。之后它可以正常工作一小段时间(连续打开/关闭然后测试数据、重置设备等)直到它再次损坏。

最佳答案

当您在代码中的某个位置声明时,您需要使用 char[] 而不是使用 String,它是一个类对象。在动态内存分配的情况下,对象(类的实例)应该引用内存的其他区域以通过其方法存储其数据。即使您假设您的数据将存储在 EEPROM 中,但实际上,它存储在 RAM 的某个区域中。这就是为什么您仅使用 String 数据损坏了数据。

关于c++ - Arduino EEPROM 获取损坏的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49013360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com