【发布时间】:2012-01-20 22:57:46
【问题描述】:
我有一个配置结构,我想保存在 ARM cortex M3 的内部闪存上。
根据规范,保存在内部flash中的数据,必须对齐32bit。
因为我的结构中有很多布尔值和字符,我不想使用 32 位来存储 8 位...我决定使用 __packed 预处理器编译指示来打包结构,然后当我将它作为一个整体保存时结构,我只需要确保结构大小可被 4 整除(4 字节 = 32 位),如果需要,我通过添加填充字节来做到这一点。
目前,在开发过程中,我对结构进行了很多更改,为了使其与 32 位对齐,我需要一直更改填充字节。
目前的结构是这样的
typedef __packed struct
{
uint8_t status;
uint16_t delay;
uint32_t blabla;
uint8_t foo[5];
uint8_t padding[...] // this has to be changed every time I alter the structure.
} CONFIG;
有没有更好的方法来实现我正在做的事情? 我是嵌入式编程的新手,我想确保我没有犯错。
编辑:请注意。数据在内部闪存的末尾持久化,因此省略填充将不起作用...
【问题讨论】:
-
我相信你的理解是不正确的。闪存中的指令可能必须对齐,这将由编译器保证。但即使未对齐存储在闪存中的数据也可以通过 arm cortex m3 内核进行管理。你用的是哪家公司的MCU?
标签: c memory-alignment cortex-m3 iar