Freertos hardfault分析 - 堆栈寄存器

时间:2018-04-08 12:54:34

标签: c++ c assembly freertos cortex-m3

我对freertos hardfault处理程序及其分析感到沮丧,通过将堆栈寄存器加载到ram中来找出错误原因。

它写在assambly中。有没有办法可以将其转换为c代码并执行?

static void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp \n" " mrsne r0, psp \n" " ldr r1, [r0, #24] \n" " ldr r2, handler2_address_const \n" " bx r2 \n" " handler2_address_const: .word prvGetRegistersFromStack \n" ); }

来自

enter link description here

1 个答案:

答案 0 :(得分:1)

该函数仅检索指向堆栈的指针,其中存储了异常之前的所有寄存器内容(即,对于ARM Cortex M7,您可以找到有关异常帧here的更多信息)。

然后它调用函数prvGetRegistersFromStack,该函数已经写在C中,您可以在其中检查已定义变量(r0r1等所有寄存器上)。

其中一个寄存器pc存储导致硬故障的指令的地址。您可以检查内存映射,以找出导致它的功能。

在该函数之后,在您所指的页面中,有一个名为“使用寄存器值”的部分,它解释了如何从指令地址设置断点。

没有必要翻译任何东西,FreeRTOS已经为你完成了。