割込み管理

 

[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は利用不可(インプリメント依存)