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/TMS320F280025C:调试器未加载 M0?

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/937663/ccs-tms320f280025c-m0-not-loaded-by-debugger

器件型号:TMS320F280025C

工具/软件:Code Composer Studio

C2000团队、

好的、我可能有点担心、但如果段链接到 M0、调试器不应该将段加载到 M0中?  我已经尝试将 DCL 函数以及初始化的 const uint16数组放在这里、但实际上这两个数都没有进行编程。  程序加载后、我可以使用 MEMORY 窗口手动写入0x128。  我是否可以在该器件的仿真软件中发现错误? 或者我是在做一些愚蠢的事情吗?

正如您在下面看到的、代码段和数据段在被放置在 M0中时实际上会被加载。  但是、当放置在 GS0中时、代码由调试器加载、但数据段不加载。

供参考的数据声明:

#pragma DATA_SECTION (testArray、"testArray")
const volatile uint16_t testArray[]={1、2、3、4、5}; 

位于 M0中的段:

GS0中的段:

最棒的
Trey

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

    Trey、

    这很奇怪。 您发送的快照是在加载代码后还是在运行应用程序后? 您还在 CCS 控制台窗口中看到任何错误/警告吗?  

    此致、

    Vivek Singh

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

    加载代码后、可能没有 ramfunc 副本、或者应用程序中可能会覆盖存储器的任何内容。

    代码构建过程完全没有错误和警告。

    Trey

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

    我刚才通过在 M0中放置 CODE_START 函数来尝试它、它可以正常工作。 是否可以压缩示例项目并将其发送?

    此致、

    Vivek Singh

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

    您好 Trey、

    希望一切都能顺利进行。

    在此应用中、您是否有任何内容映射到闪存?  如果是、在这种情况下不保证 RAM 加载。  如您所知、所有内容都必须在运行时映射到闪存并复制到 RAM。  如果没有任何内容映射到闪存、则这不适用。

    您是加载 COFF/eabi 可执行文件还是其他格式?

    谢谢、此致、

    Vamsi

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

    Vamsi! )

    我正在使用标准28002x_general_flash_lnk.cmd 文件、我已对该文件进行修改、以添加我放置在 RAM 中用于测试的 DCL 函数部分。  我的印象是、在调试编程期间、闪存 API 将运行以进行闪存编程、并且在闪存操作后、RAM 也将由调试器写入。  我想这并不是为了帮助用户找到在对生产器件进行编程之前需要放置在闪存中的段?

    当然、我最终会将该段放置在闪存中并复制它、但对于一些初始测试、我只是将其放置在随该器件的 DCL 库提供的 CMD 文件中指定的段中。

    您能否解释为什么 M0和 GS0之间的行为存在差异?

    谢谢、
    Trey

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

    Trey、

    是的、一个原因是客户忽略将其放回闪存。  

    嵌入式闪存编程器仅用于加载到闪存(所有3P 也执行相同的操作)-不保证 RAM 加载。  内核甚至不会尝试加载到 RAM 中。  CCS 在看到闪存地址时、将调用闪存 DLL 以接管编程。   

    闪存插件代码被编译以使用 RAM、传入的数据流也被加载到 RAM 中(可变缓冲器长度用于性能优化)-如果应用程序也使用 RAM、我们需要根据每个应用程序移动插件代码。  除此之外、CCS 必须根据传入的地址/数据流在闪存 DLL 和 RAM 加载程序之间切换(CCS 并非在所有情况下都是为了处理此问题而构建的)。 我们决定为插件代码/数据修复一些空间、但由于器件间提供的存储器存在差异、我们无法使其保持恒定-因此、在完成闪存编程后、我们无法在末尾轻松加载特定 RAM 地址范围。

    在本例中、在该器件上、我可能已使用 M0/M1进行插件。  我可以检查您是否需要更多详细信息。

    谢谢、此致、

    Vamsi

        

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

    无需进一步研究。  我只是想确保这里没有错误。

    我想念每个人!  感谢您、Vivek 和团队的其他成员推出了另一款出色的设备:D

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

    Trey、

    谢谢你。

    我们也会想念你!  请保持联系。  我要关闭此帖子。

    谢谢、此致、

    Vamsi