esp32 - ESP32 - Preferences.h - 将值存储到内存
问题描述
我有一个 ESP32,使用 Arduino IDE 编程。在我的代码中,我有 2 个变量:(sName
字符串)和nScore
(双精度)。这对变量,需要写入 EEPROM 到 higscore 命名空间中。到目前为止,这很容易,打开命名空间并写入值..
但棘手的部分来了:命名空间highscore
有 20 个值:10 个名称和 10 个分数。只有当值高于已经存在的值时,我才需要将值写入命名空间,并将其添加到高分表中的正确位置,移动所有其他值。
我该怎么做?目前我正在考虑在启动时加载所有值并将其存储在 2 个数组中。然后,每当数组中的某些内容发生更改时,将其写下来。
但我不确定这是不是这样做的正确方法。
解决方案
假设您想尽量减少对 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 中以进行比较。
推荐阅读
- ssl - 显示在单个 ssl 证书中的所有域名
- reactjs - Code is deployed, but page is blank-Deploy a react app which was created using create react app on nginx and github pages
- design-patterns - 控制反转是一种模式吗?
- python - Python C 扩展 - 内存泄漏
- c# - 如何将条件传递给 SQL Server 查询?
- cobalt - 如何将钴解码的 SbDecodeTargetInfo 设置为纹理?
- c++ - 声明适用于 auto 但不是通过显式声明类型?
- css - What is the difference between gulp-clean-css vs gulp-csso vs gulp-minify-css?
- sql - find the first value based on date and id column
- regex - regex to extract title