startup.c

Определим внешнею переменную которую инициализирует скрипт сборщика:

/* provided by linker script */
extern unsigned long _estack;

Внешние функции, среди которых и наша рабочая функция, остальные нужны ОСРВ, для подключения к соотвествующим обработчикам прерываний:

/* extern functions */
extern void xPortPendSVHandler();
extern void xPortSysTickHandler();
extern void vPortSVCHandler();
extern void work(void);

Обработчик сброса:

/* reset handler */
void reset_handler(void) {
    work();
}

И наконец таблица векторов сброса:

/* Table of Cortex vectors */

void *vector_table[] __attribute__ ((section(".vectors"))) = {
    &_estack,           /*! stack begin */
    /* Core interrupts */
    reset_handler,      /*!#0 cortex-m3 reset interrupt begin code of this */
    0,                  /*!#1 cortex-m3 non maskable interrupt */
    0,                  /*!#2 cortex-m3 hardware fault interrupt */
    0,                  /*!#3 cortex-m3 memory management interrupt */
    0,                  /*!#4 cortex-m3 bus fault interrupt */
    0,                  /*!#5 cortex-m3 usage fault interrupt */
    0,                  /*!#6 reserved */
    0,                  /*!#7 reserved */
    0,                  /*!#8 reserved */
    0,                  /*!#9 reserved */
    vPortSVCHandler,    /*!#10 cortex-m3 system service interrupt */
    0,                  /*!#11 cortex-m3 debug monitor interrupt */
    0,                  /*!#12 reserved */
    xPortPendSVHandler, /*!#13 cortex-m3 penable request for system service interrupt */
    xPortSysTickHandler,/*!#14 cortex-m3 system tick timer interrupt */
    /* External Interrupts */
    0,                  /*!%0 window watchdog interrupt */
    0,                  /*!%1 PVD through EXTI line detection interrupt */
    0,                  /*!%2 tamper adn timestamp through EXTI interrupt */
    0,                  /*!%3 RTC wakeup through EXTI interrupt */
    0,                  /*!%4 flash global interrupt */
    0,                  /*!%5 RCC global interrupt */
    0,                  /*!%6 EXTI line0 interrupt */
    0,                  /*!%7 EXTI line1 interrupt */
    0,                  /*!%8 EXTI line2 interrupt */
    0,                  /*!%9 EXTI line3 interrupt */
    0,                  /*!%10 EXTI line4 interrupt */
    0,                  /*!%11 DMA1 channel 1 global interrupt */
    0,                  /*!%12 DMA1 channel 2 global interrupt */
    0,                  /*!%13 DMA1 channel 3 global interrupt */
    0,                  /*!%14 DMA1 channel 4 global interrupt */
    0,                  /*!%15 DMA1 channel 5 global interrupt */
    0,                  /*!%16 DMA1 channel 6 global interrupt */
    0,                  /*!%17 DMA1 channel 7 global interrupt */
    0,                  /*!%18 ADC1 and ADC2 global Interrupt  */
    0,                  /*!%19 USB Device High Priority or CAN1 TX Interrupts */
    0,                  /*!%20 USB Device Low Priority or CAN1 RX0 Interrupts */
    0,                  /*!%21 CAN1 RX1 Interrupt */
    0,                  /*!%22 CAN1 SCE Interrupt */
    0,                  /*!%23 External Line[9:5] Interrupts */
    0,                  /*!%24 TIM1 Break Interrupt */
    0,                  /*!%25 TIM1 Update Interrupt */
    0,                  /*!%26 TIM1 Trigger and Commutation Interrupt */
    0,                  /*!%27 TIM1 Capture Compare Interrupt */
    0,                  /*!%28 TIM2 global Interrupt */
    0,                  /*!%29 TIM3 global Interrupt */
    0,                  /*!%30 TIM4 global Interrupt */
    0,                  /*!%31 I2C1 Event Interrupt */
    0,                  /*!%32 I2C1 Error Interrupt */
    0,                  /*!%33 I2C2 Event Interrupt */
    0,                  /*!%34 I2C2 Error Interrupt */
    0,                  /*!%35 SPI1 global Interrupt */
    0,                  /*!%36 SPI2 global Interrupt */
    0,                  /*!%37 USART1 global Interrupt */
    0,                  /*!%38 USART2 global Interrupt */
    0,                  /*!%39 USART3 global Interrupt */
    0,                  /*!%40 External Line[15:10] Interrupts */
    0,                  /*!%41 RTC Alarm through EXTI Line Interrupt */
    0,                  /*!%42 USB Device WakeUp from suspend through EXTI Line Interrupt */
};