Немного изменим таблицу прерываний, добавив системные векторы:
/* 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);}Это необходимо для того чтобы логика программы не ломалась при исключительных ситуациях.