我正在编写一个 GNU 链接器脚本文件,并且需要在正确的方向上推动以下问题。
正在为其创建链接描述文件的设备具有用于托管文本和rodata 的闪存。它还具有用于托管数据和 BSS 的 SRAM。
我创建了链接描述文件的变体,其中: - 将 CODE 和 RODATA 加载到闪存中,而 DATA 和 BSS 在 SRAM 中 - SRAM 中的 CODE、RODATA、DATA 和 BSS
这些工作正常。
我现在必须创建一个链接描述文件的变体,它在闪存中包含大部分文本。但是某些名称以众所周知的后缀结尾的例程将被加载到 SRAM 中。
例如,我希望将 Func1IRAMCode() 和 Func2__IRAMCode() 加载到 SRAM 部分,而所有其他没有 IRAMCode 后缀的函数都必须加载到闪存中。
出于可移植性的原因,我不会将属性(部分)附加到这些 SRAM 函数中。
这是我绊脚的地方。文本部分具有以下规则:
.text :
{
*(.text .text.* .gnu.linkonce.t.*);
} > FLASH
.Misc :
{
* (.text.*IRAMCode);
} > SRAM
.data 和 .bss 部分是分开定义的。
问题是 *IRAMCode() 正在获得分配的闪存地址。
从文本部分排除 *IRAMCode 的语法是什么?
你是如何在你的项目中解决这个问题的?