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.

[参考译文] TMS570LC4357:调试时数据中止(DABT)

Guru**** 2468460 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1043899/tms570lc4357-data-abort-dabt-when-debugging

器件型号:TMS570LC4357

您好!

我 有以下问题:

我们尝试使用用于 Cortex-A/R 的 Lauterbach 调试器(ARMv7 32位)调试 Cortex R5。

当在断点处停止并在之后恢复时、我们始终会得到一个无法理解的数据中止(DABT)异常。 在没有任何断点的情况下、软件工作正常。 因此、在受测的软件内不存在对存储器位置的非法访问。

有没有人可以解决这个问题、或者在调试和 DABT 异常之间看到了同样的相似关系?

此致、

Peter

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

    尊敬的 Peter:

    请在此处查看我的应用手册:

    http://software-dl.ti.com/hercules/hercules_docs/latest/hercules/FAQ/FAQ.html#troubleshooting-abort-exceptions

    C15  DFSR 寄存器的值是多少?

    您是否能够捕获 R14_abt? 您可以找到在数据中止为精确中止时生成数据中止的地址(R14_abt - 0x8)。  

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

    您好 QJ、

    感谢您的回答! 同时、我发现了发生数据中止异常的原因:通过设置断点、包含返回位置的寄存器 R14会在函数调用期间被覆盖。 这样、当到达返回指令时、代码跳转到任何其他代码、其中错误的参数会导致写入非法的存储器位置。

    那么、问题现在是、我眼中的调试器为什么会"覆盖" R14、从而破坏代码的正确执行。

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

    您好 QJ、

    再次感谢您的回答! 我们实际上发现 、我们的代码中存在堆栈问题、问题出在我们身边。 当调试器处理断点时、它通过使用专用的异常堆栈段来实现该目的 、该段被堆栈(错误地)使用、因为我们在调试时会引发堆栈溢出。

    这个问题已经解决。 但请允许这些评论帮助其他人今后不要犯同样的错误。

    此致、Peter