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.

[参考译文] 编译器/TMS320F28377D:是否需要在编译器升级后将段"ramfuncs"重命名为".TI.ramfunc&quot?

Guru**** 2465890 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/932465/compiler-tms320f28377d-is-it-necessary-to-rename-section-ramfuncs-into-ti-ramfunc-after-compiler-upgrade

器件型号:TMS320F28377D
Thread 中讨论的其他器件:controlSUITE

工具/软件:TI C/C++编译器

你(们)好。
根据适用于版本为"2837xD"的 controlSUITE。 210、它会根据编译器版本将"ramfuncs"更改为".TI.ramfunc"。 我们为公司开发了该代码数年。 首先、我们将闪存上的所有编程部分命名为:
 
在.c 文件中
#pragma CODE_SECTION (some 函数、"ramfuncs"); 
在闪存链接器中(cmd 文件)
ramfuncs:load = FLASHEN、
run = CPU1RAMGS、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
page = 0、align (4) 
然后、有一天我们将 编译器版本从 v6.2.7升级到 v18.12.5、而不将关键字"ramfuncs"更改为".TI.ramfunc"。 它似乎可以正常工作(目前)、但 与您建议的编码不相同。 此外、我们搜索了许多文章、讨论用户更新编译器时的命名工作。
 
以下是我的问题:
  1. 如果我们将这些名称保留在编译器 v18.12.5中,会发生什么情况? 闪存程序是否仍然像我们更改编译器之前一样正常工作?
  2. 如果需要".TI.ramfunc"命名、 我应该创建另一个闪存程序段并将其命名为什么? 段是否有效命名为 ".TI.ramfunc2" ? 命名规则是什么?
此致
Henry
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    解决的总体问题是:为了使代码更快地运行、在系统启动期间将一些函数从闪存复制到 RAM、然后从 RAM 执行。  在编译器支持命令行选项--ramfuncs 之前,客户实施了自己的解决方案,它通常与您现在使用的解决方案类似。  添加-ramfuncs 后、解决此问题变得更容易。    

    [引用 user="Henry Teng"]如果我们将这些名称与编译器 v18.12.5保留在一起,会发生什么情况?

    它继续以同样的方式工作。

    [引用用户="Henry Teng"]闪存程序是否仍然像我们更改编译器之前一样正常工作?

    是的。

    如果稍后您尝试将--ramfuncs 与当前解决方案结合使用,可能会导致一些混淆。  可能会发生一些函数被复制到 RAM、而其他函数不会复制到 RAM、或类似的情况。  我不知道您是否应该担心这种可能性。  如果您担心它,则可以将链接器命令文件更改为类似的文件...

    ramfuncs:
    {
    *(ramfuncs)
    *(.TI.ramfunc)
    }
    load = FLASHEN、
    run = CPU1RAMGS、
    load_start (_RamfuncsLoadStart)、
    load_size (_RamfuncsLoadSize)、
    load_end (_RamfuncsLoadEnd)、
    run_start (_RamfuncsRunStart)、
    run_size (_RamfuncsRunSize)、
    run_end (_RamfuncsRunEnd)、
    page = 0、align (4) 

    这将创建一个名为 ramfuncs 的输出段。  它由所有名为 ramfuncs 或.TI.ramfunc 的输入段组成。  就像它现在的工作方式一样、这个输出段从闪存中启动、并且启动代码将其复制到 RAM 中执行。  使用此语法、如果指定函数使用#pragma CODE_SECTION 在 RAM 中执行、或使用命令行选项--ramfuncs、则此输出段将包含该函数。

    谢谢、此致、

    乔治