【问题标题】:ESP32 - Preferences.h - store values to memoryESP32 - Preferences.h - 将值存储到内存
【发布时间】:2021-09-09 18:13:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 只是一个提示 OP,在 ESP32 上你有 SPIFFS 和类似 ArduinoJson 的资源。 SPIFFS 可让您将 Flash 的一部分视为文件系统,因此您只需执行 SPIFFS.open("highscore.json"),而 ArduinoJson 可让您以易于理解的格式表示数据。用于在嵌入式处理器的闪存上保存基本类型的 Json 通常是一种浪费,但听起来这不是每毫秒都会更改的数据,而且大多数 ESP32 项目都有 ton 未使用的资源剩余到 RAM。
  • (至少我推荐SPIFFS/LittleFS over EEPROM,它在ESP32上使用相同的闪存,但界面更简单)

标签: esp32 arduino-ide eeprom


【解决方案1】:

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

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

然后是一个

int ord = 231

这意味着 1.名称C 2.姓名A 3.姓名B....

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

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

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

【讨论】:

  • 谢谢!我真的不在乎我写了多少,因为第一周会有不到 100 次重写,然后在一个月内下降到 0。所以我预计总共有大约 350 篇文章。但我喜欢你的想法。我会考虑的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-02-21
  • 2015-06-23
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多