Everything

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


本章では,RI600V4が提供しているオブジェクト・リセット機能について解説しています。
12.1 概  要
オブジェクト・リセット機能は,データ・キューメールボックスメッセージ・バッファ固定長メモリ・プール,および可変長メモリ・プールを初期状態に戻す機能で,μITRON4.0 仕様外の機能です。
12.2 データ・キューのリセット
データ・キューのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
- vrst_dtq
パラメータdtqidで指定されたデータ・キューをリセットします。
データ・キューに蓄えられていたデータは破棄されます。また,データ送信を待っていたタスクの待ち状態は解除され,そのタスクには戻り値としてEV_RSTが返されます。
以下に,本サービス・コールの記述例を示します。
 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600が出力するヘッダ・ファイルの定義*/
 
 void task ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      dtqid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_dtq ( dtqid );      /*データ・キューのリセット*/
 
         ............
         ............
 }

備考 本サービス・コールでは,データ受信を待っていたタスクの待ち状態は解除されません。
12.3 メールボックスのリセット
メールボックスのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
- vrst_mbx
パラメータmbxidで指定されたメールボックスをリセットします。
メールボックスに蓄えられたメッセージは,RI600V4の管理から外れます。
以下に,本サービス・コールの記述例を示します。
 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600が出力するヘッダ・ファイルの定義*/
 
 void task ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mbxid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mbx( mbxid );      /*メールボックスのリセット*/
 
         ............
         ............
 }

備考 本サービス・コールでは,メッセージ受信を待っていたタスクの待ち状態は解除されません。
12.4 メッセージバッファのリセット
メッセージ・バッファのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
- vrst_mbf
パラメータmbfidで指定されたメッセージ・バッファをリセットします。
メッセージ・バッファに蓄えられていたメッセージは破棄されます。また,メッセージ送信を待っていたタスクの待ち状態は解除され,そのタスクには戻り値としてEV_RSTが返されます。
以下に,本サービス・コールの記述例を示します。
 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600が出力するヘッダ・ファイルの定義*/
 
 void task ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mbfid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mbf( mbfid );      /*メッセージ・バッファのリセット*/
 
         ............
         ............
 }

備考 本サービス・コールでは,メッセージ受信を待っていたタスクの待ち状態は解除されません。
12.5 固定長メモリ・プールのリセット
固定長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
- vrst_mpf
パラメータmpfidで指定された固定長メモリ・プールをリセットします。
固定長メモリ・ブロックの獲得を待っていたタスクの待ち状態は解除され,戻り値としてEV_RSTが返されます。
また,すでに獲得されていた固定長メモリ・ブロックはすべて,固定長メモリ・プールに返却されます。このため,本サービス・コール以降はそれらの固定長メモリ・ブロックにアクセスしてはなりません。
以下に,本サービス・コールの記述例を示します。
 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600が出力するヘッダ・ファイルの定義*/
 
 void task ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mpfid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mpf( mpfid );      /*固定長メモリ・プールのリセット*/
 
         ............
         ............
 }

12.6 可変長メモリ・プールのリセット
可変長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
- vrst_mpl
パラメータmplidで指定された可変長メモリ・プールをリセットします。
可変長メモリ・ブロックの獲得を待っていたタスクの待ち状態は解除され,戻り値としてEV_RSTが返されます。
また,すでに獲得されていた可変長メモリ・ブロックはすべて,可変長メモリ・プールに返却されます。このため,本サービス・コール以降はそれらの可変長メモリ・ブロックにアクセスしてはなりません。
以下に,本サービス・コールの記述例を示します。
 #include        "kernel.h"              /*標準ヘッダ・ファイルの定義*/
 #include        "kernel_id.h"           /*cfg600が出力するヘッダ・ファイルの定義*/
 
 void task ( VP_INT exinf )
 {
         ER      ercd;                   /*変数の宣言*/
         ID      mplid = 1;              /*変数の宣言,初期化*/
 
         ............
         ............
 
         ercd = vrst_mpl( mplid );      /*可変長メモリ・プールのリセット*/
 
         ............
         ............
 }