2

您好,我正在 Arduino 上制作游戏,但我需要存储 2 个全局变量来跟踪 currScor 和 hiScor 类型的分数并uint32_t节省内存空间,一旦游戏开始,我将它们标记为uint32_tcurrScor PROGMEM = 0;,分数将开始增加,但编译器说我不能分配给一个常量变量。有没有办法可以添加到存储在闪存中的这个变量?我是否应该考虑使用 EEPROM,尽管我担心过多的写入会烧毁该内存类型。

4

3 回答 3

1

Arduino 有 4 种类型的内存:

  1. 闪光
  2. EEPROM
  3. SRAM
  4. CPU 寄存器

通过简单的分配操作 Flash 和 EEPROM 是不可能的。对于 EEPORM 的操作,存在众所周知的库。也可以在程序中操作 Flash/Progmem。该技术在 ATMEL 数据表AVR105:闪存中的节能高耐久性参数存储中进行了描述。但是我不知道有任何支持这个的开源库。

如果你想保留 RAM,这很可能不是要走的路。相反,您应该将字符串和其他大而不变的东西放入程序中。

于 2013-12-03T14:25:47.827 回答
1

对于分数,您应该改用 RAM,因为它会不断更新,并且无需在单个游戏周期之后保留其价值。

对于 hiscore,您可以在游戏结束后将其写入 EEPROM。根据数据表,它至少可以写10万次,所以如果你一年365天,每天玩100次,它几乎不会磨损3年。之后,只需将 EEPROM 位置更改为另一个地址。如果您使用 Arduino Uno(带有 1 Kb EEPROM),您有 32 个不同的位置来存储 uint32_t 数据。32 x 3 年 = 96 年;)

于 2013-12-13T23:10:58.260 回答
0

您的直觉是正确的,因为您将无法更改存储在程序存储器空间(又名 Flash/ROM)中的值。如果您担心烧毁 EEPROM。让它只定期更新。但是,您仍然需要有 RAM 来缓冲它。

我强烈建议在其他地方保留 RAM。请参阅以下示例库以测量和节省 RAM

于 2013-12-02T19:09:55.273 回答