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
__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
main(), the entry to your application. When
the main application has finished executing,
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.