第15章  システム・ダウン


本章では,RI600PXが提供しているシステム・ダウン機能について解説しています。

15.1 概要

RI600PXの稼働中に回復不可能な事象が発生するとシステム・ダウンとなり,システム・ダウン・ルーチンが呼び出されます。

15.2 ユーザ・オウン・コーディング部

システム・ダウン・ルーチンは,ユーザ・オウン・コーディング部として実装する必要があります。

備考 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__”です。

- スタック
システム・ダウン・ルーチンは,システム・スタックを使用します。


- サービス・コールの発行
システム・ダウン・ルーチンからサービス・コールを呼び出してはなりません。


- 処理開始時のPSW

表15−1  システム・ダウン・ルーチン処理開始時のPSW

ビット



備考

I

0

IPL

- type < 0の場合:不定

- type≧0の場合:システム・ダウン発生前と同じ

処理開始時より下げてはなりません。

PM

0

スーパバイザ・モード

U

0

システム・スタック

C, Z, S, O

不定

その他

0



15.2.2 システム・ダウン・ルーチンのパラメータ

- type == -1(カーネル管理割り込みハンドラ終了時のエラー)

表15−2  システム・ダウン・ルーチンのパラメータ(type == -1)

inf1

inf2

inf3

解説

E_CTX(-25)

2

不定

カーネル管理割り込みハンドラ終了時点で,PSW.PMが1(ユーザ・モード)である。

3

不定

カーネル管理割り込みハンドラ終了時点で,PSW.IPL > カーネル割り込みマスクレベルである。

5

不定

カーネル管理割り込みハンドラ終了時点で,CPUロック状態である。

E_MACV(-26)

12

不定

割り込まれたタスクのスタック・ポインタが,ユーザ・スタック領域の範囲外を指している。



- type == -2(ext_tskのエラー)

表15−3  システム・ダウン・ルーチンのパラメータ(type == -2)

inf1

inf2

inf3

解説

E_CTX(-25)

1

不定

非タスク・コンテキストからext_tskを呼び出した。

4

不定

ext_tsk呼び出し時点で,PSW.IPL > カーネル割り込みマスクレベルである。



- type == -3(組み込まれていないサービス・コールの呼び出し)

表15−4  システム・ダウン・ルーチンのパラメータ(type == -3)

inf1

inf2

inf3

解説

E_NOSPT(-9)

不定

不定

組み込まれていないサービス・コールを呼び出した。



備考 「2.6.1 サービス・コール情報ファイルと“-ri600_preinit_mrc”コンパイラ・オプション」参照してください。

- type == -4(タスク例外処理ルーチン終了時のエラー)

表15−5  システム・ダウン・ルーチンのパラメータ(type == -4)

inf1

inf2

inf3

解説

E_CTX(-25)

7

不定

タスク例外処理ルーチン終了時点で,PSW.IPL > カーネル割り込みマスクレベルである。

8

不定

タスク例外処理ルーチン終了時点で,CPUロック状態である。

9

不定

タスク例外処理ルーチン終了時点で,非タスクコンテキストである。



- type == -5(exd_tskのエラー)

表15−6  システム・ダウン・ルーチンのパラメータ(type == -5)

inf1

inf2

inf3

解説

E_CTX(-25)

10

不定

exd_tsk呼び出し時点で,PSW.IPL > カーネル割り込みマスクレベルである。

11

不定

非タスク・コンテキストからexd_tskを呼び出した。



- type == -6(vsta_knlivsta_knlのエラー)

表15−7  システム・ダウン・ルーチンのパラメータ(type == -6)

inf1

inf2

inf3

解説

E_PAR(-17)

15

不定

メモリ・オブジェクト登録

(memory_object[])に関するエラー

1 ) 先頭アドレスが16バイト境界でない。

2 ) acptn1,acptn2,acptn3いずれかのbit15に1がセットされている。

3 ) acptn1 == acptn2 == acptn3 == 0

4 ) acptn1,acptn2,acptn3に最大ドメインID(VTMAX_DOMAIN)より 大きな値のドメインに対応するビットがセットされている。

5 ) 先頭アドレス > 終端アドレス

E_OBJ (-41)

不定

先頭アドレスが同じメモリ・オブジェクトが複数定義されている。

E_OACV(-27)

不定

あるドメインにアクセス許可されているメモリ・オブジェクト数が7を超える。

E_PAR(-17)

16

不定

タスク生成(task[])に関するエラー

ユーザ・スタックの終端アドレス+1が16バイト境界でない。



- type == -16(未定義の可変ベクタ割り込み)

表15−8  システム・ダウン・ルーチンのパラメータ(type == -16)

inf1

inf2

inf3

- cfg600pxで-U オプションを指定しない場合
不定


- cfg600px で-U オプションを指定した場合
ベクタ番号


CPUの割り込み処理によってスタックに退避されたPC

CPUの割り込み処理によってスタックに退避されたPSW



- type == -17(未定義の固定ベクタ/例外ベクタ割り込み)

表15−9  システム・ダウン・ルーチンのパラメータ(type == -17)

inf1

inf2

inf3

- cfg600pxで-U オプションを指定しない場合
不定


- cfg600px で-U オプションを指定した場合
ベクタ番号


CPUの割り込み処理によってスタックに退避されたPC

CPUの割り込み処理によってスタックに退避されたPSW



- type > 0(アプリケーションからのvsys_dwnivsys_dwnの呼び出し)
0,および負のtype値はRI600PX用に予約されています。アプリケーションからvsys_dwnivsys_dwnを呼び出す場合は,正のtype値を使用してください。


表15−10  システム・ダウン・ルーチンのパラメータ(type > 0)

inf1

inf2

inf3

vsys_dwn, ivsys_dwnに指定した値