这是我的设置:
Atmel studio 7.0
avr-gcc
ATmega644PA
我正在尝试将默认值写入eeprom。我的意思是:在代码中,eeprom中特定位置的预定义值。
我可以使用:
__attribute__((section(".eeprom")))
可以将变量放在eeprom中,但这会将变量自动链接到某个位置。 我想手动设置存储变量的位置。我怎么能这样做?
谢谢!
Ps:这需要适用于> 300变量
答案 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存储器时才会方便。