如何在 IAR 链接器配置文件中为块添加一些填充
How to add some padding for a block in IAR linker configuration file
我正在从事 IAR 项目。在它的链接器配置文件中,一个block定义如下
define block MY_BLOCK with alignment = 32 { section myblock };
place in CODE_RAM { block MY_BLOCK };
这创建了一个32字节对齐的MY_BLOCK
内存对象,链接到物理内存CODE_RAM
。
我想要实现的是,在块的末尾留下一些额外的填充区域(比如 64 字节)。块定义指令有 size
参数,如果我想 MY_BLOCK
大小增长到 1024,我可以使用
define block MY_BLOCK with alignment = 32, size = 1024 { section myblock };
而且效果很好。
但是,我希望尺寸为 relative
到原始尺寸。所以我用
define block MY_BLOCK with alignment = 32, size = __section_size(section myblock) + 64 { section myblock };
这次链接器报错
Error[Lc009]: "__section_size" undefined
看起来 __section_size
只能在 C 中使用,而不是链接器配置文件。
相比之下,我们可以简单地使用ARMGCC
. = . + 64
在链接器文件中实现这个目的。我想知道它是否可以在 IAR 中实现。
有人可以帮我吗?
实现此目的的方法是创建一个带有填充的空块并将其添加到 MY_BLOCK
。为了确保内容和填充按文件中列出的顺序放置,我们将属性 fixed order
添加到 MY_BLOCK
。我们还需要将 keep { block MY_PADDING };
添加到配置文件以告诉链接器包含 MY_PADDING
即使其内容未从应用程序中引用。结果看起来像这样:
define block MY_PADDING with size = 64 {};
define block MY_BLOCK with alignment = 32, fixed order { section myblock,
block MY_PADDING };
keep { block MY_PADDING };
place in CODE_RAM { block MY_BLOCK };
我正在从事 IAR 项目。在它的链接器配置文件中,一个block定义如下
define block MY_BLOCK with alignment = 32 { section myblock };
place in CODE_RAM { block MY_BLOCK };
这创建了一个32字节对齐的MY_BLOCK
内存对象,链接到物理内存CODE_RAM
。
我想要实现的是,在块的末尾留下一些额外的填充区域(比如 64 字节)。块定义指令有 size
参数,如果我想 MY_BLOCK
大小增长到 1024,我可以使用
define block MY_BLOCK with alignment = 32, size = 1024 { section myblock };
而且效果很好。
但是,我希望尺寸为 relative
到原始尺寸。所以我用
define block MY_BLOCK with alignment = 32, size = __section_size(section myblock) + 64 { section myblock };
这次链接器报错
Error[Lc009]: "__section_size" undefined
看起来 __section_size
只能在 C 中使用,而不是链接器配置文件。
相比之下,我们可以简单地使用ARMGCC
. = . + 64
在链接器文件中实现这个目的。我想知道它是否可以在 IAR 中实现。
有人可以帮我吗?
实现此目的的方法是创建一个带有填充的空块并将其添加到 MY_BLOCK
。为了确保内容和填充按文件中列出的顺序放置,我们将属性 fixed order
添加到 MY_BLOCK
。我们还需要将 keep { block MY_PADDING };
添加到配置文件以告诉链接器包含 MY_PADDING
即使其内容未从应用程序中引用。结果看起来像这样:
define block MY_PADDING with size = 64 {};
define block MY_BLOCK with alignment = 32, fixed order { section myblock,
block MY_PADDING };
keep { block MY_PADDING };
place in CODE_RAM { block MY_BLOCK };