ESP32 - Preferences.h - 将值存储到内存中

ESP32 - Preferences.h - store values to memory

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

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

我应该怎么做? 目前我正在考虑在启动时加载所有值并将其存储在 2 个数组中。然后每当数组中发生变化时,将其记录下来。

但我不确定这样做是否正确。

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

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

然后是

int ord = 231

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

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

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

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