# OS_Init

## 構文

      #include <nitro/os.h>

      void OS_Init( void );

## 引数

なし

## 返り値

なし。

## 説明

システムを初期化します。

具体的には以下のことを行なっています。NITROマーク( ) の付いているものは、NITRO モードでの動作で、TWL マーク( ) の付いているものは、TWL モードでの動作となります。

> ARM9
> 必要ならデバッグ文字列表示用の初期化を行います。 ( `OS_InitPrintServer()`)
> プロセッサ間通信システムの初期化を行ないます。 ( `PXI_Init()` )
> アリーナの初期化を行ないます。( `OS_InitArena()` )
> ロックシステムの初期化を行ないます。(`OS_InitLock()` )
> 拡張メインメモリアリーナの初期設定を行ないます。 ( `OS_InitArenaEx()` )
> IRQ 割り込みテーブルの初期化を行ないます。( `OS_InitIrqTable()` )
> IRQ スタックのチェックデータを埋め込みます。( `OS_SetIrqStackChecker()` )
> 例外表示システムの初期化を行ないます。( `OS_InitException()` )
> MI 関連の初期化を行ないます。 ( `MI_Init()` )
> Vカウントアラームシステムの初期化を行ないます。 ( `OS_InitVAlarm()` )
> VRAM の排他処理システムの初期化を行ないます。 ( `OSi_InitVramExclusive()` )
> スレッドシステムの初期化を行ないます。 ( `OS_InitThread()` )
> ソフトウェアリセットシステムの初期化を行ないます。(`OS_InitReset()` )
> TWL LIMITED でなければカートリッジライブラリの初期化を行ないます。( `CTRDG_Init()` )
> カードライブラリの初期化を行ないます。( `CARD_Init()` )
> TWL ビルドの場合、WRAM-A/B/C の初期化を行います。 ( `MI_InitWramManager()` )
> TWLモードならシステム設定の初期化を行います。 ( `SCFG_Init()` )
> パワー制御システムの初期化を行ないます。 ( `PM_Init()` )
> Vカウント が 0 になるのを待ちます。
> TWLモードならアプリジャンプ用の設定を行います。 ( `OSi_InitPrevTitleId()` )

> ARM7
> プロセッサ間通信システムの初期化を行ないます。( `PXI_Init()` )
> アリーナの初期化を行ないます。( `OS_InitArena()` )
> ロックシステムの初期化を行ないます。( `OS_InitLock()` )
> IRQ割り込みテーブルの初期化を行ないます。( `OS_InitIrqTable()` )
> 例外表示システムの初期化を行ないます。( `OS_InitException()` )
> TWLビルドの場合、MI の初期化を行います。( `MI_Init()`)
> チックシステムの初期化を行ないます。( `OS_InitTick()` )
> アラームシステムの初期化を行ないます。( `OS_InitAlarm()` )
> スレッドシステムの初期化を行ないます。( `OS_InitThread()`)
> リセットシステムの初期化を行ないます。( `OS_InitReset()` )
> カートリッジライブラリの初期化を行ないます。( `CTRDG_Init()` )
> TWLビルドなら、WRAM-A/B/C の初期化を行います。( `MI_InitWramManager()` )
> TWLモードならシステム設定の初期化を行います。( `SCFG_Init()` )

NITRO、TWL ともにユーザの `NitroMain()` あるいは `TwlMain()` に制御が移った後は、最初に `OS_Init()` を呼び出してください。`OS_Init()` 内で呼ばれている関数は動作に必須なものであり、順序を変更することは出来ません。

CTRDG に関しては、アクセスしないことが判っている場合には、メモリ占有量を減らす方法が提供されています。`CTRDG_Init()` 、 `CTRDG_DummyInit()` を参照してください。

ARM9 側の `OS_Init()` では、チックシステムの初期化やアラームシステムの初期化は行なっていません。必要ならば、`OS_Init()` の後に `OS_InitTick()` 、`OS_InitAlarm()` を (この順で) 呼び出してください。

## 参照

`OS_InitThread, OS_InitArena, OS_InitIrqTable, OS_InitTick,
OS_InitVAlarm, OS_InitException, OS_InitLock, MI_Init,
PM_Init, OS_InitReset, CTRDG_Init, CARD_Init,
OS_InitTick, OS_InitAlarm, OS_SetIrqStackChecker`

## 履歴

2009/07/01 CTRDG に関する参照先を修正
2009/06/18 `TwlMain()` について追記
2009/04/13 ARM9側のスレッド初期化について「必要なら」を削除。`CTRDG_Init()` のメモリ占有量低減について追記
2008/07/11 TWL モードの初期化について記述
2005/07/19 `OS_SetIrqStackChecker()` を追加
2005/03/14 リンク先のミスを訂正
2005/02/09 `MI_Init()` 追加、`OS_InitLock()` へのリンクを追加
2004/12/08 `OS_Init()` が最初に呼ばれるべき関数であると記述
2004/09/27 `CARD_Init()` 追加
2004/09/15 修正
2004/08/09 修正
2004/02/19 修正
2003/12/24 初版