如何解决如何在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 举报,一经查实,本站将立刻删除。