Добавим основной заголовочный файл:
/* include headers */
#include "stm32f4xx.h"
Определим внешние переменные в том числе и начало стека(который необходим для работы С-кода):
/* external vars */
extern unsigned long _estack;
Также определим прототипы функций:
/* prototypes of functions */
void reset_hander(void);
Определим обработчик вектора сброса(куда мк придет следуя указаниям таблицы векторов) а также таблицу векторов:
/* reset handler */
void reset_handler(void) {
}
/* table of Cortex vectors */
void *vector_table[] __attribute__ ((section(".vectors"))) = {
&_estack,
reset_handler,
};
Следует отметить что в начале таблицы векторов как следует из теории загрузки мк идет адрес начала стека, а затем указатель на вектор сброса. Также для таблицы векторов задана своя секция - .vectors. Это сделанно для того чтобы вектора находились всегда в начале прошивки.