ZHCU875Z August 2001 – October 2023 SM320F28335-EP
与 align 关键字一样,使用 palign 关键字可以告诉链接器将输出段放置在位于 n 字节边界上的地址处,其中 n 是 2 的幂。此外,palign 确保段的大小是其放置对齐限制值的倍数,并会根据需要将段大小填充到这样的边界。
例如,以下代码行在 PMEM 区域内的 2 字节边界上分配 .text。.text 段的大小需保证是 2 字节的倍数。以下两条语句是等效的:
.text: palign(2) {} > PMEM
.text: palign = 2 {} > PMEM
如果链接器向初始化的输出段添加填充,则填充空间也会被初始化。默认情况下,填充空间的填充值为 0(零)。但是,如果为输出段指定一个填充值,则该段的任何填充也将使用该填充值进行填充。例如,考虑以下段规范:
.mytext: palign(8), fill = 0xffff {} > PMEM
在此示例中,在应用 palign 运算符之前,.mytext 段的长度为 3 个 16 位字节。.mytext 的内容如下:
addr content
---- -------
0001 0x1234
0002 0x1234
0003 0x1234
应用 palign 运算符后,.mytext 的长度为 8 个字节,且其内容如下:
addr content
---- -------
0001 0x1234
0002 0x1234
0003 0x1234
0004 0xffff
0005 0xffff
0006 0xffff
0007 0xffff
.mytext 的大小已提升到 8 字节的倍数,并且由链接器创建的填充已填充为 0xff。
链接器命令文件中指定的填充值被解释为 16 位常量。如果指定以下代码:
.mytext: palign(8), fill = 0xff {} > PMEM
链接器假定的填充值为 0x00ff,然后 .mytext 将具有以下内容:
addr content
---- -------
0001 0x1234
0002 0x1234
0003 0x1234
0004 0x00ff
0005 0x00ff
0006 0x00ff
0007 0x00ff
如果 palign 运算符应用于未初始化的段,则该段的大小会根据需要提升到相应的边界,但不会初始化创建的任何填充。
palign 运算符也可以采用 power2 参数。此参数告诉链接器添加填充以将段的大小增加到下一个“2 的幂”边界。此外,该段也在这个“2 的幂”边界上对齐。例如,考虑以下段规范:
.mytext: palign(power2) {} > PMEM
假设 .mytext 段的大小为 120 字节,PMEM 从地址 0x10020 开始。在应用 palign(power2) 运算符后,.mytext 输出段将具有以下属性:
name addr size align
------- ---------- ----- -----
.mytext 0x00010080 0x80 128