微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。