35 lines
827 B
C
35 lines
827 B
C
#include <stdint.h>
|
|
|
|
extern void stack_start(void); // Defined in link.ld
|
|
extern int main(void);
|
|
|
|
void init_memory(void) {
|
|
// Copy .data SECTION to ram
|
|
extern uint32_t _data_start, _data_end, _data_addr;
|
|
for (uint32_t *dst = &_data_start, *src = &_data_addr; dst < &_data_end;) {
|
|
*dst++ = *src++;
|
|
}
|
|
|
|
// Initialize .bss SECTION with zeros
|
|
extern uint32_t _bss_start, _bss_end;
|
|
for (uint32_t *dst = &_bss_start; dst < &_bss_end; dst++) {
|
|
*dst = 0;
|
|
}
|
|
}
|
|
|
|
void reset(void) {
|
|
(void)init_memory();
|
|
|
|
main();
|
|
|
|
// Infinite loop in case main returns
|
|
for (;;) (void) 0;
|
|
}
|
|
|
|
// Create minimal interrupt vector table
|
|
// 16 standard and 86 STM32F411xC/E-specific handlers
|
|
void (*const interrupt_vector_table[16 + 86])(void) __attribute__((section(".isr_vector"))) = {
|
|
stack_start, // Defined in link.ld
|
|
reset
|
|
};
|