【问题标题】:GNU linker script: Selective Run address(VMA) allocationGNU 链接描述文件:选择性运行地址 (VMA) 分配
【发布时间】:2012-06-08 06:40:28
【问题描述】:

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

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

【问题讨论】:

  • 我通过将所有目标文件的 TEXT 部分与所需的 IRAM* 代码链接到 SRAM 中来解决此问题,而不是选择性地链接例程。不是可扩展的解决方法..

标签: text linker load gnu


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 2011-12-11
    • 2015-05-05
    • 2018-11-09
    • 2012-12-28
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多