Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个用 C 语言编写并用 GCC 编译器编译的 ATmega 代码。
一些数据需要存储在 EEPROM 中,所以我添加了这些声明:
在我阅读 EEPROM 后,我发现数据以某种奇怪的方式放置。经过一番调查,我在 .map 文件(工具链产生的众多文件之一)中发现了这个文本:
如您所见,编译器以相反的顺序放置数据。
当然,我可以反向声明并享受进一步的编码,但这是出乎意料的,所以我害怕面对任何其他意想不到的行为,直到我不明白编译器为什么这样做。
有什么想法吗?
正如@Lundin 所说,全局变量不需要连续分配。
您可以使用struct其成员始终按照指定的相同顺序分配的特性。 根据 C11 标准,§6.7.2.1.15:
struct
在结构对象中,非位域成员和位域所在的单元的地址按声明顺序递增。
不过要注意padding!