AN4989 Rev 3
57/118
AN4989
Exception handling
117
6 Exception
handling
It is usually helpful, or even mandatory in complex project, to properly trap and find root
cause of software exception like HardFault and NMI. This chapter intends to make the user
aware of a few techniques used to help investigating such issue.
In order to get deeper into the subject, the user can usefully refer to Joseh Yiu’s work and
book collection
The Definitive Guide to Arm-Cortex-M
, and to Carmelo Noviello’s recent on-
line guide
Mastering STM32
.
6.1
Default weak Handlers
By default Handlers are implemented as __weak functions which perform endless loops:
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
Nothing is trigged on debugger side and application looks hanged / stuck.
In that case, code break is needed and the PC must be at the address of the Handler.
Some IDEs provide the faulty calling code through Call stack window. (Keil
®
MDK-Arm
µVision, STM32CubeIDE).
If it is not the case, display registers and find the faulty code address in SP + 0x18
In STM32CubeIDE all weak default handlers point to the same DefaultHandler which can be
confusing.
A more efficient approach is to trap the exception by instrumenting Handlers.