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:需要找到在触发看门狗之前执行代码的地址...

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/569162/tms320f28377d-need-to-locate-address-where-code-was-executing-before-watchdog-fired

器件型号:TMS320F28377D

我已将看门狗配置为中断模式、以便它在看门狗溢出后生成中断。 然后、我对调试信息进行 NV 备份、并通过 ISR 本身将看门狗设置为复位模式。 这会在 ISR 执行完成后导致看门狗复位。

我正在使用 C28x (TMS320F28377D)控制器。 根据参考手册、返回地址存储在 XAR7/RPC/STACK 上。 当我处于看门狗 ISR 中时、请帮助我检索返回地址。

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

    Aashutosh、

    我认为唯一可靠的方法是编写一个汇编 ISR、以便从堆栈中获取返回地址。  随附的示例文件显示了如何通过对齐堆栈指针、然后使用堆栈指针相对寻址来提取最后的32位值、从而从 ISR 内加载包含中断返回地址的累加器。  然后、您可以从 ISR 调用任何其他所需的函数。

    此致、

    Richard

    e2e.ti.com/.../demo2806x_5F00_asmisr.asm

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、
    感谢您分享解决方案。 我将尝试实现该功能、并了解在没有系统和用户堆栈隔离的情况下该功能的工作原理。 我在测试期间观察到、返回地址被压入堆栈、但其位置不是确定性的、它会根据压入堆栈的其他任何内容而变化。

    因此、在我的情况下、在 WDT 中断上、我将 RPC 与任务活动标志一起推送到堆栈上。 存储 RPC 值之后,我从堆栈中弹出它。RPC 寄存器为我提供上次调用函数的返回地址,我可以使用映射文件查找函数名称。