C语言 Freertos硬故障分析-堆栈寄存器

zdwk9cvp  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(218)

我在freertos hardfault处理程序和它的分析上遇到了困难,通过将堆栈寄存器加载到ram中来找出错误的原因。
它是在汇编中写的。有没有一种方法可以将其转换为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

ac1kyiln

ac1kyiln1#

该函数仅检索指向堆栈的指针,其中存储了异常之前的所有寄存器的内容(即对于ARM Cortex M7,您可以找到有关异常帧here)的更多信息。
然后它调用函数prvGetRegistersFromStack,该函数已经用C编写,您可以从定义的变量(r0r1等)中检查所有寄存器。
其中一个寄存器pc存储导致硬故障的指令的地址。您可以检查内存Map,以找到哪个函数导致了它。
在您所参考的页面中,在该函数之后有一个称为“使用寄存器值”的部分,该部分解释了如何从指令地址设置断点。
不需要翻译任何东西,FreeRTOS已经为您完成了。

相关问题