如何在IAR链接器配置文件中为块添加一些填充

问题描述

我正在从事IAR项目。在其链接器配置文件中,一个块定义如下

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 };

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...