第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)