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.

[参考译文] TMS320F28377S:F28377S:将".text"段移动到 RAM

Guru**** 2394405 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1131023/tms320f28377s-f28377s-moving-text-segment-to-ram

器件型号:TMS320F28377S

您好!

在 闪存程序开始时、代码被复制到 RAM (c_int00 -> main、将代码复制到 RAM ->在 RAM 中运行的代码)。

.TI.ramfunc:{} load = flash,run = RAM,page = 0,align (4)
{"../lib/C28_DSP_Fpu_Lib/lib/C28x_Fpu_DSP_library.lib"
 "./lib/flash_api/lib/F021_API_F2837xS_FPU32.lib"
 "./lib/C28_Fpu_FastRTS/lib/rts2800_fpu32_fast_f늹 补_coff .lib"
 module1.obj (.text)
 module2.obj (.text)
 module3.obj (.text)

这是常见的做法。 ".text"-段 位于闪存中、因此 c_int00和 main 将  从闪存执行。 一切都好。

但现在我需要从 RAM 执行每个".text"-函数、启动时的一些实际闪存函数除外:c_int00、main 等。 因此、即使 F$$DIV 等(隐藏的)函数也将位于 RAM 中。 当然、我可以找到".text"来 加载=闪存、运行= RAM、但如果我这么做、所有内容都将出现在 RAM 中、并且无法启动。

我如何向链接器说一些函数(尤其是 C-lib-functions)应该从闪存执行? 是否有一个存储在闪存中(几乎) 100% RAM 程序的教程?

谢谢!
Edwin

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

    您好!

    如果您希望将整个.text 保留在 RAM 中、则可以这样做。 您可以使用 BINIT 段在引导期间执行复制、而不是在主代码中获取符号并执行存储

    .text:  load = flash、run = RAM、table (BINIT)

    binit:>闪存

    有关更多详细信息:

    https://www.ti.com/lit/ug/spru513q/spru513q.pdf

    此致、

    Veena

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

    您好!

    我尝试过、但不知怎么说、我遇到了一个问题:binit (boot28.asm 中的 Do_BINIT)复制哪个函数? c_int00位于.text 段中... 当引导加载程序调用 c_int00时、UC 挂起、因为 c_int00未复制到 RAM。 有点复杂

    如何解决此问题?

    注意:由于我使用的是 C2000 (2002年末、TMX320F2812、评估板、因此从一开始就使用)、我总是通过自写代码将所需的函数复制到 RAM 中。

    此致、
    Edwin

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

    binit 作为引导流程的一部分完成、引导流程 位于 cinit 之前。 某些 RTS 函数可能无法用于加载/运行、并且调试环境中的引导流程可能不同。

    因此、最好将这些函数移至闪存本身。 另一个.text 段可以从 RAM 运行


    text:load >> flash
    运行>> RAM
    表(BINIT)
    对齐(8)

    FlashText{
    rts*(.text)
    LED_ex1_blinky.obj (.text:main)
    codestartbranch.obj (.text)
    }>闪存,align (8)

    binit:> FLASH、align (8)

    此致、

    Veena