【发布时间】:2014-04-10 16:55:42
【问题描述】:
这是我今天的第二个数据对齐问题,但我认为保证它自己的问题是不同的。我正在处理一些遗留代码,并且完成了一些对我来说是新的事情:
我有一个包含 4 个结构和一些字节/字的打包结构。我需要最后一个结构,typedef'd BLOCK8_STRUCT(目前实际上只有一个 8 位数组)是 4 字节对齐的;不关心其他结构。我从来没有在我的代码中直接引用那个特定的结构。我只通过声明结构的结构来访问它(希望这是有道理的)。
这是我希望 4 字节对齐的结构的声明:
typedef __packed struct
{
u8 data[1024];
} BLOCK8_STRUCT;
这是我的结构声明结构:
typedef __packed struct
{
BLOCK1_STRUCT blk1;
#if NOV_BLK1_PADDING != 0
u8 blk1_pad[NOV_BLK1_PADDING];
#endif
u32 blk1_rev_and_sum;
BLOCK6_STRUCT blk6;
#if NOV_BLK6_PADDING != 0
u8 blk6_pad[NOV_BLK6_PADDING];
#endif
u32 blk6_rev_and_sum;
BLOCK7_STRUCT blk7;
u8 blk7_pad[NOV_BLK7_PADDING];
u32 blk7_rev_and_sum;
BLOCK8_STRUCT blk8;
u32 blk8_rev_and_sum;
} PARAM_BLOCK_IMAGE_STRUCT;
我想确保当我实际初始化结构的结构实例时,BLOCK8_STRUCT 是 4 字节对齐的。我知道如何对齐数据(IAR 给了我一个编译指示),但我不清楚我想在哪里进行这种对齐。当我尝试在结构的结构声明中执行此操作或尝试在 BLOCK8_STRUCT 的声明中执行此操作时,编译器会发出警告。
【问题讨论】: