割込み管理
[C] def_int(割込みハンドラ定義)
・既に存在する割込みハンドラの再定義も可能
・管理ブロックの確保
・静的な定義も可能
C言語関数
ER ercd = def_int( UINT dintno, T_DINT *pk_dint );
引数
UINT dintno 割込み定義番号
T_DINT* pk_dint 割込みハンドラ定義情報(NADR = -1(前回の割込みハンドラの終了))
pk_dintの中身
ATR intatr 割込みハンドラ属性(TA_ASM(アセンブラ) or TA_HLNG(高級言語))
FP inthdr 割込みハンドラアドレス
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_NOMEM 管理ブロック用が確保できない
E_RSATR intatrが不正
E_RAR dintno、pk_dint、inthdrが不正
[R] ref_int(割込みハンドラから復帰)
・割込みハンドラの途中にディスパッチ遅延によって遅延された処理をまとめて行う
・CPUで直接起動するのでレジスタの管理が必要(アセンブラに限る)
・エラーの確認を行うときはエラーログを残す必要がある
C言語関数
void ret_int( );
引数
戻り値
戻らない。
エラーの内容
E_CTX 割込みハンドラ以外から発行(インプリメント依存)
[E] ret_wup(割込みハンドラ復帰とタスク)
・指定タスクが起床待ちのとき待機解除して、自タスクを終了する
・指定タスクが起床待ちではないときTCBの起床要求キューイング数(wupcnt)を増やす
C言語関数
void ret_wup( ID tskid );
引数
ID tskid 起床タスクID
戻り値
戻らない。
エラーの内容
E_ID tskidが不正あ
E_NOEXS tskidのタスクが存在しない
E_OBJ 指定タスクがDORMANT状態
E_CTX 割込みハンドラ以外からコールされた(インプリメント依存)
E_QOVR キューイング数wupcntのオーバーフロー
EN_CTXID タスク独立部のタスクから他ノードのタスクを指定
[R] loc_cpu(割込みとディスパッチの禁止)
・割込みが許可されるまで割込みハンドラが遅延される
・ディスパッチが許可されるまでプリエンプト(CPUによる実行権の横取り)は行われない
C言語関数
ER ercd = loc_cpu( );
引数
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_CTX コンテキストエラー(タスク独立部から発行)
[R] unl_cpu(割込みとディスパッチの許可)
・割込みとディスパッチが許可された状態でもE_OK
C言語関数
ER ercd = unl_cpu( );
引数
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_CTX タスク独立部から発行
[C] dis_int(割込み禁止)
C言語関数
ER ercd = dis_int( UINT eintno );
引数
UINT eintno 割込み許可番号
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_PAR パラメータエラー(eintnoが不正あるいは利用できない)
[C] ena_int(割込み許可)
・特別なeintnoを指定すると、すべての割込みに許可を与えることができる(インプリメント依存)
C言語関数
ER ercd = ena_int( UINT eintno );
引数
UINT eintno 割込み許可番号
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_PAR eintnoが不正
[C] chg_iXX(割込みマスク(レベル、優先度)変更)
・XXには使用CPUの名前を入れる
C言語関数
ER ercd = chg_iXX( UINT iXXXX );
引数
UINT iXXXX 割込みマスク(レベル、優先度)
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_PAR iXXXXが不正
[C] ref_iXX(割込みマスク(レベル、優先度)参照)
・XXには使用CPUの名前を入れる
C言語関数
ER ercd = ref_iXX( UINT *p_iXXXX );
引数
戻り値
ER ercd エラーコード
UINT iXXXX 割込みマスク(レベル、優先度)
エラーの内容
E_OK 正常終了
E_PAR パラメータエラー(eintnoが不正あるいは利用できない)
メモリプール管理
[E] cre_mpl(可変長メモリプール生成)
・管理ブロックとメモリプール領域を確保する
C言語関数
ER ercd = cre_mpl( ID mplid, T_CMPL *pk_cmpl );
引数
ID mplid 可変長メモリプールID
T_CMPL* pk_cmpl 可変長メモリプール生成情報
pk_cmplの中身
VP exinf 拡張情報
ATR mplatr メモリプール属性(メモリ獲得待ちのキューイングはTA_TFIFO(FIFO) || TA_TPRI(優先度順、レベルX))
INT mplsz メモリプールの大きさ
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_NOMEM 管理ブロックやメモリプール領域が確保できない
E_RSATR mplatrが不正
E_RAR pk_cmplが不正、mplszが負または不正
E_ID mplidが不正
E_OBJ mplidの可変長メモリプールが既に存在
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
[E] del_mpl(可変長メモリプール削除)
・管理ブロックとメモリプール領域を解放する
・メモリプールでメモリ獲得待ちのタスクにはE_DLT
・メモリプールに複数のメモリ獲得待ちある場合、削除後の同優先度の順序はインプリメント依存
C言語関数
ER ercd = del_mpl( ID mplid );
引数
ID mplid 可変長メモリプールID
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
[E] get_blk(可変長メモリブロック獲得)
・獲得したメモリの内容は不定
・メモリを獲得出来なかったとき、メモリ獲得待ちになり行列に並ぶ
・メモリを獲得出来なかった場合、後方のタスクに獲得の機会を譲れる(インプリメント依存)
C言語関数
ER ercd = get_blk( VP *p_blk, ID mplid, INT blksz );
引数
ID mplid 可変長メモリプールID
INT blksz メモリブロックの大きさ
戻り値
ER ercd エラーコード
VP blk メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_PAR blkszが負または不正
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行
E_DLT 待機中にメモリプールが削除された
E_RLWAI 待機中に待機強制解除(rel_wai)を受け付け
[E] pget_blk(可変長メモリブロック獲得(ポーリング))
・獲得したメモリの内容は不定
・メモリを獲得出来なかったときE_TMOUT
・メモリを獲得出来なかった場合、後方のタスクに獲得の機会を譲れる(インプリメント依存)
・タスク独立部やディスパッチ禁止状態のタスクからも実行可能(インプリメント依存)
C言語関数
ER ercd = pget_blk( VP *p_blk, ID mplid, INT blksz );
引数
ID mplid 可変長メモリプールID
INT blksz メモリブロックの大きさ
戻り値
ER ercd エラーコード
VP blk メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_PAR blkszが負または不正
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行(インプリメント依存)
E_TMOUT ポーリング失敗
[E] tget_blk(可変長メモリブロック獲得(タイムアウト有))
・獲得したメモリの内容は不定
・メモリを獲得出来なかったとき、メモリ獲得待ちになり行列に並ぶ、tmout経過後E_TMOUT
・メモリを獲得出来なかった場合、後方のタスクに獲得の機会を譲れる(インプリメント依存)
・tmoutがTMO_POLならばpget_blk、TMO_FEVRならばget_blk
・tmout=TMO_POLではタスク独立部やディスパッチ禁止状態のタスクからも実行可能(インプリメント依存)
C言語関数
ER ercd = tget_blk( VP *p_blk, ID mplid, INT blksz, TMO tmout );
引数
ID mplid 可変長メモリプールID
INT blksz メモリブロックの大きさ
TMO tmout タイムアウト時間(TMO_POL = 0(0)、TMO_FEVR = -1(∞))
戻り値
ER ercd エラーコード
VP blk メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_PAR tmout≦(-2)、blkszが負または不正
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行(tmout=TMO_POLに限るインプリメント依存)
E_DLT 待機中にメモリプールが削除された
E_TMOUT タイムアウト
E_RLWAI 待機中に待機強制解除(rel_wai)を受け付け
[E] rel_blk(可変長メモリブロック返却)
・返却先は獲得先と同じでなければならない
・返却メモリが大きいと複数のタスクが待機解除になる、そのときの同優先度の順序はインプリメント依存
C言語関数
ER ercd = rel_blk( ID mplid, VP blk );
引数
ID mplid 可変長メモリプールID
VP blk メモリブロックのアドレス
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_PAR blkが不正、獲得先と異なるmplid
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
[E] ref_mpl(可変長メモリプール状態参照)
C言語関数
ER ercd = ref_mpl( T_RMPL *pk_rmpl, ID mplid );
引数
ID mplid 可変長メモリプールID(TMPL_OS = -4(OSの空きメモリ)レベルX、-3〜-2(スタック専用のメモリプール)インプリメント依存)
T_RMPL pk_rmpl メモリプール状態のアドレス
戻り値
ER ercd エラーコード
pk_rmplの中身
VP exinf 拡張情報
BOOL_ID wtsk 待機タスクの有無(FALSE = 0(無し)、0以外待機中の先頭タスクのID(レベルX))
INT frsz 空き領域の大きさ
INT maxsz 最大空き領域の大きさ
エラーの内容
E_OK 正常終了
E_PAR T_RMPLが不正
E_ID mplidが不正
E_NOEXS mplidの可変長メモリプールが存在していない
E_OACV mplid<-4のメモリプールは利用不可(インプリメント依存)
[E] cre_mpf(固定長メモリプール生成)
・管理ブロックとメモリプール領域を確保する
C言語関数
ER ercd = cre_mpf( ID mpfid, T_CMPF *pk_cmpf );
引数
ID mpfid 固定長メモリプールID
T_CMPF* pk_cmpf 固定長メモリプール生成情報
pk_cmpfの中身
VP exinf 拡張情報
ATR mpfatr メモリプール属性(メモリ獲得待ちのキューイングはTA_TFIFO(FIFO) || TA_TPRI(優先度順、レベルX))
INT mpfsz メモリプールの大きさ
INT blfsz 固定長メモリブロックの大きさ
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_NOMEM 管理ブロックやメモリプール用の領域が確保できない
E_RSATR mpfatrが不正
E_RAR pk_cmpfが不正、mpfsz、blfszが負または不正
E_ID mpfidが不正
E_OBJ mpfidの固定長メモリプールが既に存在
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
[E] del_mpf(固定長メモリプール削除)
・管理ブロックとメモリプール領域の解放
・メモリプールでメモリ獲得待ちのタスクにはE_DLT
・メモリプールに複数のメモリ獲得待ちある場合、削除後の同優先度の順序はインプリメント依存
C言語関数
ER ercd = del_mpf( ID mpfid );
引数
ID mpfid 固定長メモリプールID
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_ID mpfidが不正あるいは利用できない
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
[E] get_blf(固定長メモリブロック獲得)
・獲得したメモリの内容は不定
・メモリを獲得出来なかったとき、メモリ獲得待ちになり行列に並ぶ
・メモリを獲得出来なかったとき、後方のタスクに獲得の機会を譲れる(インプリメント依存)
C言語関数
ER ercd = get_blf( VP *p_blf, ID mpfid );
引数
ID mpfid 固定長メモリプールID
戻り値
ER ercd エラーコード
VP blf メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_ID mpfidが不正
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行
E_DLT 待機中にメモリプールが削除された
E_RLWAI 待機中に待機強制解除(rel_wai)を受け付け
[E] pget_blf(固定長メモリブロック獲得(ポーリング))
・獲得したメモリの内容は不定
・メモリを獲得出来なかったとき、メモリ獲得待ちになり行列に並ぶ
・メモリを獲得出来なかったとき、後方のタスクに獲得の機会を譲れる(インプリメント依存)
・タスク独立部やディスパッチ禁止状態のタスクからも実行可能(インプリメント依存)
C言語関数
ER ercd = pget_blf( VP *p_blf, ID mpfid );
引数
ID mpfid 固定長メモリプールID
戻り値
ER ercd エラーコード
VP blf メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_ID mpfidが不正
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行(インプリメント依存)
E_TMOUT ポーリング失敗
[E] tget_blf(固定長メモリブロック獲得(タイムアウト有))
・獲得したメモリの内容は不定
・メモリを獲得出来なかったとき、メモリ獲得待ちになり行列に並ぶ、tmout経過後E_TMOUT
・メモリを獲得出来なかったとき、後方のタスクに獲得の機会を譲れる(インプリメント依存)
・tmoutがTMO_POLならばpget_blf、TMO_FEVRならばget_blf
・tmout=TMO_POLではタスク独立部やディスパッチ禁止状態のタスクからも実行可能(インプリメント依存)
C言語関数
ER ercd = tget_blf( VP *p_blf, ID mpfid, TMO tmout );
引数
ID mpfid 固定長メモリプールID
TMO tmout タイムアウト時間(TMO_POL = 0(0)、TMO_FEVR = -1(∞))
戻り値
ER ercd エラーコード
VP blf メモリブロックのアドレス
エラーの内容
E_OK 正常終了
E_PAR tmout≦-2
E_ID mpfidが不正
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
E_CTX タスク独立部またはディスパッチ禁止状態で実行(tmout=TMO_POLに限る、インプリメント依存)
E_DLT 待機中にメモリプールが削除された
E_TMOUT タイムアウト
E_RLWAI 待機中に待機強制解除(rel_wai)を受け付け
[E] rel_blf(固定長メモリブロック返却)
・返却先は獲得先と同じでなければならない
C言語関数
ER ercd = rel_blf( ID mpfid, VP blf );
引数
ID mpfid 固定長メモリプールID
VP blf メモリブロックのアドレス
戻り値
ER ercd エラーコード
エラーの内容
E_OK 正常終了
E_PAR blfが不正、獲得先と同じmpfid
E_ID mpfidが不正
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4のメモリプールは利用不可(インプリメント依存)
[E] ref_mpf(固定長メモリプール状態参照)
C言語関数
ER ercd = ref_mpf( T_RMPF *pk_rmpf, ID mpfid );
引数
ID mpfid 固定長メモリプールID
T_RMPF* pk_rmpf メモリプール状態のアドレス
戻り値
ER ercd エラーコード
pk_rmpfの中身
VP exinf 拡張情報
BOOL_ID wtsk 待機タスクの有無(FALSE = 0(無し)、0以外(有り、先頭タスクのID(レベルX)))
INT frbcnt 空き領域のブロック数
エラーの内容
E_OK 正常終了
E_PAR pk_rmpfが不正
E_ID mpfidが不正
E_NOEXS mpfidの固定長メモリプールが存在していない
E_OACV mpfid<-4は利用不可(インプリメント依存)