0

我正在编写一个 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 的语法是什么?

你是如何在你的项目中解决这个问题的?

4

1 回答 1

0

一种方法是将您的函数放在另一个部分(例如 .sram.text ),为此,请为每个特定函数(例如:)使用 gcc 的 section 属性__attribute__ (( section ".sram.text")

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

于 2012-08-26T14:26:55.603 回答