可以在程序中稍后更改保存在PROGMEM中的数据类型吗?

时间:2013-12-02 17:52:28

标签: c flash arduino eeprom uint32-t

您好我正在使用Arduino进行游戏但是我需要存储2个全局变量来跟踪uint32_t类型的currScor和hiScor得分并保存ram空间我将它们标记为{{1} } currScor uint32_t一旦游戏开始,分数将开始递增,但编译器说我无法分配给常量变量。有没有办法可以添加到存储在闪存中的变量?我应该考虑使用EEPROM,虽然我担心太多的写入会烧掉那种内存类型。

3 个答案:

答案 0 :(得分:1)

Arduino有4种类型的内存:

  1. 闪存
  2. EEPROM
  3. SRAM
  4. CPU注册
  5. 通过简单的分配无法操作Flash和EEPROM。对于EEPORM的操作,存在众所周知的库。在程序中也可以操作Flash / Progmem。该技术在ATMEL数据表AVR105: Power Efficient High Endurance Parameter Storage in Flash Memory中有所描述。但是我不知道任何支持此功能的开源库。

    如果你想保留RAM,这很可能不是你要走的路。相反,你应该把字符串和其他大而不变的东西放到progmem。

答案 1 :(得分:1)

对于得分,你应该使用RAM,因为它会不断更新,不需要在单个游戏周期之后保留它的价值。

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

答案 2 :(得分:0)

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

我强烈建议将RAM保存在其他位置。 请参阅以下examples library to measure and conserve RAM