大家好、我现在正在进行调试。 当问题发生时、我想要捕获堆栈帧。
我找到了有趣的 MSP 寄存器值。 本文档第25页。 e2e.ti.com/.../sprad28.pdf
我曾尝试过该示例。 但我甚至在项目的构建过程中都失败了。
错误如下:

请帮助
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.
大家好、我现在正在进行调试。 当问题发生时、我想要捕获堆栈帧。
我找到了有趣的 MSP 寄存器值。 本文档第25页。 e2e.ti.com/.../sprad28.pdf
我曾尝试过该示例。 但我甚至在项目的构建过程中都失败了。
错误如下:

请帮助
尊敬的 Alex:
MSP 用于 M4F 内核。 对于 R5F 内核、您应该使用 5.3中的代码在中止处理程序中获取内核寄存器:
hwiP_armv7r_handlers_nortos.c
Volatile uint32_t lrVal、pcVal、spVal;
__attribute__((naked)) void Hwip_data_abort_handler (void)
{
//当发生数据中止时,处理器首先在此中止
/*存储内核寄存器*/
_asm volatile ("mov %0,lr":"=r"( lrVal ));
_asm volatile ("mov %0,pc":"=r"( pcVal ));
_asm volatile ("mov %0,sp":"=r"( spVal ));
/*调用中止处理程序的 C 版本*/
_asm ("B Hwip_data_abort_handler_c");
}
此致、
明
尊敬的 Alex:
Hwip_data_abort_handler 仅在数据中止发生时才被调用。
您应该将以下 asm 代码放入事件处理程序(HwiP_EVENT_handler):
_asm volatile ("mov %0,lr":"=r"( lrVal ));
_asm volatile ("mov %0,pc":"=r"( pcVal ));
_asm volatile ("mov %0,sp":"=r"( spVal ));
然后调用 C 中的事件处理程序:
/*调用中止处理程序的 C 版本*/
_asm ("B Hwip_event_handler_c");
此致、
明
我仿真了数据中止、并且执行以下操作:
------------------
void Hwip_data_abort_handler_c (uint32_t * pMSP)
{
易失性 uint32_t loop = 1;
DebugP_log ("\nUsageFault 异常\n");
DebugP_log ("lr =%lx\n"、lrVal);
DebugP_log ("pc =%lx\n"、pcVal);
DebugP_log ("xpsr =%lx\n"、spVal);
while (循环)
;
}
void __attribute__((interrupt ("abort")、section (".text.hwi")) Hwip_data_abort_handler (void)
{
/*存储内核寄存器*/
_asm volatile ("mov %0,lr":"=r"( lrVal ));
_asm volatile ("mov %0,pc":"=r"( pcVal ));
_asm volatile ("mov %0,sp":"=r"( spVal ));
/*调用中止处理程序的 C 版本*/
_asm ("B Hwip_data_abort_handler_c");
-------------------------------------------------------
但它不起作用、不会打印值