Arduino esp32:存储结构体EEPROM阵列



>我遇到了一个问题,无法解决在 nvs 中存储结构数组的问题。

我有这个由可变长度字符串组成的结构:

typedef struct
{
String Name;
String Surname;
String Status;
String Expiry;
}  EpromTags;
EpromTags arraytag[50];
void setup()
{
//should load arraytag from EEPROM here
} 

在其他例程中,我有来自远程服务器的数据,所以我将其保存给我 arraytag


for (int i=0, i<50,i++)
{
arraytag[i].Name = valuename[i];
arraytag[i].Surname = valuesurname[i];
arraytag[i].Status = valuestatus[i];
arraytag[i].Expiry = valueexp[i];
}  
//should save to arraytag to EEPROM here

这个想法是在到达时将结构的价值加载给男人,并在设置时重新加载。

我已经能够将单个元素写入EEPROM,但是我发现保存此结构数组时遇到困难。

有人可以带我朝着正确的方向前进或提出建议吗?

字符串类处理在堆内存中分配的字符数组缓冲区。类 String 的对象只有一个指向此缓冲区的指针。如果将字符串对象存储到 EEPROM,则不会存储缓冲区,并且在检索对象后指针无效。

使用预定义大小的 C 字符串(以零结尾的字符数组(在 EEPROM 中存储带有字符串的结构。

typedef struct
{
char name[NAME_MAX_LENGTH];
char surname[SURENAME_MAX_LENGTH];
char status[STATUS_LENGTH];
char expiry[EXP_LENGTH];
}  EpromTags;

要保存任何数据类型,您可以使用EEPROM.put((。要读回它,您可以使用EEPROM.get((。因此,您可以使用直接的EEPROM.put(arraytag)来存储数组的所有 50 个项目,并EEPROM.get(arraytag)将其读回。

结构的大小为sizeof(EpromTags)。数组的大小是项目计数乘以项目大小。

请注意,ESP32 EEPROM 库在闪存中模拟 EEPROM,需要调用EEPROM.begin()EEPROM.commit()。请参阅 ESP32 EEPROM 库的示例,了解如何使用它。

相关内容

  • 没有找到相关文章

最新更新