You copied the Doc URL to your clipboard.

Hardware initialization

Note

This does not apply to ARMv6-M and ARMv7-M profiles.

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.

You can make use of the $Sub and $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 code.

The following example shows how $Sub and $Super can be used in this way:

extern void $Super$$main(void);
void $Sub$$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 $Super$$main().