2.2.5. アプリケーションの起動

ほとんどの組み込みシステムでは、メインタスクが実行される前に、初期シーケンスによってシステムのセットアップが実行されます。

Figure 2.5 は、デフォルトの初期化シーケンスを示しています。

Figure 2.5. デフォルトの初期化シーケンス

デフォルトの初期化シーケンス

上位レベルでは、この初期化シーケンスを 3 つの機能ブロックに分けることができます。__main は直接 __scatterload に分岐します。__scatterload ではランタイム時のイメージのメモリマップが設定されるのに対し、__rt_entry(ランタイム時のエントリ)では C ライブラリが初期化されます。

__scatterload によって、コードとデータのコピー、および ZI データのゼロ初期化が実行されます。さらに、必要に応じて、RW データが伸張されます。

__scatterload__rt_entry に分岐します。この分岐により、アプリケーションのスタックとヒープのセットアップ、ライブラリ関数とそのスタティックデータの初期化、およびグローバルに宣言されたオブジェクトのコンストラクタの呼び出し(C++ のみ)が実行されます。

その後、__rt_entry は、アプリケーションのエントリである main() に分岐します。メインアプリケーションの実行が終了すると、__rt_entry によってライブラリがシャットダウンされ、制御がデバッガに戻されます。

関数ラベル main() には特別な意味があります。main() 関数が存在することにより、リンカは __main および __rt_entry 内の初期化コードをリンクします。main() 関数が存在しない場合は、初期化シーケンスがリンクされず、その結果、標準 C ライブラリの一部の機能がサポートされなくなります。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential