第14章 オブジェクト・リセット機能
本章では,RI600PXが提供しているオブジェクト・リセット機能について解説しています。
データ・キューのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
-
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に出力するため,記述不要です。
メールボックスのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
-
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に出力するため,記述不要です。
メッセージ・バッファのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
-
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に出力するため,記述不要です。
固定長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
-
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に出力するため,記述不要です。
可変長メモリ・プールのリセットは,以下に示したサービス・コールを処理プログラムから発行することにより実現されます。
-
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に出力するため,記述不要です。