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/TMS320F28377S:使用堆栈损坏进行调试

Guru**** 2459070 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/706389/ccs-tms320f28377s-debugging-with-a-stack-corruption

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

在与打算在闪存中运行的软件的最终目标进行集成的阶段、我们将使用编译在 RAM 中运行来调试代码、以获得更多可用的断点数量。 因此、我们将使用几乎所有可用的存储器。 我们采用的编译器版本是6.4.3。

 

使用此设置调试应用程序的重要部分后、我们现在遇到了非法操作陷阱、无法解释原因。

当调试器在由 ESTOP0操作码组成的陷阱处理程序中停止时、Debug 窗格仅显示部分堆栈、在中断函数中(在 RPC 指向的地址处)、有一个带有"没有为定义符号"的地址

"、当我们知道中断的函数不能是"顶层"且位于时
没有代码。 在 RPC 指向的地址和周围环境中,似乎有所有有效的操作码。

 

我们如何调查违规操作?

 

作为附加信息、执行以下操作之一时、问题似乎消失:

  • 通过在代码中的某些点中断来改变执行时间线;
  • 更改 GSRAM 中代码的位置。

 

此致、

Nicola

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

    尼科拉

    在继续之前需要检查的一点。  如果堆栈位于 M1存储器中、则会在堆栈溢出时得到该行为。  如果您的代码在 GS15末尾附近分支、您也会得到它。  C28x 使用预取机制来加速分支、并且已知在非法存储器范围生成 Estop 之前分支会发生分支(请参阅此器件勘误表的第23页)。

    可能不是这样、但由于您正在使用几乎所有的存储器、并且更改存储器内容会改变行为、因此值得检查。  请查看 GS15末尾的内容。

    此致、

    Richard

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

    您是否已验证堆栈是否有足够的空间? 让堆栈运行到 RAM 中的代码中、或覆盖您的区域以进行变量存储、会产生奇怪的崩溃类型。

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

    您能否告知我们此问题是否仍在处理中?

    此致、

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

    您好 Richard、

    问题已得到解决:问题是使用自动变量而不是静态变量的引用。

    这导致了一种通常不可重复的行为。

    此致、

    Nicola