Because of a discrepancy between the ARMv7-M Architecture and the ARM EABI, it is not safe to use normal C functions directly as interrupt handlers. The EABI requires the stack be 8-byte aligned, whereas ARMv7-M only guarantees 4-byte alignment when calling an interrupt vector. This can cause subtle runtime failures, usually when 8-byte types are used.
Functions that are used directly as interrupt handlers should be
annotated with __attribute__((__interrupt__))
.
This tells the compiler to
add special stack alignment code to the function prologue.