Specifications
CAVR-4
Part 1. Using the compiler
The DLIB runtime environment
65
SYSTEM STARTUP
When an application is initialized, a number of steps are performed:
● When the cpu is reset it will jump to the program entry label __program_start in
the system startup code.
● Enables the external data and address buses if needed
● Initializes the stack pointers to the end of CSTACK and RSTACK, respectively
● The function __low_level_init is called, giving the application a chance to
perform early initializations
● Static variables are initialized except for __no_init and __eeprom declared
variables; this includes clearing zero-initialized memory and copying the ROM
image of the RAM memory of the rest of the initialized variables depending on the
return value of
__low_level_init
● Static C++ objects are constructed
● The main function is called, which starts the application.
SYSTEM TERMINATION
An application can terminate normally in two different ways:
● Return from the main function
● Call the exit function.
As the ISO/ANSI C standard states that the two methods should be equivalent, the
system startup code calls the
exit function if main returns. The parameter passed to the
exit function is the return value of main.
The default
exit function is written in C. It calls a small function _exit, also written
in C, that will perform the following operations:
● Call functions registered to be executed when the application ends. This includes
C++ destructors for static and global variables, and functions registered with the
standard C function atexit
● Close all open files
● Call __exit
● When __exit is reached, stop the system.
An application can also exit by calling the
abort or the _Exit function. The abort
function just calls __exit to halt the system, and does not perform any type of cleanup.
The
_Exit function is equivalent to the abort function, except for the fact that _Exit
takes an argument for passing exit status information.
If you want your application to perform anything extra at exit, for example resetting the
system, you can write your own implementation of the
__exit(int) function.