首页 > 解决方案 > ESP32 - Preferences.h - 将值存储到内存

问题描述

我有一个 ESP32,使用 Arduino IDE 编程。在我的代码中,我有 2 个变量:(sName字符串)和nScore(双精度)。这对变量,需要写入 EEPROM 到 higscore 命名空间中。到目前为止,这很容易,打开命名空间并写入值..

但棘手的部分来了:命名空间highscore有 20 个值:10 个名称和 10 个分数。只有当值高于已经存在的值时,我才需要将值写入命名空间,并将其添加到高分表中的正确位置,移动所有其他值。

我该怎么做?目前我正在考虑在启动时加载所有值并将其存储在 2 个数组中。然后,每当数组中的某些内容发生更改时,将其写下来。

但我不确定这是不是这样做的正确方法。

标签: esp32arduino-ideeeprom

解决方案


假设您想尽量减少对 EEPROM 的写入次数,最好的方法是分配 10 个 EEPROM 地址,一个用于每个高分持有者,然后在 EEPROM 中设置一个单独的变量来表示高分的顺序。

eg: 
ADD1: NameA
ADD2: NameB
ADD3: NameC
....

然后一个

int ord = 231

这意味着 1.NameC 2.NameA 3.NameB....

这样,如果有人新进入记分牌,只重写得分最低的玩家的地址(例如:order 3 -> NameB)并重新排列ord变量。

由于您有 10 个条目,您的ord变量可能类似于 7562931048,其中 0 是最高得分者。

无论如何,您肯定必须在启动时(或稍后)将所有分数(可能只是数字)加载到 ram 中以进行比较。


推荐阅读