.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 = .
GLOBAL_INIT_SLOT(clock_init, 001); GLOBAL_INIT_SLOT(gpio_init, 002); global_init_slot
Wir erweitern ständig unsere Produktpalette, um mit den ständigen Änderungen der AV-Technologie Schritt zu halten. Einfachere Installation, verbesserte Haltbarkeit, bessere Ästhetik - Ihre Anforderungen bestimmen unseren Fertigungsprozess vom Konzept bis hin zur Produktion.