将默认值写入eeprom

时间:2016-02-22 16:18:49

标签: gcc atmega avr-gcc atmel atmelstudio

这是我的设置:

Atmel studio 7.0
avr-gcc
ATmega644PA

我正在尝试将默认值写入eeprom。我的意思是:在代码中,eeprom中特定位置的预定义值。

我可以使用:

__attribute__((section(".eeprom")))

可以将变量放在eeprom中,但这会将变量自动链接到某个位置。 我想手动设置存储变量的位置。我怎么能这样做?

谢谢!

Ps:这需要适用于> 300变量

2 个答案:

答案 0 :(得分:2)

您可以将所有变量放在一个结构中。变量将按指定的顺序放入EEPROM中。

struct {
   uint8_t  var1;
   uint8_t  var2;
   uint16_t var3;
   ...
} eeprom_data  __attribute__ ((section(".eeprom")));

答案 1 :(得分:0)

解决方案取决于您是否要在编程时或设备每次启动时初始化EEPROM。我将描述编程时间的解决方案(这是我从问题中理解的)。

__attribute__((section(".eeprom"))) uint8_t eepContent[6] = {0,1,0xFF,3,4,5}; 将对链接器说:"将此变量放在.eep输出文件"中。 .eep文件是一个intel hex文件格式,将闪存到EEPROM。 如果要为变量定义特定位置,可以手动生成并刷新.eep文件,或者执行完整的EEPROM映射,让0xFF表示未初始化的值:

library(reshape2)
melt(df) %>% group_by(variable) %>% summarize(earliest_date = min(value))

您也可以手动定义部分,但这只是在您想要使用不在开头的整块EEPROM存储器时才会方便。