タスク管理

 

[EN] cre_tsk(タスク生成)

・TCB(属性、優先度、起動アドレス、サイズ、その他)の設定

・スタック領域を確保

・生成後はDORMANT状態になる。

・接続機能が利用可能

C言語関数

 ER ercd = cre_tsk( ID tskid, T_CTSK *pk_ctsk );

引数

 ID     tskid   タスクID

 T_CTSK*  pk_ctsk  タスク生成情報

   pk_ctskの中身

   VP     exxinf   拡張情報

   ATR    tskatr   タスク属性(TA_ASM(アセンブラ) or TA_HLNG(高級言語) + TA_COP0(一番目のコプロセッサ) + 〜TA_COP7(七番目のコプロセッサ)

   FP     task    タスク起動アドレス

   PRI    itskpri  タスク起動優先度(-4〜0は予約、高1〜8低、それ以外はレベルX)

   INT    stksz   スタックサイズ(バイト数)

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_NOMEM   ユーザスタック(stksz)のメモリが確保できない

 E_RSATR   tskatrが不正

 E_RAR    pk_ctsk, task, itskpri, stkszが不正

 E_ID    tskidが-4〜0あるいは範囲外

 E_OBJ    同じIDのタスクが既に存在する

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_PAR   対象ノードでexinf、tskatr、task、itskpri、stkszがサポートされていない

 EN_CTXID  タスク独立部やディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

[EN] del_tsk(タスク削除)

タスクをDORMANT状態からNON-EXISTENT状態

TCBとスタック領域を解放。

C言語

 ER ercd = del_tsk ( ID tskid )

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    タスクがDORMANT状態ではない

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部やディスパッチ禁止状態のタスクから他ノードのタスクを指定できない

 

[SN] sta_tsk(タスク起動)

・タスクをDORMANT状態からREADY状態

C言語

 ER ercd = sta_tsk(ID tskid, INT stacd);

引数

 ID     tskid   タスクID

 INT    stacd   タスク起動コード

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクがDORMANT状態ではない

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_PAR   対象ノードでstacdがサポートされていない

 EN_CTXID  タスク独立部やディスパッチ禁止状態のタスクから他ノードのタスクを指定できない

 

[S] ext_tsk(自タスク終了)

・自タスクをRUN状態からDORMANT状態にする。

・自タスクのTCBとスタック領域は解放しない。

・自タスク優先度とTCBが初期化される。

C言語関数

 void ext_tsk( );

引数

戻り値

 戻らない。

エラーの内容

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 

[S] exd_tsk(自タスクの終了と削除)

・自タスクをRUN状態からNON-EXISTENT状態にする。

・自タスクのTCBとスタック領域は解放しない。

C言語関数

 void exd_tsk( );

引数

戻り値

 戻らない。

エラーの内容

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 

[SN] ter_tsk(他タスク強制終了)

・他タスクをREADY、WAIT、WAIT-SUSPEND、SUSPEND状態からDORMANT状態にする。

・他タスクの資源は解放しない。

・他タスク優先度とTCBが初期化される。

・接続機能が利用可能

C言語関数

 ER ercd = ter_tsk( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクがDORMANT状態または自タスク

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノード上のタスクを指定

  

[R] dis_dsp(ディスパッチ禁止)

・外部割り込み以外からプリエント(CPUによる実行権の横取り)されない

・ディスパッチ許可されるまで状態の移行とプリエントは遅延される

C言語関数

 ER ercd = dis_dsp( );

引数

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_CTX    タスク独立部から発行、loc_cpu実行後の状態で発行

 

[R] ena_dsp(ディスパッチ許可)

・自タスクの状態移行禁止解除

・ディスパッチ禁止中に遅延された状態の移行とプリエントを実行する

・ディスパッチ禁止状態ではなくても正常終了する

C言語関数

 ER ercd = ena_dsp( );

引数

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_CTX    タスク独立部から発行、loc_cpu実行後の状態で発行

 

[SN] chg_pri(タスク優先度変更)

・接続機能が利用可能

・変更後は同優先度の最後に並ぶ

C言語関数

 ER ercd = chg_pri( ID tskid, PRI tskpri );

引数

 ID     tskid   タスクID(TSK_SELF = 0(自タスク))

 PRI    tskpri   タスク優先度(-4〜0は予約、高1〜8低、それ以外はレベルX)(TPRI_INI = 0(起動時優先度)レベルX)

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_PAR    tskpriが不正

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクがDORMANT状態

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_PAR   対象ノードでtskpriがサポートされていない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

  

[S] rot_rdq(タスクのレディキュー回転)

・指定優先度の先頭のタスクを最後尾にを移動する

・指定した優先度にタスクがなくてもエラーにはならない

・タスク独立部からも利用可能

・ディスパッチ禁止状態のタスクを含む動作はレベルX

C言語関数

 ER ercd = rot_rdq( PRI tskpri );

引数

 PRI    tskpri   タスク優先度 タスク優先度(-4〜0は予約、高1〜8低、それ以外はレベルX)(TPRI_RUN = 0(自タスク優先度))

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_PAR    tskpriが不正

 

[SN] rel_wai(他タスクの待ち状態解除)

・WAIT状態からREADY状態に移行

・WAIT-SUSPEND状態からSUSPEND状態に移行

・接続機能が利用可能

C言語関数

 ER ercd = rel_wai( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクがDORMANT状態か自タスク

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

  

[S] get_tid(自タスクのタスクID参照)

・タスク独立部からコールされたときtskid = FALSE = 0

・接続機能が利用可能

C言語関数

 ER ercd = get_tid( ID *p_tskid );

引数

戻り値

 ER     ercd    エラーコード

 ID     tskid   タスクID

エラーの内容

 E_OK    正常終了

 

[EN] ref_tsk(タスク状態参照)

・接続機能が利用可能

C言語関数

 ER ercd = ref_tsk( INT *p_wupcnt, ID tskid );

引数

 ID     tskid   タスクID(TSK_SELF = 0(自タスク))

 T_RTSK*  pk_rtsk  タスク状態のアドレス

戻り値

 ER     ercd    エラーコード

 pk_rtskの中身

  VP     exinf   拡張情報

  PRI    tskpri   現在の優先度

  UINT    tskstat  タスク状態(RUN(1)、REDY(2)、WAIT(4)、SUSPEND(8)、WAIT-SUSPEND(c)、DORMANT(10))

 その他(インプリメント依存)

  UINT    tskwait  待ち要因 

  ID     wid    待ちオブジェクトID

  INT    wupcnt   起床要求カウント

  INT    suscnt   SUSPEND要求カウント

  ATR    tskatr   タスク属性

  FP     task    タスク起動アドレス

  PRI    itskpri  タスク起動時優先度

  INT    stksz   スタックサイズ(バイト数)

エラーの内容

 E_OK    正常終了

 E_PAR    pk_rtskが不正

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_RPAR   exinf、tskpri、tskstatの値が範囲外

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

 

タスク付属同期

 

[SN] sus_tsk(他タスクを強制待ち状態へ移行)

・READY(WAIT)からSUSPEND(WAIT-SUSPEND)へ

・接続機能が利用可能

・既にSUSPEND状態のときネストの回数(suscnt)を増やす

C言語関数

 ER ercd = sus_tsk( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクが自タスクまたはDORMANT状態

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

[SN] rsm_tsk(強制待ち状態のタスクを再開)

・SUSPEND(WAIT-SUSPEND)状態をREADY(WAIT)状態へ

・ネストの回数(suscnt)が2以上ならsuscntを一減らす

・再開後の同優先度の順番はインプリメント依存

・接続機能が利用可能

C言語関数

 ER ercd = rsm_tsk( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクが自タスクまたはSUSPEND状態ではない

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

[EN] frsm_tsk(強制待ち状態のタスクを強制再開)

・SUSPEND(WAIT-SUSPEND)状態をREADY(WAIT)状態へ

・ネストの回数(suscnt)に限らず再開

・再開後の同優先度の順番はインプリメント依存

・接続機能が利用可能

C言語関数

 ER ercd = frsm_tsk( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクが自タスクまたはSUSPEND状態ではない

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

[R] slp_tsk(自タスクを起床待ち状態へ移行)

・既にTCBの起床要求キューイング数が1以上のとき、数を減らす

・TCBの起床要求キューイング数が0のときRUN状態から起床待ち状態(wup_tsk待ち)になる

C言語関数

 ER ercd = slp_tsk( );

引数

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 E_RLWAI   待機中に待機強制解除(rel_wai)を受け付け

 

[E] tslp_tsk(自タスクを起床待ち状態へ移行(タイムアウト有))

・既にTCBの起床要求キューイング数が1以上のとき、数を減らす

・TCBの起床要求キューイング数が0のときRUN状態から起床待ち状態(wup_tsk待ち)になる

・tmoutまでにwup_tskが実行されなければE_TMOUT

C言語関数

 ER ercd = tslp_tsk( TMO tmout );

引数

 TMO    tmout   タイムアウト時間(TMO_POL = 0(0)、TMO_FEVR = -1(∞))

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_PAR    tmout≦-2

 E_CTX    タスク独立部またはディスパッチ禁止状態で実行

 E_TMOUT   タイムアウト

 E_RLWAI   待機中に待機強制解除(rel_wai)を受け付け

 

[RN] wup_tsk(他タスクの起床)

・他タスクが起床待ちのとき待機解除

・他タスクが起床待ちじゃないときTCBの起床要求キューイング数(wupcnt)を増やす

・接続機能が利用可能

C言語関数

 ER ercd = wup_tsk( ID tskid );

引数

 ID     tskid   タスクID

戻り値

 ER     ercd    エラーコード

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクが自タスクまたはDORMANT状態

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 E_QOVR   起床要求キューイング数(wupcnt)のオーバーフロー

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスクから他ノードのタスクを指定

 

[SN] can_wup(タスクの起床要求を無効化)

・起床要求キューイング数を0にしてリターンする

・接続機能が利用可能

C言語関数

 ER ercd = can_wup( INT *p_wupcnt, ID tskid );

引数

 ID     tskid   タスクID(TSK_SELF = 0(自タスク))

戻り値

 ER     ercd    エラーコード

 INT    wupcnt   起床要求キューイング数

エラーの内容

 E_OK    正常終了

 E_ID    tskidが不正

 E_NOEXS   tskidのタスクが存在しない

 E_OBJ    対象タスクがDORMANT状態

 E_OACV   tskid<-4のタスクは利用不可(インプリメント依存)

 E_QOVR   起床要求キューイング数wupcntのオーバーフロー

 EN_OBJNO  対象ノードのtskidのタスクが不正または存在しない

 EN_CTXID  タスク独立部あるいはディスパッチ禁止状態のタスク他ノードのタスクを指定