第 3 章 従来機能の変更 25
3.4 同期・通信機能
3.4.2 イベントフラグ
イベントフラグ機能には,アクセス許可ベクタを指定してイベントフラグを生 成する機能と,イベントフラグのアクセス許可ベクタを変更する機能を追加す る.また,参照できるイベントフラグ状態に追加がある.
イベントフラグ状態のパケット形式に,アクセス許可ベクタを追加する.
typedef struct t_rflg {
ID wtskid ; /* イベントフラグの待ち行列の先頭の
タスクの ID番号 */
FLGPTN flgptn ; /* イベントフラグの現在のビットパ
ターン */
ACVCT acvct ; /* イベントフラグのアクセス許可ベク
タ */
/* 実装独自に他のフィールドを追加してもよい */
} T_RFLG ;
イベントフラグ機能の新規サービスコールの機能コードは次の通りである.
TFN_CRA_FLG –0x113 cra_flgの機能コード TFN_ACRA_FLG –0x123 acra_flgの機能コード TFN_SAC_FLG –0x133 sac_flgの機能コード
CRA_FLG
イベントフラグの生成(静的 API,アクセス許可指定)cra_flg
イベントフラグの生成(アクセス許可指定)acra_flg
イベントフラグの生成(ID番号自動割付け,アクセス許可指定)【静的 API】
CRA_FLG ( ID flgid, { ATR flgatr, FLGPTN iflgptn }, ACVCT acvct ) ;
【 C言語 API】
ER ercd = cra_flg ( ID flgid, T_CFLG *pk_cflg, ACVCT *p_acvct ) ; ER_ID flgid = acra_flg ( T_CFLG *pk_cflg, ACVCT *p_acvct ) ;
【パラメータ】
ID flgid 生成対象のイベントフラグの ID番号
T_CFLG * pk_cflg イベントフラグ生成情報を入れたパケットへ
のポインタ(静的 APIではパケットの内容を直 接記述する)
ACVCT acvct イベントフラグのアクセス許可ベクタ
pk_cflgの内容( T_CFLG型)
ATR flgatr イベントフラグ属性
FLGPTN iflgptn イベントフラグのビットパターンの初期値
(実装独自に他の情報を追加してもよい)
【リターンパラメータ】
cra_flgの場合
ER ercd 正常終了( E_OK)またはエラーコード acra_flgの場合
ER_ID flgid 生成したイベントフラグの ID番号(正の値)ま
たはエラーコード
【エラーコード】
E_ID 不正 ID番号( flgidが不正あるいは使用できない)
E_NOID ID番号不足(割付け可能なイベントフラグ IDがない)
E_RSATR 予約属性( flgatrが不正あるいは使用できない)
E_PAR パラメータエラー( pk_cflg, iflgptn, p_acvct, acvct が不正)
E_OBJ オブジェクト状態エラー(対象イベントフラグが登録済
み)
【機能】
flgidで指定される ID番号を持つイベントフラグを,pk_cflgで指定されるイベ ントフラグ生成情報に基づいて生成する. CRE_FLG/ cre_flg/ acre_flgとの
違いは,生成するイベントフラグに, acvctで指定されるアクセス許可ベクタ を設定することのみである.
sac_flg
イベントフラグのアクセス許可ベクタの変更【 C言語 API】
ER ercd = sac_flg ( ID flgid, ACVCT *p_acvct ) ;
【パラメータ】
ID flgid 変更対象のイベントフラグの ID番号
ACVCT acvct イベントフラグのアクセス許可ベクタ
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード
【エラーコード】
E_ID 不正 ID番号( flgidが不正あるいは使用できない)
E_PAR パラメータエラー( p_acvct, acvctが不正)
E_NOEXS オブジェクト未生成(対象イベントフラグが未登録)
【機能】
flgidで指定されるイベントフラグに対するアクセス許可ベクタを, acvctで指 定されるアクセス許可ベクタに設定する.
【補足説明】
このサービスコールは,呼び出された時点ですでにイベントフラグの待ち行列 につながれているタスクには影響しない.そのため,イベントフラグの待ち行 列につながれているタスクが,新たに設定したアクセス許可ベクタではイベン トフラグを待つことを許可されていない場合でも,そのタスクはイベントフラ グ待ち状態のままとなり,待っているイベントフラグがセットされれば,正常 に待ち解除される.
ref_flg
イベントフラグの状態参照【 C言語 API】
ER ercd = ref_flg ( ID flgid, T_RFLG *pk_rflg ) ;
【パラメータ】
ID flgid 状態参照対象のイベントフラグの ID番号
T_RFLG * pk_rflg イベントフラグ状態を返すパケットへのポイ
ンタ
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード pk_rflgの内容( T_RFLG型)
ID wtskid イベントフラグの待ち行列の先頭のタスクの
ID番号
FLGPTN flgptn イベントフラグの現在のビットパターン
ACVCT acvct イベントフラグのアクセス許可ベクタ
(実装独自に他の情報を追加してもよい)
【エラーコード】
E_ID 不正 ID番号( flgidが不正あるいは使用できない)
E_PAR パラメータエラー( pk_rflgが不正)
E_NOEXS オブジェクト未生成(対象イベントフラグが未登録)
【機能】
flgidで指定されるイベントフラグに関する状態を参照し, pk_rflgで指定され るパケットに返す. µITRON4.0仕様との違いは, acvctに対象イベントフラグ のアクセス許可ベクタを返すことのみである.