Everything

第12章  システム構成管理機能


本章では,RI850V4が提供しているシステム構成管理機能について解説しています。
12.1 概  要
RI850V4におけるシステム構成管理機能では,カーネル初期化部から呼び出される初期化ルーチンに関連した機能を提供しています。
12.2 ユーザ・オウン・コーディング部
RI850V4では,さまざまな実行環境に対応するために,システム構成管理機能のうち,RI850V4が処理を実行するうえで必要となるハードウエア依存処理(初期化ルーチン)をユーザ・オウン・コーディング部として切り出しています。
これにより,さまざまな実行環境への移植性を向上させるとともに,カスタマイズを容易なものとしています。
12.2.1 初期化ルーチン
初期化ルーチンは,ユーザの実行環境に依存したハードウエア(周辺コントローラなど)を初期化するためにユーザ・オウン・コーディング部として切り出された初期化処理専用ルーチンであり,カーネル初期化部から呼び出されます。
なお,RI850V4では,初期化ルーチンを管理するに当たり,初期化ルーチンと一対一に対応した管理オブジェクト(初期化ルーチン管理ブロック)を用いることにより,初期化ルーチンが取り得る状態の管理,および初期化ルーチン自体の管理を行っています。
以下に,リセットの発生からタスクに制御が移るまでに実行される処理の流れを示します。
図12-1  処理の流れ(初期化ルーチン)
- 初期化ルーチンの基本型
初期化ルーチンを記述する場合,VP_INT型の引き数を1つ持ったvoid型の関数として記述します。
なお,引き数exinfには“初期化ルーチン情報で指定した拡張情報”が設定されます。
以下に,初期化ルーチンをC言語で記述する場合の基本型を示します。
 #include        <kernel.h>              /*標準ヘッダ・ファイルの定義*/
 
 void
 inirtn ( VP_INT exinf )
 {
         ............
         ............
 
         return;                         /*初期化ルーチンの終了*/
 }

- 初期化ルーチン内での処理
RI850V4では,カーネル初期化部から初期化ルーチンに制御を移す際,独自の初期化前処理を行っています。また,初期化ルーチンからカーネル初期化部に制御を戻す際にも,独自の初期化後処理を行っています。このため,初期化ルーチンを記述する際には,以下に示す注意点があります。
- 記述方法
C言語,またはアセンブリ言語で記述します。
C言語で記述するときは通常の関数と同様に記述することができます。
アセンブリ言語で記述するときは使用するコンパイラの呼び出し規約にのっとって作成してください。
- スタックの切り替え
RI850V4では,初期化ルーチンに制御を移す際,基本情報において指定されたシステム・スタックへの切り替え処理を,カーネル初期化部に制御を戻す際に該当スタックへの切り替え処理を行っています。したがって,初期化ルーチン内でスタックの切り替えに関する記述を行う必要がありません。
- サービス・コールの発行
RI850V4では,初期化ルーチン内でサービス・コールの発行を制限(禁止)しています。
- EIレベル・マスカブル割り込みの受け付け状態
RI850V4では,初期化ルーチンに制御を移す際,EIレベル・マスカブル割り込みの受け付け禁止処理として,プライオリティ・マスク・レジスタPMRのPMnビットに対する操作,およびプログラム・ステータス・ワードPSWのIDビットに対する操作を行います。
なお,操作対象となるPMnビットは,コンフィギュレーション時に最大割り込み優先度maxintpriで定義した割り込み優先度範囲となります。
備考 RI850V4の初期化処理が未完了のため,基本情報で定義した基本クロック用タイマ割り込みの例外コードtim_intno,および,割り込みハンドラ情報で定義した例外コードinhnoに対応したEIレベル・マスカブル割り込みの受け付けは禁止されています。
備考1 RI850V4が時間管理用に利用するハードウエア(OSタイマ)を初期化する際には,システム・コンフィギュレーション・ファイル作成時に基本情報で定義した基本クロック周期tim_baseで基本クロック用タイマ割り込みが発生するような設定を行う必要があります。
備考2 直接ベクタ方式のエントリ・ファイルを使用時に必要となるリセット・ベクタ・ベース・アドレスRBASEのRINTビット,および例外ハンドラ・ベクタ・アドレスEBASEのRINTビットに対する操作(縮小モードで動作させるか否か)は本ルーチン内で行ってください。
備考3 EIレベル割り込みマスク・レジスタIMRmのMKnビット(または,EIMKnビット)に対する操作(EIレベル・マスカブル割り込みの受け付け許可)は本ルーチン内で行ってください。
12.2.2 初期化ルーチンの登録
RI850V4では,初期化ルーチンの静的な登録のみサポートしています。処理プログラムからサービス・コールを発行して動的に登録することはできません。
初期化ルーチンの静的登録とは,システム・コンフィギュレーション・ファイルで静的API“ATT_INI”を使用して初期化ルーチンを定義することをいいます。
静的API“ATT_INI”の詳細は,「17.5.12 初期化ルーチン情報」を参照してください。