The entry point to the C library initialization routine is
However, any embedded application on your target hardware performs
some system-level initialization at startup.
The following figure shows a possible initialization sequence for an embedded system based on an ARM architecture:
If you use a scatter-loading description file to tailor stack
and heap placement, the linker includes a version of the library
heap and stack setup code using the linker defined symbols,
for these region names. Alternatively you can create your own implementation.
The reset handler is normally a short module coded in assembler
that executes immediately on system startup. As a minimum, your
reset handler initializes stack pointers for the modes that your
application is running in. For processors with local memory systems,
such as caches, TCMs, MMUs, and MPUs, some configuration must be
done at this stage in the initialization process. After executing,
the reset handler typically branches to
begin the C library initialization sequence.
There are some components of system initialization, for example,
the enabling of interrupts, that are generally performed after the
C library initialization code has finished executing. The block of
$Sub$$main() performs these tasks
immediately before the main application begins executing.