Немного изменим таблицу прерываний, добавив системные векторы:
/* table of Cortex vectors */
void *vector_table[] __attribute__ ((section(".vectors"))) = {
&_estack, /*! stack begin */
/* Core interrupts */
reset_handler, /*!#0 cortex-m4 reset interrupt begin code of this */
nmi_handler, /*!#1 cortex-m4 non maskable interrupt */
hard_fault_handler, /*!#2 cortex-m4 hardware fault interrupt */
mem_manage_handler, /*!#3 cortex-m4 memory management interrupt */
bus_fault_handler, /*!#4 cortex-m4 bus fault interrupt */
usage_fault_handler,/*!#5 cortex-m4 usage fault interrupt */
А также создадим обработчики для этих векторов:
/* reset handler */
void reset_handler(void) {
/* call working code */
work();
}
/* nmi handler */
void nmi_handler(void) {
while (1);
}
/* hardware fault handler */
void hard_fault_handler(void) {
while (1);
}
/* memory management handler */
void mem_manage_handler(void) {
while (1);
}
/* bus fault handler */
void bus_fault_handler(void) {
while (1);
}
/* usage fault handler */
void usage_fault_handler(void) {
while (1);
}
Это необходимо для того чтобы логика программы не ломалась при исключительных ситуациях.