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.

[参考译文] TMS320F28377D:覆盖 SysCtlDelay .sect

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568982/tms320f28377d-override-sysctldelay-sect

器件型号:TMS320F28377D

我遇到了这样一个问题: 在此帖子 和 此帖子中、当任何内容加载到闪存中时、28377D Delfino 上的 RAM 未正确加载。  我设法将除4个字节之外的所有内容从闪存中移出、这似乎解决了问题、我不知道将4个字节加载到闪存中的是什么、所以我放弃了。  最近、我发现字符串常量已损坏、我还记得闪存中的任何内容可能会破坏 RAM 负载限制。  我终于找到了4个字节,结果是 SysCtlDelay()。

我不使用 SysCtlDelay()、但我在 SYSCTL.c 中使用其他函数  SysCtlDelay()被定义为:

_asm (".def _SysCtlDelay)\n"
".sect \"ramfuncs\"\n"
".global _SysCtlDelay \n"
"_SysCtlDelay:\n"
"子 ACC、#1\n"
" BF _SysCtlDelay、GEQ\n"
" LRETR\n"); 

它强制它位于 ramfuncs 中、而 ramfuncs 被加载到闪存中。  如何覆盖 SysCtlDelay .sect?  目前 、我正在禁用这一行代码、但一般来说、我认为无需修改库代码、而是按原样使用库代码。

此致、

Joseph

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

    Joseph、

    你是对的。 您可以修改工程中的链接器命令文件、以指示 ramfuncs 从 RAM 加载和运行。 您甚至不必为 RAM 中的 ramfuncs 使用加载/运行类型的规范、因为加载/运行地址是相同的。

    希望这对您有所帮助。

    此致

    Santosh Athuru

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

    Santosh、

    啊,当然! 谢谢!

    此致、

    Joseph