第14章  オブジェクト・リセット機能


本章では,RI600PXが提供しているオブジェクト・リセット機能について解説しています。

14.1 概  要

オブジェクト・リセット機能は,データ・キューメールボックスメッセージ・バッファ固定長メモリ・プール,および可変長メモリ・プールを初期状態に戻す機能で,μITRON4.0 仕様外の機能です。

14.2 データ・キューのリセット

データ・キューのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。

- vrst_dtq
パラメータdtqidで指定されたデータ・キューをリセットします。
データ・キューに蓄えられていたデータは破棄されます。また,データ送信を待っていたタスクの待ち状態は解除され,そのタスクには戻り値としてEV_RSTが返されます。
以下に,本サービス・コールの記述例を示します。



 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600pxが出力するヘッダ・ファイルの定義*/
 #pragma task Task1                      /*備考2参照*/
 void Task1 ( VP_INT exinf );            /*備考2参照*/
 void Task1 ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      dtqid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_dtq ( dtqid );      /*データ・キューのリセット*/
 
         ............
         ............
 }


備考1 本サービス・コールでは,データ受信を待っていたタスクの待ち状態は解除されません。

備考2 システム・コンフィギュレーション・ファイルで生成したタスクについては,これらのステートメントはcfg600pxがkernel_id.hに出力するため,記述不要です。

14.3 メールボックスのリセット

メールボックスのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。

- vrst_mbx
パラメータmbxidで指定されたメールボックスをリセットします。
メールボックスに蓄えられたメッセージは,RI600PXの管理から外れます。
以下に,本サービス・コールの記述例を示します。



 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600pxが出力するヘッダ・ファイルの定義*/
 #pragma task Task1                      /*備考2参照*/
 void Task1 ( VP_INT exinf );            /*備考2参照*/
 void Task1 ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mbxid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mbx( mbxid );      /*メールボックスのリセット*/
 
         ............
         ............
 }


備考1 本サービス・コールでは,メッセージ受信を待っていたタスクの待ち状態は解除されません。

備考2 システム・コンフィギュレーション・ファイルで生成したタスクについては,これらのステートメントはcfg600pxがkernel_id.hに出力するため,記述不要です。

14.4 メッセージバッファのリセット

メッセージ・バッファのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。

- vrst_mbf
パラメータmbfidで指定されたメッセージ・バッファをリセットします。
メッセージ・バッファに蓄えられていたメッセージは破棄されます。また,メッセージ送信を待っていたタスクの待ち状態は解除され,そのタスクには戻り値としてEV_RSTが返されます。
以下に,本サービス・コールの記述例を示します。



 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600pxが出力するヘッダ・ファイルの定義*/
 #pragma task Task1                      /*備考2参照*/
 void Task1 ( VP_INT exinf );            /*備考2参照*/
 void Task1 ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mbfid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mbf( mbfid );      /*メッセージ・バッファのリセット*/
 
         ............
         ............
 }


備考1 本サービス・コールでは,メッセージ受信を待っていたタスクの待ち状態は解除されません。

備考2 システム・コンフィギュレーション・ファイルで生成したタスクについては,これらのステートメントはcfg600pxがkernel_id.hに出力するため,記述不要です。

14.5 固定長メモリ・プールのリセット

固定長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。

- vrst_mpf
パラメータmpfidで指定された固定長メモリ・プールをリセットします。
固定長メモリ・ブロックの獲得を待っていたタスクの待ち状態は解除され,戻り値としてEV_RSTが返されます。
また,すでに獲得されていた固定長メモリ・ブロックはすべて,固定長メモリ・プールに返却されます。このため,本サービス・コール以降はそれらの固定長メモリ・ブロックにアクセスしてはなりません。
以下に,本サービス・コールの記述例を示します。




 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600pxが出力するヘッダ・ファイルの定義*/
 #pragma task Task1                      /*備考参照*/
 void Task1 ( VP_INT exinf );            /*備考参照*/
 void Task1 ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mpfid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mpf( mpfid );      /*固定長メモリ・プールのリセット*/
 
         ............
         ............
 }


備考 システム・コンフィギュレーション・ファイルで生成したタスクについては,これらのステートメントはcfg600pxがkernel_id.hに出力するため,記述不要です。

14.6 可変長メモリ・プールのリセット

可変長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。

- vrst_mpl
パラメータmplidで指定された可変長メモリ・プールをリセットします。
可変長メモリ・ブロックの獲得を待っていたタスクの待ち状態は解除され,戻り値としてEV_RSTが返されます。
また,すでに獲得されていた可変長メモリ・ブロックはすべて,可変長メモリ・プールに返却されます。このため,本サービス・コール以降はそれらの可変長メモリ・ブロックにアクセスしてはなりません。
以下に,本サービス・コールの記述例を示します。




 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600pxが出力するヘッダ・ファイルの定義*/
 #pragma task Task1                      /*備考参照*/
 void Task1 ( VP_INT exinf );            /*備考参照*/
 void Task1 ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mplid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mpl( mplid );      /*可変長メモリ・プールのリセット*/
 
         ............
         ............
 }


備考 システム・コンフィギュレーション・ファイルで生成したタスクについては,これらのステートメントはcfg600pxがkernel_id.hに出力するため,記述不要です。