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.

[参考译文] CCS/TMS320F28075:CLA 中从闪存运行的代码出现问题

Guru**** 2562360 points
Other Parts Discussed in Thread: C2000WARE, SFRA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/692686/ccs-tms320f28075-issue-with-code-in-cla-running-from-flash

器件型号:TMS320F28075
主题中讨论的其他器件:C2000WARESFRA

工具/软件:Code Composer Studio

您好!

我正在从事 TMS320f28075 32位微控制器的工作、用于电源控制应用。

在 CLA 内读取和处理 ADC 值。 从闪存运行代码时、观察到 CLA 内部的代码未执行、即使存在用于将代码从闪存复制到 RAM 的代码。 这种行为的可能原因是什么? 此外、CLA 中的常量是否有可能不会被复制到 RAM 中?

提前感谢!

此致、

Anjana

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

    您好、Anjana、

    • 即使存在用于将代码从闪存复制到 RAM 的代码也是如此

    您是指在 RAM、链接器段.TI.ramfunc 和 ramfuncs 中初始化 CPU 函数的代码吗?

    对于 CLA 代码和 CLA 常量也应该执行同样的操作。 CLA 例程链接到 Cla1Prog 部分。 CLA 常量是链接的.const_cla 段。 您需要像.TI.ramfunc 和 ramfuncs 一样对它们进行初始化。

    Edward

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

    Edward 反应很好。

    您需要确保 CLA 代码和数据被复制到 RAM LS 块、并且您已经为 CLA 程序和 CLA 数据正确配置了它们。

    您可以在 C2000Ware 中看到一些 CLA 示例。 C2000Ware 中的 CLA 数学库示例也演示了这一点。

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

    尊敬的 Edward:

    您好 Sal、

    感谢您的回复!

    我已附加链接器文件。\n 您能浏览一下吗?

    当配置为闪存时、我添加了以下代码段。 我应该添加额外的行来复制 CLA 常量吗?

    #ifdef _flash

    /*将代码从闪存复制到 RAM */

    memcpy (((uint32_t *)&Cla1funcsRunStart、(uint32_t *)&Cla1funcsLoadStart、

    (uint32_t)和 Cla1funcsLoadSize);

    #endif /*_flash */

    谢谢、

    Anjana

    e2e.ti.com/.../Linker_5F00_File.txt

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

    是的、你应该为 CLA 常量添加额外的行、当然、如果你有任何 CLA 常量。

    或者、您可能需要更简洁的方法、即在程序启动时初始化自动段。 在下面的 CLA 代码示例中、CLA 常量和 ramfuncs 由启动例程初始化。 您可能应该保持 ramfuncs 不变、因为 Fxxxx_sysctrl.c 调用 memcpy 来初始化 ramfunc、这只是一个示例、您可以如何避免这些 memcpy 调用。 执行 ramfunc 初始化的 fxxxx_sysctrl.c 可能是您产生困惑的原因、ramfunc 被初始化、而 CLA 不是。

    第{
    .TI.ramfunc
    ramfuncs

    -l F021_API_F2837xS_FPU32.lib (.text)
    --library=SFRA_F_Lib.lib
    --library=SFRA_F_Lib.lib

    } 负载= FLASHD、
    运行=/*RAMLS0 | RAMLS1 |*/ RAMLS2 |RAMLS3,
    PAGE = 0、ALIGN (4)、
    表(BINIT)


    Cla1Prog :LOAD = FLASHD,
    运行= RAMLS5、
    PAGE = 0、ALIGN (4)、
    表(BINIT)

    .const_cla :load = FLASHH、
    运行= RAMLS1、
    PAGE = 1、ALIGN (4)、
    表(BINIT)

    二进制文件 :> FLASHAB,page = 0 /*.binit 保留如何操作的信息
    使用 table (BINIT)*/初始化段

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

    Edward 的回应很好。 我建议遵循他的建议并在不起作用的情况下进行发布。

    SAL