, LD script.
++, 62 prescaler_1ms
, . RTC_FREQ
const
, , 62 .
++ _Z41__static_initialization_and_destruction_0ii
. .init_array
.pre_init_array
. main()
, . , script:
__preinit_array_start, __preinit_array_end
__init_array_start, __init_array_end
_preinit_array
__init_array
. _init
, . _init
, gcc, , , .
, ++ __fini_array_start
__fini_array_end
. , , .
++:
, , , .init_array
:
. = ALIGN(4);
__preinit_array_start = .;
KEEP(*(.preinit_array))
__preinit_array_end = .;
. = ALIGN(4);
__init_array_start = .;
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
__init_array_end = .;
- , . , , , .
( ) __Init_Data()
startup.c
:
extern void (*__preinit_array_start[])(void);
extern void (*__preinit_array_end[])(void);
extern void (*__init_array_start[])(void);
extern void (*__init_array_end[])(void);
void __Init_Data(void) {
...
...
void (**f)(void);
for (f = __preinit_array_start; f != __preinit_array_end; f++)
(*f)();
for (f = __init_array_start; f != __init_array_end; f++)
(*f)();
}
, _init
, . .