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.

[参考译文] F29H85X-RAM-EVM:使用#pragma CODE_SECTION(xyz、".TI.ramfunc");或__attribute__((section(".TI.ramfunc.Link2"))) 从 SOM 运行函数

Guru**** 2439710 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1533025/f29h85x-som-evm-using-pragma-code_section-xyz-ti-ramfunc-or-__attribute__-section-ti-ramfunc-link2-for-running-functions-from-ram

器件型号:F29H85X-EVM-EVM SOM

工具/软件:

您好专家、  

我正在将旧的 C28x 工程迁移到 C29x、我有 一些问题、

一些正在运行的函数  ramfuncs 段 pragma 实现

pragma CODE_SECTION (xyz、“ramfuncs")“);

问题 1:
 在 C29 中、 如果使用、它现在也应该在 RAM 中运行  __attribute__((section(“.TI.ramfunc.Link2")“)) 或  __attribute__((section(“.TI.ramfunc.")“))? 为什么使用 Link2?

我找不到这方面的任何示例或文档。 请您能告诉我正确的方法来做到这一点并解释差异吗?

我现在不使用 SSU 配置。 它处于 SSUMode1(这是标准配置)。

问题 2. 使用 C29 时、我们不需要执行以下哪些步骤? 初始流程有何不同?

  //将时间关键型代码和闪存设置代码复制到 RAM
  //这包括以下函数: InitFlash ();
  // RamfuncsLoadStart、RamfuncsLoadSize 和 RamfuncsRunStart
  //符号由链接器创建。 请参阅器件.cmd 文件。
  memcpy (&RamfuncsRunStart&RamfuncsLoadStart(size_t)&RamfuncsLoadSize);
这些可能是愚蠢的问题,但他们帮助我更清楚地了解差异。

谢谢你。

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

    你(们)好

    1.你 应该 使用  __attribute__((section(“.TI.ramfunc.Link2")“))  或  __attribute__((section(“.TI.ramfunc")“))  具体取决于功能。  

    在 TRM 中、您可以看到带有本注释的某些寄存器:  仅可由 CPU1.LINK0、CPU1.LINK1、CPU1.LINK2 写入的寄存器。 所有 CPU 都可以读取所有链路中的所有寄存器。 仅当 Zone0 或 Zone1 为所有 CPU 的完全调试启用时、才允许进行调试写入访问。 始终允许调试读取。 HSM 进行寄存器读取/写入访问。

    如果 ramfunc 段中的函数正在写入这些寄存器、您可以使用  段(“.TI.ramfunc.Link2")“)、  否则、  段(“.TI.ramfunc")“)  应该没有问题。  这有助于在稍后配置 SSU 时区分功能。

    2. F29 中不需要此 memcpy 函数调用、而是在引导时初始化期间使用 BINIT 复制表完成。  

    在 C28 linker.cmd 文件中、您可能已经看到了这一点  

        .TI.ramfunc:{}load = FLASH_BANK0、
                RUN = RAMLS0、
                LOAD_START (RamfuncsLoadStart)、
                load_size (RamfuncsLoadSize)、
                LOAD_END (RamfuncsLoadEnd)、
                RUN_START (RamfuncsRunStart)、
                RUN_SIZE (RamfuncsRunSize)、
                RUN_END (RamfuncsRunEnd)、
                对齐 (8)

    在 C29 中、我们使用的是、
      .TI.ramfunc :{}load=FLASH_RP0、run=SRAM_LPAx、table (BINIT)、palign (8)

    在这里、我们不会创建 START、END 和 SIZE 符号并使用 memcpy 将函数复制到 RAM、而是让链接器创建复制表。  此表在启动时的.cinit 段之前处理。 我们不必在应用程序中显式调用任何复制函数。

    此致、
    Samritha