我正在努力使用打包结构的 IAR 链接器。
这是一个放置在绝对位置的结构:
typedef __packed struct
{
uint8_t au8Build[8];
uint16_t u16Type;
} stMetaInfo_t;
#pragma location = ".META_INFO"
const __packed stMetaInfo_t c_stMetaInfo =
{
.au8Build = { 0U, 0U, 0U, 0U, 0U, 1U, 2U, 3U },
.u16Type = 0x0059U
};
该结构的大小为 10 个字节,我使用 sizeof() 对其进行了验证。
链接器配置:
place at address mem: 0x08003FE0 { readonly section .META_INFO };
我希望链接器在该位置准确放置 10 个字节的数据,但我可以在映射文件中看到 12 个字节(0xC)的大小:
"A1": 0xc
.META_INFO const 0x08003fe0 0xc myfile.o [1]
- 0x08003fec 0xc
...并且工具链创建一个额外的十六进制文件,显示链接器添加的 2 个字节:
0x08003FD0 = ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x08003FE0 = 00 00 00 00 00 01 02 03 59 00 !00!00! ff ff ff ff
0x08003FF0 = ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
我假设链接器使用经典的 4 字节对齐,因为它是 32 位 CPU,但我如何强制链接器仅放置 10 个字节?稍后,该结构应该移动到特定内存区域的末尾。所以我不想有任何填充字节。
我正在使用适用于 ARM 版本 8.22 的 IAR Embedded Workbench。
最好的问候杰