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.

[参考译文] TMS320F28379D:当配置为 CPU1_RAM 时、它可以正常工作、但当更改为 CPU1_FLASH 时、它会在 ESTOP0处停止

Guru**** 2242430 points
Other Parts Discussed in Thread: LAUNCHXL-F28379D, C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1386565/tms320f28379d-when-the-configuration-is-cpu1_ram-it-works-fine-but-when-changed-to-cpu1_flash-it-stops-at-estop0

器件型号:TMS320F28379D
主题中讨论的其他器件:LAUNCHXL-F28379DC2000WARE

工具与软件:

您好!

我正在寻找问题的解决方案。

我将使用 CCS12.6并借助 LAUNCHXL-F28379D 硬件开发嵌入式软件。

我使用的示例代码是"gpio_ex2_toggle"、而 CPU 选择仅限于 CPU1。
为了匹配 LAUNCHXL-F28379D 的硬件配置、请将工程属性的 SysConfig->Basic 选项中的封装和器件选项更改为"F2837xD_337ZWT"、并在 C2000_Compiler 中添加了 C2000_Compiler 预定义符号"_LAUNCHXL-F28379D"。

在软件开发的早期阶段、我们能够激活 CPU1_FLASH 配置并验证我们可以将代码写入内部闪存 ROM、我们可以执行预期的操作、以及即使在按下硬件复位按钮后软件也能再次工作。
此后、我们已将配置切换为 CPU1_RAM 并添加了软件功能。 当配置为 CPU1_RAM 时、软件根据包含的函数运行。 但是、当配置切换到 CPU1_FLASH 时、软件将不工作。

在正在开发的软件中、LED 在 main ()例程中的外设初始化期间亮起。
使用 CPU1_FLASH 配置执行构建并写入 FLASH_ROM 后、按下硬件复位按钮后 LED 会亮起、因此我假设软件可以执行到 main ()例程的中间。

之后、软件在下图所示的断点处停止、对软件进行反汇编会显示它在 ESTOP0处停止。

是否有任何可能的原因或对策?

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

    您好!

    只是为了验证:

    您 尚未编辑任何链接器 cmd 文件(2837xD_RAM_lnk_cpu1.cmd 和2837xD_flash_lnk_cpu1.cmd)、对吗?  

    要在构建配置之间切换、请使用 Build Configurations >> Set Active、对吗?

    您可以在执行闪存构建后查看.map 文件以验证所有程序符号都正确位于闪存的区域吗?

    此致、

    Delaney

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

    尊敬的 Teruhiko:

    我明白了、听起来不错。 只是为了验证、您在链接器 cmd 文件中更改的所有内容是否都是.text 分配?  

    此致、

    Delaney

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

    Ms. Delaney,

    感谢您的快速响应。

    我正在就 Linker 文件的更改与您联系。

    首先、以下是对链接器文件的 FlashROM 版本的更改。
    左列是修改后的版本、右列是原始版本。
    初始化的全局变量区域".cinit"现在独立于可执行代码区域、因为在与可执行代码区域共享时发生错误。
    全局变量区域".bss"也已扩展。

    现在还可以使用 IQmath Library、因此我要根据示例代码将其添加到"section"中。

    下一项更改是链接器文件的 RAM 版本。
    如上所述、为了容纳更大的内存分配、将 RAMGS6的区域大小设置为4000h、并将 RAMGS7 - RAMGS9注释掉。

    由于代码较大、".text"区域的分配已更改。 同时更改了".bss"、".const"和".data"区域的分配。

    到目前为止,我已经注意到了,应该 IQMath.lib 放置在 FlashROM 区域中?

    我对嵌入式软件没有太多的经验。 是否有关于如何设置链接器文件的手册?

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

    Ms.Delaney,.

    我已经检查了映射文件 FlashROM 版本中的程序符号。 因此、所有程序符号都将位于 FlashROM 区域中。

    我认为初始化后的全局变量位于".data"区域中、因此我认为它们在 RAM 区域中的放置不会出现问题。


    ---
    我在论坛中搜索链接器文件中的 IQmath.lib 放置位置。 因此、我遇到了以下文章。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/878674/faq-flash---how-to-modify-an-application-from-ram-configuration-to-flash-configuration

    在本文中、FlashROM 的链接器文件为"(例如:xxx_flash_lnk_cpu1.cmd、位于 C2000Ware_x_xx_xx_xx_xx_device_support\XXX\common\cmd)"。我发现它存储在中。 浏览此文件夹、我找到一个链接器文件(2837xD_FLASH_IQMath_lnk_cpu1.cmd)、该文件似乎与 IQmath.Lib 相关。 该文件明确地将 IQMath 放置在闪存区域、因此我以相同的方式修改了链接器文件、现在我的软件可以从 FlashROM 引导。

    Fullscreen
    1
    2
    3
    /* Allocate IQ math areas: */
    IQmath : > FLASHB, PAGE = 0, ALIGN(8) /* Math Code */
    IQmathTables : > FLASHC, PAGE = 0, ALIGN(8)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    假设我的链接器文件中存在上述错误是正确的吗?

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

    尊敬的 Teruhiko:

    我将对此进行探讨、然后回复给您。

    此致、

    Delaney

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

    尊敬的 Teruhiko:

    是的、我相信这正是您的问题。  通常、如果执行闪存构建、您总是希望使用其中一个闪存链接器 cmd 文件、而如果也使用库、那么您应该使用该库的链接器 cmd 文件的闪存版本(如您所说)。 以下是一些可能也有帮助的其他资源:

    此处链接的 是有关链接器 cmd 文件的指南、该指南应该有助于您查看。

    请参阅  3.6.在引导 ROM 中访问 IQmath 函数 部分(此处为链接)、了解有关使用 IQMath 库的更多信息。

    此致、

    Delaney

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

    Ms. Delaney,

    感谢您的参与。 感谢您的帮助、我的软件问题可以得到解决。 太感谢了!!