第15章 システム・ダウン
本章では,RI600PXが提供しているシステム・ダウン機能について解説しています。
RI600PXの稼働中に回復不可能な事象が発生するとシステム・ダウンとなり,システム・ダウン・ルーチンが呼び出されます。
システム・ダウン・ルーチンは,ユーザ・オウン・コーディング部として実装する必要があります。
備考 RI600PXで提供するサンプルのシステム・ダウンのソース・ファイルは“sysdwn.c”です。
15.2.1 システム・ダウン・ルーチン(_RI_sys_dwn__( ))
以下に,システム・ダウン・ルーチンを記述する場合の基本型を示します。システム・ダウン・ルーチンからリターンしてはなりません。
#include "kernel.h" /*標準ヘッダ・ファイルの定義*/
#include "kernel_id.h" /*cfg600pxが出力するヘッダ・ファイルの定義*/
/* プロトタイプ宣言 */
void _RI_sys_dwn__ ( W type, VW inf1, VW inf2, VW inf3 );
void _RI_sys_dwn__ ( W type, VW inf1, VW inf2, VW inf3 )
{
............
............
while(1);
}
|
備考 システム・ダウン・ルーチンの関数名は“_RI_sys_dwn__”です。
- スタック
システム・ダウン・ルーチンは,システム・スタックを使用します。
- サービス・コールの発行
システム・ダウン・ルーチンからサービス・コールを呼び出してはなりません。
表15-1 システム・ダウン・ルーチン処理開始時のPSW
|
|
|
|
|
|
|
- type≧0の場合:システム・ダウン発生前と同じ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15.2.2 システム・ダウン・ルーチンのパラメータ
-
type == -1(カーネル管理割り込みハンドラ終了時のエラー)
表15-2 システム・ダウン・ルーチンのパラメータ(
type == -1)
|
|
|
|
|
|
|
カーネル管理割り込みハンドラ終了時点で,PSW.PMが1(ユーザ・モード)である。
|
|
|
カーネル管理割り込みハンドラ終了時点で,PSW.IPL > カーネル割り込みマスクレベルである。
|
|
|
カーネル管理割り込みハンドラ終了時点で,CPUロック状態である。
|
|
|
|
割り込まれたタスクのスタック・ポインタが,ユーザ・スタック領域の範囲外を指している。
|
表15-3 システム・ダウン・ルーチンのパラメータ(
type == -2)
|
|
|
|
|
|
|
|
|
|
ext_tsk呼び出し時点で,PSW.IPL > カーネル割り込みマスクレベルである。
|
-
type == -3(組み込まれていないサービス・コールの呼び出し)
表15-4 システム・ダウン・ルーチンのパラメータ(
type == -3)
-
type == -4(タスク例外処理ルーチン終了時のエラー)
表15-5 システム・ダウン・ルーチンのパラメータ(
type == -4)
|
|
|
|
|
|
|
タスク例外処理ルーチン終了時点で,PSW.IPL > カーネル割り込みマスクレベルである。
|
|
|
タスク例外処理ルーチン終了時点で,CPUロック状態である。
|
|
|
タスク例外処理ルーチン終了時点で,非タスクコンテキストである。
|
表15-6 システム・ダウン・ルーチンのパラメータ(
type == -5)
|
|
|
|
|
|
|
exd_tsk呼び出し時点で,PSW.IPL > カーネル割り込みマスクレベルである。
|
|
|
|
表15-7 システム・ダウン・ルーチンのパラメータ(
type == -6)
|
|
|
|
|
|
|
|
2 ) acptn1,acptn2,acptn3いずれかのbit15に1がセットされている。
3 ) acptn1 == acptn2 == acptn3 == 0
4 ) acptn1,acptn2,acptn3に最大ドメインID( VTMAX_DOMAIN)より 大きな値のドメインに対応するビットがセットされている。
|
|
|
先頭アドレスが同じメモリ・オブジェクトが複数定義されている。
|
|
|
あるドメインにアクセス許可されているメモリ・オブジェクト数が7を超える。
|
|
|
|
|
ユーザ・スタックの終端アドレス+1が16バイト境界でない。
|
-
type == -16(未定義の可変ベクタ割り込み)
表15-8 システム・ダウン・ルーチンのパラメータ(
type == -16)
|
|
|
- cfg600pxで-U オプションを指定しない場合 不定
- cfg600px で-U オプションを指定した場合 ベクタ番号
|
CPUの割り込み処理によってスタックに退避されたPC
|
CPUの割り込み処理によってスタックに退避されたPSW
|
-
type == -17(未定義の固定ベクタ/例外ベクタ割り込み)
表15-9 システム・ダウン・ルーチンのパラメータ(
type == -17)
|
|
|
- cfg600pxで-U オプションを指定しない場合 不定
- cfg600px で-U オプションを指定した場合 ベクタ番号
|
CPUの割り込み処理によってスタックに退避されたPC
|
CPUの割り込み処理によってスタックに退避されたPSW
|
表15-10 システム・ダウン・ルーチンのパラメータ(
type > 0)