第4章 タスク付属同期機能
- slp_tsk
自タスクをRUNNING状態からWAITING状態(起床待ち状態)へと遷移させます。
ただし,本サービス・コールを発行した際,自タスクの起床要求がキューイングされていた(起床要求カウンタが0x0以外)場合には,状態操作処理は行わず,起床要求カウンタから0x1を減算します。
なお,起床待ち状態の解除は,以下の場合に行われ,起床待ち状態からREADY状態へと遷移します。
自タスクをRUNNING状態からWAITING状態(起床待ち状態)へと遷移させます。
ただし,本サービス・コールを発行した際,自タスクの起床要求がキューイングされていた(起床要求カウンタが0x0以外)場合には,状態操作処理は行わず,起床要求カウンタから0x1を減算します。
なお,起床待ち状態の解除は,以下の場合に行われ,起床待ち状態からREADY状態へと遷移します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ER ercd; /*変数の宣言*/ ............ ............ ercd = slp_tsk ( ); /*起床待ち状態への移行(永久待ち)*/ if ( ercd == E_OK ) { ............ /*正常終了処理*/ ............ } else if ( ercd == E_RLWAI ) { ............ /*強制終了処理*/ ............ |
} ............ ............ } |
- tslp_tsk
自タスクをRUNNING状態からタイムアウト付きのWAITING状態(起床待ち状態)へと遷移させます。
ただし,本サービス・コールを発行した際,自タスクの起床要求がキューイングされていた(起床要求カウンタが0x0以外)場合には,状態操作処理は行わず,起床要求カウンタから0x1を減算します。
なお,起床待ち状態の解除は,以下の場合に行われ,起床待ち状態からREADY状態へと遷移します。
自タスクをRUNNING状態からタイムアウト付きのWAITING状態(起床待ち状態)へと遷移させます。
ただし,本サービス・コールを発行した際,自タスクの起床要求がキューイングされていた(起床要求カウンタが0x0以外)場合には,状態操作処理は行わず,起床要求カウンタから0x1を減算します。
なお,起床待ち状態の解除は,以下の場合に行われ,起床待ち状態からREADY状態へと遷移します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ER ercd; /*変数の宣言*/ TMO tmout = 3600; /*変数の宣言,初期化*/ ............ ............ ercd = tslp_tsk ( tmout ); /*起床待ち状態への移行(タイムアウト付き)*/ if ( ercd == E_OK ) { ............ /*正常終了処理*/ ............ } else if ( ercd == E_RLWAI ) { ............ /*強制終了処理*/ ............ } else if ( ercd == E_TMOUT ) { ............ /*タイムアウト処理*/ ............ } ............ ............ } |
- wup_tsk,iwup_tsk
パラメータtskidで指定されたタスクをWAITING状態(起床待ち状態)からREADY状態へ,またはWAITING-SUSPENDED状態からSUSPENDED状態へと遷移させます。
ただし,本サービス・コールを発行した際,対象タスクが起床待ち状態以外の場合には,状態操作処理は行わず,起床要求カウンタに0x1を加算します。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクをWAITING状態(起床待ち状態)からREADY状態へ,またはWAITING-SUSPENDED状態からSUSPENDED状態へと遷移させます。
ただし,本サービス・コールを発行した際,対象タスクが起床待ち状態以外の場合には,状態操作処理は行わず,起床要求カウンタに0x1を加算します。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ wup_tsk ( tskid ); /*タスクの起床*/ ............ ............ } |
備考 RI850V4が管理する起床要求カウンタは,7ビット幅で構成されています。このため,本サービス・コールでは,起床要求数が127回を越えるような場合には,起床要求のキューイング(起床要求カウンタの加算処理)は行わず,戻り値としてE_QOVRを返します。
- can_wup,ican_wup
パラメータtskidで指定されたタスクにキューイングされている起床要求をすべて解除(起床要求カウンタに0x0を設定)します。
なお,本サービス・コールは戻り値として解除した起床要求数を返します。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクにキューイングされている起床要求をすべて解除(起床要求カウンタに0x0を設定)します。
なお,本サービス・コールは戻り値として解除した起床要求数を返します。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ER_UINT ercd; /*変数の宣言*/ ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ ercd = can_wup ( tskid ); /*起床要求の解除*/ if ( ercd >= 0x0 ) { ............ /*正常終了処理*/ ............ } ............ ............ } |
- rel_wai,irel_wai
パラメータtskidで指定されたタスクのWAITING状態を強制的に解除します。これにより,対象タスクは待ちキューから外れ,WAITING状態からREADY状態へ,またはWAITING-SUSPENDED状態からSUSPENDED状態へと遷移します。
なお,本サービス・コールの発行によりWAITING状態を解除されたタスクには,WAITING状態へと遷移するきっかけとなったサービス・コール(slp_tsk,wai_semなど)の戻り値としてE_RLWAIを返します。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクのWAITING状態を強制的に解除します。これにより,対象タスクは待ちキューから外れ,WAITING状態からREADY状態へ,またはWAITING-SUSPENDED状態からSUSPENDED状態へと遷移します。
なお,本サービス・コールの発行によりWAITING状態を解除されたタスクには,WAITING状態へと遷移するきっかけとなったサービス・コール(slp_tsk,wai_semなど)の戻り値としてE_RLWAIを返します。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ rel_wai ( tskid ); /*WAITING状態の強制解除*/ ............ ............ } |
備考1 本サービス・コールでは,解除要求のキューイングが行われません。このため,対象タスクがWAITING状態,またはWAITING-SUSPENDED状態以外の場合には,戻り値としてE_OBJを返します。
- sus_tsk,isus_tsk
パラメータtskidで指定されたタスクをRUNNING状態からSUSPENDED状態へ,READY状態からSUSPENDED状態へ,またはWAITING状態からWAITING-SUSPENDED状態へと遷移させます。
ただし,本サービス・コールを発行した際,対象タスクがSUSPENDED状態,またはWAITING-SUSPENDED状態へと遷移していた場合には,状態操作処理は行わず,サスペンド要求カウンタに0x1を加算します。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクをRUNNING状態からSUSPENDED状態へ,READY状態からSUSPENDED状態へ,またはWAITING状態からWAITING-SUSPENDED状態へと遷移させます。
ただし,本サービス・コールを発行した際,対象タスクがSUSPENDED状態,またはWAITING-SUSPENDED状態へと遷移していた場合には,状態操作処理は行わず,サスペンド要求カウンタに0x1を加算します。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ sus_tsk ( tskid ); /*SUSPENDED状態への移行*/ ............ ............ } |
備考 RI850V4が管理するサスペンド要求カウンタは,7ビット幅で構成されています。このため,本サービス・コールでは,サスペンド要求数が127回を越えるような場合には,サスペンド要求のキューイング(サスペンド要求カウンタの加算処理)は行わず,戻り値としてE_QOVRを返します。
- rsm_tsk,irsm_tsk
パラメータtskidで指定されたタスクをSUSPENDED状態からREADY状態へ,またはWAITING-SUSPENDED状態からWAITING状態へと遷移させます。
ただし,本サービス・コールを発行した際,サスペンド要求がキューイングされていた場合には,状態操作処理は行わず,サスペンド要求カウンタの減算処理のみを行います。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクをSUSPENDED状態からREADY状態へ,またはWAITING-SUSPENDED状態からWAITING状態へと遷移させます。
ただし,本サービス・コールを発行した際,サスペンド要求がキューイングされていた場合には,状態操作処理は行わず,サスペンド要求カウンタの減算処理のみを行います。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ rsm_tsk ( tskid ); /*SUSPENDED状態の解除*/ ............ ............ } |
備考 本サービス・コールでは,解除要求のキューイングが行われません。このため,対象タスクがSUSPENDED状態,またはWAITING-SUSPENDED状態以外の場合には,戻り値としてE_OBJを返します。
- frsm_tsk,ifrsm_tsk
パラメータtskidで指定されたタスクに発行されているサスペンド要求をすべて解除(サスペンド要求カウンタに0x0を設定)します。これにより,対象タスクはSUSPENDED状態からREADY状態へ,またはWAITING-SUSPENDED状態からWAITING状態へと遷移します。
以下に,本サービス・コールの記述例を示します。
パラメータtskidで指定されたタスクに発行されているサスペンド要求をすべて解除(サスペンド要求カウンタに0x0を設定)します。これにより,対象タスクはSUSPENDED状態からREADY状態へ,またはWAITING-SUSPENDED状態からWAITING状態へと遷移します。
以下に,本サービス・コールの記述例を示します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ID tskid = ID_TSK1; /*変数の宣言,初期化*/ ............ ............ frsm_tsk ( tskid ); /*SUSPENDED状態の強制解除*/ ............ ............ } |
備考 本サービス・コールでは,解除要求のキューイングが行われません。このため,対象タスクがSUSPENDED状態,またはWAITING-SUSPENDED状態以外の場合には,戻り値としてE_OBJを返します。
- dly_tsk
自タスクをパラメータdlytimで指定された遅延時間が経過するまでの間,RUNNING状態からWAITING状態(時間経過待ち状態)へと遷移させます。
なお,時間経過待ち状態の解除は,以下の場合に行われ,時間経過待ち状態からREADY状態へと遷移します。
自タスクをパラメータdlytimで指定された遅延時間が経過するまでの間,RUNNING状態からWAITING状態(時間経過待ち状態)へと遷移させます。
なお,時間経過待ち状態の解除は,以下の場合に行われ,時間経過待ち状態からREADY状態へと遷移します。
#include <kernel.h> /*標準ヘッダ・ファイルの定義*/ #include <kernel_id.h> /*システム情報ヘッダ・ファイルの定義*/ void task ( VP_INT exinf ) { ER ercd; /*変数の宣言*/ RELTIM dlytim = 3600; /*変数の宣言,初期化*/ ............ ............ ercd = dly_tsk ( dlytim ); /*時間経過待ち状態への移行*/ if ( ercd == E_OK ) { ............ /*正常終了処理*/ ............ } else if ( ercd == E_RLWAI ) { ............ /*強制終了処理*/ ............ } ............ ............ } |