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/TMS320F280045:Delfino 至 Piccolo 合并+无法从非基元位置加载

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/788037/ccs-tms320f280045-delfino-to-piccolo-merge-cannot-load-from-non-primitive-location

器件型号:TMS320F280045
主题中讨论的其他器件:C2000WARE

工具/软件:Code Composer Studio

您好!

我正在尝试将两个项目合并为一个项目。 我使用的第一个代码是 C2000套件中 f2800x 示例 SPI_ex4_EEPROM 下的示例、我能够将程序加载到 uC 上、运行它并验证我的 EEPROM 功能。  

我尝试工作的第二个项目是购买的软件堆栈、该堆栈设计为在 TMS320F2837xd 上运行。 因此、我尝试将为 Delfino 系列设计的固件移植到 Piccolo 芯片。 我仔细检查了代码、清除了所有错误、并为我所需的芯片设置了 C2000套件中的驱动程序。

我能够获取代码进行编译并加载到芯片上。 调试器中的所有内容都正常、程序会被加载、但一旦我尝试运行程序、我就会得到以下结果:没有"0x3fbd92"可用的源代码  

当我逐步完成程序时、我可以看到、当 调用函数 SYSCTL_setClock (device_setClock_CFG)时、会发生错误。 当我将鼠标悬停在函数上时、我看到以下错误: 错误:无法从非基元位置加载 (如下面的屏幕截图所示)

我似乎无法弄清楚如何解决这个问题。 我已经按照其他线程的建议扩展了280045_flash_lnk.cmd 文件中的某些 RAM/FLASH 位置、但它没有改变我的结果。 非常感谢您的帮助。

谢谢、

Jeremy

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

    听起来、您的某些包含路径可能仍在引用 F2837xd device_support/driverlib 文件中的配套资料。 您能否仔细检查项目属性并确保对 F2837xd 的所有引用已更改为 F28004x。 这也适用于链接器命令文件和类似类型的文件。

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

    您好、Ozino、

    我检查了所有的 include、它们似乎只引用项目中的文件或 C2000Ware 中的28004x driverlib。 请参阅随附的屏幕截图。  

    我还应该去别的地方吗?

    谢谢、

    Jeremy

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

    控制台窗口中存在哪些构建错误? 您是否修改了当前的 linke 命令文件? 或者、您是否正在使用 C2000Ware 中提供的其中一个?

    此致、
    Ozino
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    关于寄存器窗口问题和错误、您可以尝试几个可能有帮助的项目:
    -启动新的工作区并加载一个简单的 C2000Ware 示例,查看您的寄存器窗口是否工作正常
    -检查项目属性、然后在"Build->C2000 Linker->File Search Path"下确保没有列出链接器
    -下一步可能是创建一个新的空项目并添加必要的文件
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ozino、

    控制台窗口中没有错误。 该项目毫无问题地编译、甚至加载到 uC 中。 然后、当我尝试运行程序时、我最初报告的错误会出现。

    我尝试了您的其他建议、执行了以下操作:我启动了一个清理项目并加载了 C2000Ware SPI_eeproom 示例、并验证了该项目是否全部正常工作。 然后我添加了 CANopen 固件文件、项目停止运行、同样、它构建干净、加载良好、但不运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jeremy、

    有关"没有可用于"0x3fbd92"的源文件"消息、请参阅以下文章:

    http://e2e.ti.com/support/microcontrollers/c2000/f/171/p/656494/2412239#2412239

    显示源代码所需的一切是添加符号、这些符号可在 C2000Ware 中找到、网址为:

    C:\ti\c2000\C2000Ware_ \libraries\boot_rom\f28004x\revB\rom_source

    至于单步执行'Error:Cannot load from non-基 元 location'时的错误、这可能是因为.lib 中的调试信息位于用于编译它的不同机器上。  一些选项包括:

    1.使用它,每次出现时只需“定位文件”

    2.导入 Driverlib 项目并重新编译.lib、以便路径与您的本地计算机匹配

    3.执行 Driverlib 示例的操作并将 Driverlib 源代码添加到项目中、但将其排除。 这样 CCS 就可以找到这些文件、但不会与.lib 发生任何构建冲突。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

    - Ken

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

    Ken、

    1. 如您所说、要显示源代码、我在哪里添加符号? 我在 C2000中找到了您告诉我的文件路径、并将其添加到了工程的 include 中。
    2. 更重要的是、解决"Error: Cannot load from non-基 元 location"(错误:无法从非基元位置加载)的第二个建议无效。 我从 driverlib 中获取了示例、特别是 SPI_ex4_EEPROM、并将其导入到了一个干净的 CCS 项目中。 在进行必要的修改后、我能够运行我的简单测试程序。 我会逐步进行验证、并且不会卡在 SYSCTL_DELAY 函数调用上。 不幸的是、一旦我添加了其他文件、我会在第一次调用 SYSCTL_DELAY 时遇到相同的问题。  

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

    要加载符号、您需要位于 CCS Debug 视图中:Run -> Load -> Load Symbols...

    对于第二个项目、我需要将您送回使用 Driverlib 的人员。

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

     谢谢。 但回到符号、我希望在其中加载什么文件扩展名? 当我打开你给我的路径、然后打开 ROM_Sources 文件夹时、它们会生成更多包含大量文件的文件夹。

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

    为了澄清这一点、加载程序会将代码加载到目标、并将符号加载到调试器。 加载符号会将符号加载到调试器、而不会将任何符号加载到目标。

    此时、您已使用符号加载项目(代码)。 现在、您只需要加载引导 ROM 的符号。 在\rom-sources\CCS_files\CPU\Release 下找到.out 文件以加载符号。 但愿这对您有所帮助。

    - Ken