Text GNU链接器脚本:选择性运行地址(VMA)分配

Text GNU链接器脚本:选择性运行地址(VMA)分配,text,linker,load,gnu,Text,Linker,Load,Gnu,我正在写一个GNU链接器脚本文件,需要在正确的方向上轻推以解决以下问题 正在为其创建链接器脚本的设备具有用于托管文本和rodata的闪存。它还具有用于承载数据和BSS的SRAM 我创建了链接器脚本的变体,该脚本具有: -数据和BSS在SRAM中时加载到闪存中的代码和RODATA -SRAM中的代码、RODATA、数据和BSS 这些很好用 我现在必须创建链接器脚本的一个变体,它在flash中有大部分文本。但某些名称以众所周知的后缀结尾的例程将被加载到SRAM中 例如,我希望将Func1IRAMCo

我正在写一个GNU链接器脚本文件,需要在正确的方向上轻推以解决以下问题

正在为其创建链接器脚本的设备具有用于托管文本和rodata的闪存。它还具有用于承载数据和BSS的SRAM

我创建了链接器脚本的变体,该脚本具有: -数据和BSS在SRAM中时加载到闪存中的代码和RODATA -SRAM中的代码、RODATA、数据和BSS

这些很好用

我现在必须创建链接器脚本的一个变体,它在flash中有大部分文本。但某些名称以众所周知的后缀结尾的例程将被加载到SRAM中

例如,我希望将Func1IRAMCode和Func2_uuiramcode加载到SRAM节中,而所有其他没有IRAMCode后缀的函数都必须加载到闪存中

出于可移植性的原因,我不会将attributesection附加到这些SRAM函数

这就是我绊倒的地方。 文本部分具有以下规则:

.text :
{
*(.text .text.* .gnu.linkonce.t.*);
} > FLASH

.Misc :
{
* (.text.*IRAMCode);
} > SRAM
.data和.bss部分分别定义

问题是*IRAMCode正在获得分配的闪存地址

从文本部分排除*IRAMCode的语法是什么


您是如何在项目中解决此问题的?

一种方法是将您的函数放在另一个节中,例如.sram.text,要做到这一点,请为每个特定函数使用gcc的节属性,例如:\ u attribute\ u section.sram.text


因此,很容易将所需部分通配符到SRAM

我通过将所有对象文件的文本部分与所需的IRAM*代码链接到SRAM中,而不是选择性地链接例程来解决这个问题。不是一个可扩展的解决方案。。