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/TMS320F28022:强制例程始终加载在同一位置进行调试

Guru**** 2391175 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/743458/ccs-tms320f28022-force-routines-to-always-load-in-the-same-place-for-debugging

器件型号:TMS320F28022

工具/软件:Code Composer Studio

Win7 SP1 (32位)。 CCS 6.1.3。 F28022。

我正在调试1或2例程、我发现重新编译、擦除和重新加载闪存既慢又浪费了闪存写入周期。

虽然闪存的额定值大约为数千个周期、但我假设如果我编译和重新加载足够的时间、我最终将达到该限制。

我已经设置了 CMD 文件、因此我可以将大多数例程放入闪存中、还有一些正在 RAM 中进行调试。 好的。

我还设置了一个开关、使 CMD 将闪存部分设置为"NoLoad"、这会阻止擦除/编程周期。

但是、这本身不起作用、因为闪存中的某些例程将调用 RAM 中的例程、并且这些例程可能在每个调试周期的不同位置。

有没有办法、在不为每个函数创建一个段的情况下、我可以轻松地强制编译器(实际加载器)将所有函数放置在同一位置、直到我完成 RAM 函数的调试?

我知道我可能需要在 RAN 函数之间分配一些"灵活"的空白空间、以便它们的入口点保持一致。

我正在考虑一个单独的程序、它使用运行中的映射文件来使 CMD 包含文件或类似内容。

我正在考虑编写几个外部程序、一个使用映射文件来制作 CMD 部分、另一个将旧映射文件与编译器在每次编译后将创建的映射文件进行比较、以警告我是否有任何函数更改位置。

谢谢、Mark。

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

    典型的闪存耐久度为50000个周期(在器件额定温度范围内)、因此、如果您只是在环境温度下进行调试、我认为您可以。 同意它肯定比重新加载到 RAM 慢。

    我认为没有任何方法可以请求链接器将变量放置在与上次相同的位置。

    如果它只是几个函数、那么只进行静态分配可能比编写脚本来检测符号表编译到编译中的差异更快(但我认为这会起作用)。

    如果您担心静态函数分配的空间限制、请参阅:
    e2e.ti.com/.../739227

    或者将接口函数分配到一个小块 RAM 中的固定位置、然后让这些接口函数调用主函数。 然后、只需让链接器将主函数放置在 RAM 中的任何位置即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Devin:

    我想、即使在每天50天、也需要一些时间才能达到50万个周期。

    我在某种程度上做了一些工作。 我想调试两个函数、所以我在 CMD 文件的 RAM 的第0页上做了2个区域。 然后我制作了2个部分、然后我在这2个函数上使用了 pragma、并将每个部分放在其自己的 RAM 区域中。 这样、从编译到编译、所有函数都应保持在适当的位置。

    我没有想到实际变量位于不同的位置、但除非我更改变量的大小、否则我认为我可以。

    我将把这个标记为已解决、如果我遇到某种奇迹(或写我自己的奇迹)、我将返回这里并更新。

    感谢你能抽出时间。

    标记。