Cortex-M4 定制 HardFault_Handler
Cortex-M4 custom HardFault_Handler
我正在为 Cortex M4 编写自定义 HardFault_Handler
-- 但由于未知原因,我无法单步执行处理程序中的任何指令。
当我使用 gdb 中断时,我卡在了处理程序的第一条指令处。 n
不会继续执行下一条指令,gdb 会再次开始旋转,直到我中断。 OpenOCD 显示我反复停止,但似乎我的异常处理程序中的任何代码都没有被执行...但每次我中断时,我都在异常处理程序中。
...
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
...
我知道如果我在 main 处中断,我可以单步执行代码(在 C 中)直到我生成异常并在我的自定义处理程序中捕获它。但是,单步执行处理程序中的指令只是将 be 置于处理程序的开头。
这是我的处理程序:
.syntax unified
.thumb
.global HardFault_Handler
.section .text.HardFault_Handler,"ax",%progbits
HardFault_Handler:
.size HardFault_Handler, .-HardFault_Handler
Infinite_Loop:
mov r0, #0x1
mov r1, #0x2
mov r2, #0x3
b Infinite_Loop
.thumb
需要替换为.thumb_func
。
该指令确保函数指针对拇指模式有效。 Thumb 模式指令的地址为奇数,而 arm 模式指令的地址为偶数。该指令将 add 1 to the address 的函数指针(即异常向量指针)。
如果没有这个指令,指针的地址会处于arm模式(偶地址),这本身就会引发异常。换句话说,我的异常被异常抢占了。
添加 .thumb_func
以将此符号明确标识为 thumb-mode 函数,以便链接器可以做正确的事情。
.syntax unified
.thumb_func
.global HardFault_Handler
.section .text.HardFault_Handler,"ax",%progbits
HardFault_Handler:
.size HardFault_Handler, .-HardFault_Handler
Infinite_Loop:
mov r0, #0x1
mov r1, #0x2
mov r2, #0x3
b Infinite_Loop
我正在为 Cortex M4 编写自定义 HardFault_Handler
-- 但由于未知原因,我无法单步执行处理程序中的任何指令。
当我使用 gdb 中断时,我卡在了处理程序的第一条指令处。 n
不会继续执行下一条指令,gdb 会再次开始旋转,直到我中断。 OpenOCD 显示我反复停止,但似乎我的异常处理程序中的任何代码都没有被执行...但每次我中断时,我都在异常处理程序中。
...
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
Info : halted: PC: 0x08000240
...
我知道如果我在 main 处中断,我可以单步执行代码(在 C 中)直到我生成异常并在我的自定义处理程序中捕获它。但是,单步执行处理程序中的指令只是将 be 置于处理程序的开头。
这是我的处理程序:
.syntax unified
.thumb
.global HardFault_Handler
.section .text.HardFault_Handler,"ax",%progbits
HardFault_Handler:
.size HardFault_Handler, .-HardFault_Handler
Infinite_Loop:
mov r0, #0x1
mov r1, #0x2
mov r2, #0x3
b Infinite_Loop
.thumb
需要替换为.thumb_func
。
该指令确保函数指针对拇指模式有效。 Thumb 模式指令的地址为奇数,而 arm 模式指令的地址为偶数。该指令将 add 1 to the address 的函数指针(即异常向量指针)。
如果没有这个指令,指针的地址会处于arm模式(偶地址),这本身就会引发异常。换句话说,我的异常被异常抢占了。
添加 .thumb_func
以将此符号明确标识为 thumb-mode 函数,以便链接器可以做正确的事情。
.syntax unified
.thumb_func
.global HardFault_Handler
.section .text.HardFault_Handler,"ax",%progbits
HardFault_Handler:
.size HardFault_Handler, .-HardFault_Handler
Infinite_Loop:
mov r0, #0x1
mov r1, #0x2
mov r2, #0x3
b Infinite_Loop