Hi, I've contributed a generic fault handler mechanism, particularly for ARMv7m (Cortex M3/M4(F)/M7).
The fault handlers include:
- HardFault handler, which decodes the fault registers and generates a description string.
- _unhandled_exception handler, which decodes the active vector, so you can effectively see which interrupt was triggered.
The HardFault handler (here) does the following:
- Switches to a separate stack (in case of a corrupt SP).
- Decodes the hard fault registers (done in C).
- Calls an application-defined hook
- Creates an artificial stack frame for the debugger and causes a breakpoint, in order for GDB to show a meaningful stack unwind, so you can see the whereabouts of the instruction that caused the fault.
- If no debugger is attached, restores the separate stack and calls chSysHalt("hard fault")
The _unhandled_exception handler:
- Decodes the active vector, so you can effectively see which interrupt was triggered.
- If no debugger is attached, calls chSysHalt("unhandled exception")
Also, I included a demo project (here). Any suggestions are welcome!
Cheers,
Diego.
Hard fault handler
-
- Posts: 65
- Joined: Fri Dec 20, 2013 3:59 pm
- Location: Buenos Aires, Argentina
- Has thanked: 1 time
- Been thanked: 16 times
Re: Hard fault handler
Hi Diego,
I'm recently a nasty unhandled exception currently and found your handler! I was able to make it work, however the only thing that doesn't work is the backtrace.I get:
Do you have any idea what I can do to make it work? I'm using chibiOS 20.x
I'm recently a nasty unhandled exception currently and found your handler! I was able to make it work, however the only thing that doesn't work is the backtrace.I get:
Code: Select all
#0 _hardfault_epilogue () at stablChibiOS/os/common/ports/ARMCMx/compilers/GCC/utils/fault_handlers_v7m.c:191
#1 0x00000000 in ?? ()
Do you have any idea what I can do to make it work? I'm using chibiOS 20.x
Return to “Development and Feedback”
Who is online
Users browsing this forum: No registered users and 60 guests