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.
工具与软件:
您好!
我正在寻找问题的解决方案。
我将使用 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 放置位置。 因此、我遇到了以下文章。
在本文中、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 引导。
/* Allocate IQ math areas: */ IQmath : > FLASHB, PAGE = 0, ALIGN(8) /* Math Code */ IQmathTables : > FLASHC, PAGE = 0, ALIGN(8)
假设我的链接器文件中存在上述错误是正确的吗?
尊敬的 Teruhiko:
我将对此进行探讨、然后回复给您。
此致、
Delaney
尊敬的 Teruhiko:
是的、我相信这正是您的问题。 通常、如果执行闪存构建、您总是希望使用其中一个闪存链接器 cmd 文件、而如果也使用库、那么您应该使用该库的链接器 cmd 文件的闪存版本(如您所说)。 以下是一些可能也有帮助的其他资源:
此处链接的 是有关链接器 cmd 文件的指南、该指南应该有助于您查看。
请参阅 3.6.在引导 ROM 中访问 IQmath 函数 部分(此处为链接)、了解有关使用 IQMath 库的更多信息。
此致、
Delaney
Ms. Delaney,
感谢您的参与。 感谢您的帮助、我的软件问题可以得到解决。 太感谢了!!