GCC以相反的顺序编译EEPROM地址

时间:2015-12-22 07:11:33

标签: c gcc mapping avr eeprom

我有一个用C编写的ATmega代码,用GCC编译器编译。

有些数据需要存储在EEPROM中,所以我添加了这些声明:

enter image description here

在读取EEPROM之后,我发现数据以某种奇怪的方式放置。经过一些调查后,我在.map文件中找到了这个文本(由工具链生成的许多文件之一):

enter image description here

正如您所见,编译器以相反的顺序放置数据。

当然我可以撤销声明并享受进一步的编码,但这是意想不到的事情所以我不敢面对任何其他意外的行为,直到我不明白为什么编译器这样做。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

正如@Lundin所说,全局变量不需要连续分配。

您可以使用struct的功能,其成员始终被分配in the same order。 根据C11标准,§6.7.2.1.15:

  

在结构对象中,非位字段成员和位字段所在的单位的地址会按声明的顺序增加

请注意padding