Global_init_slot -
.init_slots : __init_slots_start = .; KEEP(*(.init_slots.001)) KEEP(*(.init_slots.002)) /* higher priorities may be overridden by explicit ordering */ __init_slots_end = .; >FLASH Startup code:
Linker script collects all .init_slots.* into an array: global_init_slot
// slot_def.h typedef void (*init_fn_t)(void); #define GLOBAL_INIT_SLOT(fn, priority) \ __attribute__((section(".init_slots." #priority))) \ const init_fn_t _slot_##fn = fn // peripherals.c void clock_init(void) ... void gpio_init(void) ... .init_slots : __init_slots_start = .