如何在 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 };