コンパイラで実行ファイルを生成する際、最後のリンク コマンドにはコンパイル済みのスタートアップ ファイルおよびエンド ファイルが含まれます。スタートアップ ファイルは、アプリケーション コードが実行される前に、言語およびプラットフォーム環境を設定します。スタートアップ ファイルでは、通常次の処理が実行されます。
- 必要に応じて、リセット、割り込み、および例外ベクターを設定します。
- スタック ポインター、スモール データ アンカー、およびその他のレジスタを設定します。詳細は、次の表を参照してください。
- BSS メモリ領域を 0 にクリアします。
- C++ コンストラクターなどの言語初期化関数を呼び出します。
- ハードウェア サブシステムを初期化します。たとえば、プログラムのプロファイルが作成される場合は、プロファイル タイマーを初期化します。
- main プロシージャの引数を設定し、呼び出します。
エンド ファイルには、プログラムの終わりに実行する必要のあるコードが含まれています。エンド ファイルでは、通常次の処理が実行されます。
- C++ デストラクタなどの言語クリーンアップ関数を呼び出します。
- ハードウェア サブシステムを初期化を取り下げます。たとえば、プログラムのプロファイルが作成されている場合は、プロファイル サブシステムをクリーンアップします。
次の表には、C ランタイム ファイルのレジスタ名、値、およびその説明がまとめられています。
登録 | 値 | 説明 |
---|---|---|
r1 | _stack-16 | スタック ポインター レジスタ。16 バイトの最初の負のオフセットでスタック領域の下部をポイントするよう初期化されます。この 16 バイトは、引数を渡すのに使用されます。 |
r2 | _SDA2_BASE | 読み取り専用のスモール データ領域アンカー アドレス。 |
r13 | _SDA_BASE_ | 読み出し/書き込み可能なスモール データ領域アンカー アドレス。 |
その他のレジスタ | 未定義 | その他のレジスタの値は定義されていません。 |
この後、さまざまなアプリケーション モードで使用される初期化ファイルについて説明します。この情報は、アプリケーションのスタートアップ コードを理解したい、または変更したいという上級者ユーザーを対象にしています。
MicroBlaze では、C ランタイム初期化に 2 つの段階があります。最初の段階では主にベクターが設定され、その後に第 2 段階が開始します。また、アプリケーション モードによっては、exit スタブも提供されます。