2.5.7. ハードウェアの初期化

一般的には、システム初期化コードはすべてメインアプリケーションから切り離した方が有効です。ただし、キャッシュや割り込みのイネーブルなど、システムの初期化のいくつかのコンポーネントは、C ライブラリ初期化コードの実行後に実行される必要があります。

$Sub および $Super という関数ラッパシンボルを使用すると、メインアプリケーションに入る直前に実行されるルーチンを(効果的に)挿入できます。このメカニズムにより、ソースコードを変更することなく、関数を拡張できます。

Example 2.12 は、この $Sub および $Super の使用方法を示しています。リンカは、main() への関数呼び出しを、$Sub$$main() への呼び出しに置き換えます。ここからキャッシュをイネーブルするルーチンと割り込みをイネーブルする別のルーチンを呼び出すことができます。

このコードは、$Super$$main() を呼び出すことで実際の main() に分岐します。

Note

$Sub$Super の詳細については、RealView Compilation Tools v3.0 Linker and Utilities Guideを参照して下さい。

Example 2.12. $Sub と $Super の使用方法

extern void $Super$$main(void);

void $Sub$$main(void)
{
    cache_enable();    // enables caches
    int_enable(); 		     // enables interrupts
    $Super$$main();    // calls original main()
}
Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential