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 中以进行比较。
我有一个 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 中以进行比较。