In most embedded systems, an initialization sequence executes to set up the system before the main task is executed.
The following figure shows the default initialization sequence.
Figure 8-4 Default initialization sequence
__main is responsible for setting up
the memory and
__rt_entry is responsible for
setting up the run-time environment.
__main performs code and data copying, decompression, and zero initialization of the ZI data. It then branches to
__rt_entry to set up the stack and heap, initialize the library functions and static data, and call any top level C++ constructors.
__rt_entry then branches to
main(), the entry to your application. When the main application has finished executing,
__rt_entry shuts down the library, then hands control back to the debugger.
The function label
main() has a special
significance. The presence of a
forces the linker to link in the initialization code in
Without a function labeled
main(), the initialization
sequence is not linked in, and as a result, some standard C library functionality
is not supported.