This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280041C:ramfunc 属性

Guru**** 2535650 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/961434/tms320f280041c-ramfunc-attribute

器件型号:TMS320F280041C

您好!

 --ramfunc=on 选项等效于在使用该选项编译的翻译单元中指定所有函数的属性,而无需修改源代码。

"所有函数"是否包括"main"函数、据我了解、我们需要使用 memcpy 函数将 TI.ramfunc 中的函数从闪存复制到主函数中的 RAM、以便主函数将在闪存中执行、对吧?

那么、这是否意味着"除主函数之外的所有函数"?

在基于闪存的器件上、 BINIT 功能可用于自动将代码复制到 RAM 以在引导时执行:

.TI.ramfunc :{} load=flash,run=RAM,table (BINIT) 

这意味着什么? 这是否意味着我们无需使用 memcpy 函数将函数从闪存复制到 RAM、它将自动完成?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果在构建包含函数 main 的源文件时使用--ramfunc=on、则 main 位于.TI.ramfunc 段中。

    [引用 USER="Huijin Wang "]据我的理解,我们需要使用 memcpy 函数将 TI.ramfunc 中的函数从闪存复制到 RAM

    这是一种实现方法。  但这不是唯一的方法。

    Huijin Wang 说:
    在 main 函数中,主函数将在闪存中执行,对吗?[/quot]

    您可以正确地指出、从上电到.TI.ramfunc 段中的函数从闪存复制到 RAM、所有执行的代码都必须位于闪存中。  如果 main 执行该复制、则必须位于闪存中才能执行该操作。

    关于链接器命令文件中的这一行代码...

    [引用 user="Huijin Wang "].TI.ramfunc :{} load=flash,run=RAM,table (BINIT)

    这会形成一个名为.TI.ramfunc 的输出段。  它由所有名为.TI.ramfunc 的输入段组成。  它在闪存中分配了一个加载地址,在 RAM 中分配了一个运行地址 。  table (BINIT)创建复制表。  此复制表位于.binit 段中。  C28x 编译器附带的 RTS 库中提供的系统启动代码会自动检测.binit 段中何时有一个或多个复制表。  当存在时、它们用于根据需要复制关联的代码或数据。  在这种特定情况下、这意味着启动代码会自动检测.TI.ramfunc 的复制表条目、并使用它将段从存复制到 RAM。  有关更多详细信息, 请在 《C28x 汇编工具手册》中搜索 标题为 使用 table()运算符生成复制表的子章节。  有关 BINIT 的详细信息、请参阅标题为 引导时复制表的子章节。

    谢谢、此致、

    乔治