第 3 章 従来機能の変更 25
3.5 拡張同期・通信機能
3.5.3 ランデブ
CRA_POR
ランデブポートの生成(静的 API,アクセス許可指定)cra_por
ランデブポートの生成(アクセス許可指定)acra_por
ランデブポートの生成(ID番号自動割付け,アクセス許可指定)【静的 API】
CRA_POR ( ID porid, { ATR poratr, UINT maxcmsz, UINT maxrmsz }, ACVCT acvct ) ;
【 C言語 API】
ER ercd = cra_por ( ID porid, T_CPOR *pk_cpor, ACVCT *p_acvct ) ;
ER_ID porid = acra_por ( T_CPOR *pk_cpor, ACVCT *p_acvct ) ;
【パラメータ】
ID porid 生成対象のランデブポートの ID番号
T_CPOR * pk_cpor ランデブポート生成情報を入れたパケットへ
のポインタ(静的 APIではパケットの内容を直 接記述する)
ACVCT acvct ランデブポートのアクセス許可ベクタ
pk_cporの内容( T_CPOR型)
ATR poratr ランデブポート属性
UINT maxcmsz 呼出しメッセージの最大サイズ(バイト数)
UINT maxrmsz 返答メッセージの最大サイズ(バイト数)
(実装独自に他の情報を追加してもよい)
【リターンパラメータ】
cra_porの場合
ER ercd 正常終了( E_OK)またはエラーコード acra_porの場合
ER_ID porid 生成したランデブポートの ID番号(正の値)ま
たはエラーコード
【エラーコード】
E_ID 不正 ID番号( poridが不正あるいは使用できない)
E_NOID ID番号不足(割付け可能なランデブポート IDがない)
E_RSATR 予約属性( poratrが不正あるいは使用できない)
E_PAR パラメータエラー( pk_cpor, maxcmsz, maxrmsz, p_acvct, acvctが不正)
E_OBJ オブジェクト状態エラー(対象ランデブポートが登録済
み)
poridで指定される ID番号を持つランデブポートを, pk_cporで指定されるラ ンデブポート生成情報に基づいて生成する. CRE_POR/ cre_por/ acre_por との違いは,生成するランデブポートに, acvctで指定されるアクセス許可ベ クタを設定することのみである.
sac_por
ランデブポートのアクセス許可ベクタの変更【 C言語 API】
ER ercd = sac_por ( ID porid, ACVCT *p_acvct ) ;
【パラメータ】
ID porid 変更対象のランデブポートの ID番号
ACVCT acvct ランデブポートのアクセス許可ベクタ
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード
【エラーコード】
E_ID 不正 ID番号( poridが不正あるいは使用できない)
E_PAR パラメータエラー( p_acvct, acvctが不正)
E_NOEXS オブジェクト未生成(対象ランデブポートが未登録)
【機能】
poridで指定されるランデブポートに対するアクセス許可ベクタを,acvctで指
定されるアクセス許可ベクタに設定する.
【補足説明】
このサービスコールは,呼び出された時点ですでにランデブポートの呼出し待 ち行列につながれているタスクには影響しない.そのため,ランデブポートの 呼出し待ち行列につながれているタスクが,新たに設定したアクセス許可ベク タではランデブを呼び出すことを許可されていない場合でも,そのタスクはラ ンデブ呼出し待ち状態のままとなり,ランデブが成立すれば,ランデブ終了待 ち状態となることができる.ランデブポートの受付待ち行列につながれている タスクについても同様である.
fwd_por
ランデブの回送【 C言語 API】
ER ercd = fwd_por ( ID porid, RDVPTN calptn, RDVNO rdvno, VP msg, UINT cmsgsz ) ;
【パラメータ】
ID porid 回送先のランデブポートの ID番号
RDVPTN calptn 呼出し側のランデブ条件を示すビットパター
ン
RDVNO rdvno 回送するランデブ番号
VP msg 呼出しメッセージの先頭番地
UINT cmsgsz 呼出しメッセージのサイズ(バイト数)
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード
【エラーコード】
E_ID 不正 ID番号( poridが不正あるいは使用できない)
E_PAR パラメータエラー( calptn, msg, cmsgszが不正)
E_ILUSE サービスコール不正使用(回送先のランデブポートの返
答メッセージの最大サイズが大きすぎる,ランデブを受 け付けたタスクの所属する保護ドメイン以外からの呼 出し)
E_OBJ オブジェクト状態エラー( rdvnoが不正)
E_NOEXS オブジェクト未生成(対象ランデブポートが未登録)
【機能】
rdvnoで指定されるランデブ番号を付与されたランデブを, poridで指定され
るランデブポートに対して, calptnで指定されるランデブ条件により回送す る. µITRON4.0仕様との違いは,指定されたランデブを受け付けたタスクの所 属する保護ドメイン以外(カーネルドメインも例外ではない)から呼び出され た場合に, E_ILUSEエラーを返すことのみである.
rpl_rdv
ランデブの終了【 C言語 API】
ER ercd = rpl_rdv ( RDVNO rdvno, VP msg, UINT rmsgsz ) ;
【パラメータ】
RDVNO rdvno 終了させるランデブ番号
VP msg 返答メッセージの先頭番地
UINT rmsgsz 返答メッセージのサイズ(バイト数)
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード
【エラーコード】
E_PAR パラメータエラー( msg, rmsgszが不正)
E_ILUSE サービスコール不正使用(ランデブを受け付けたタスク
の所属する保護ドメイン以外からの呼出し)
E_OBJ オブジェクト状態エラー( rdvnoが不正)
【機能】
r dvno で指 定されるラ ンデブ番号 を付与され たランデブ を終了させ る.
µITRON4.0仕様との違いは,指定されたランデブを受け付けたタスクの所属す
る保護ドメイン以外(カーネルドメインも例外ではない)から呼び出された場 合に, E_ILUSEエラーを返すことのみである.
ref_por
ランデブポートの状態参照【 C言語 API】
ER ercd = ref_por ( ID porid, T_RPOR *pk_rpor ) ;
【パラメータ】
ID porid 状態参照対象のランデブポートの ID番号
T_RPOR * pk_rpor ランデブポート状態を返すパケットへのポイ
ンタ
【リターンパラメータ】
ER ercd 正常終了( E_OK)またはエラーコード pk_rporの内容( T_RPOR型)
ID ctskid ランデブポートの呼出し待ち行列の先頭のタ
スクの ID番号
ID atskid ランデブポートの受付待ち行列の先頭のタス
クの ID番号
ACVCT acvct ランデブポートのアクセス許可ベクタ
(実装独自に他の情報を追加してもよい)
【エラーコード】
E_ID 不正 ID番号( poridが不正あるいは使用できない)
E_PAR パラメータエラー( pk_rporが不正)
E_NOEXS オブジェクト未生成(対象ランデブポートが未登録)
【機能】
poridで指定されるランデブポートに関する状態を参照し, pk_rporで指定さ
れるパケットに返す. µITRON4.0仕様との違いは, acvctに対象ランデブポー トのアクセス許可ベクタを返すことのみである.