2.18 Hardware initialization
In general, it is beneficial to separate all system initialization code from the main application. However, some components of system initialization, for example, enabling of caches and interrupts, must occur after executing C library initialization code.
This does not apply to ARMv6-M and ARMv7-M profiles.
Use of $Sub and $Super
You can make use of the
$Super function wrapper
symbols to insert a routine that is executed immediately before entering the main
application. This mechanism enables you to extend functions without altering the source
This example shows how
$Super can be used in
extern void $Super$$main(void);
cache_enable(); // enables caches
int_enable(); // enables interrupts
$Super$$main(); // calls original main()
The linker replaces the function call to
main() with a call to
$Sub$$main(). From there you can call a routine that enables caches and
another to enable interrupts.
The code branches to the real
main() by calling