`タスク管理`

`[EN] cre_tsk``（タスク生成）`

`・ＴＣＢ（属性、優先度、起動アドレス、サイズ、その他）の設定`

`・スタック領域を確保`

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

`・接続機能が利用可能`

`Ｃ言語関数`

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

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`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は予約、高１〜８低、それ以外はレベルＸ）`

`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とスタック領域を解放。`

`Ｃ言語`

`` ER ercd = del_tsk ( ID tskid )

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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状態`

`Ｃ言語`

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

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`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が初期化される。`

`Ｃ言語関数`

`void ext_tsk( );`

`引数`

`戻り値`

`戻らない。`

`エラーの内容`

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

`[S] exd_tsk``（自タスクの終了と削除）`

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

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

`Ｃ言語関数`

`void exd_tsk( );`

`引数`

`戻り値`

`戻らない。`

`エラーの内容`

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

`[SN] ter_tsk``（他タスク強制終了）`

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

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

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

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = ter_tsk( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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による実行権の横取り)されない`

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

`Ｃ言語関数`

`ER ercd = dis_dsp( );`

`引数`

`戻り値`

`ER　　　　 ercd　　　 エラーコード`

`エラーの内容`

`E_OK　　　　正常終了`

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

`[R] ena_dsp``（ディスパッチ許可）`

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

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

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

`Ｃ言語関数`

`ER ercd = ena_dsp( );`

`引数`

`戻り値`

`ER　　　　 ercd　　　 エラーコード`

`エラーの内容`

`E_OK　　　　正常終了`

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

`[SN] chg_pri``（タスク優先度変更）`

`・接続機能が利用可能`

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

`Ｃ言語関数`

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

`引数`

`ID　　　　 tskid　　　タスクＩＤ（TSK_SELF = 0(自タスク)）`

`PRI　　　　tskpri　　 タスク優先度（-4〜0は予約、高１〜８低、それ以外はレベルＸ）（TPRI_INI = 0(起動時優先度)レベルＸ）`

`戻り値`

`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``（タスクのレディキュー回転）`

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

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

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

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

`Ｃ言語関数`

`ER ercd = rot_rdq( PRI tskpri );`

`引数`

`PRI　　　　tskpri　　 タスク優先度 タスク優先度（-4〜0は予約、高１〜８低、それ以外はレベルＸ）（TPRI_RUN = 0(自タスク優先度)）`

`戻り値`

`ER　　　　 ercd　　　 エラーコード`

`エラーの内容`

`E_OK　　　　正常終了`

`E_PAR　　　 tskpriが不正`

`[SN] rel_wai``（他タスクの待ち状態解除）`

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

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

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = rel_wai( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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`

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = get_tid( ID *p_tskid );`

`引数`

`戻り値`

`ER　　　　 ercd　　　 エラーコード`

`ID　　　　 tskid　　　タスクＩＤ`

`エラーの内容`

`E_OK　　　　正常終了`

`[EN] ref_tsk``（タスク状態参照）`

`・接続機能が利用可能`

`Ｃ言語関数`

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

`引数`

`ID　　　　 tskid　　　タスクＩＤ（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）を増やす`

`Ｃ言語関数`

`ER ercd = sus_tsk( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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）が２以上ならsuscntを一減らす`

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

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = rsm_tsk( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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）に限らず再開`

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

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = frsm_tsk( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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待ち)になる`

`Ｃ言語関数`

`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`

`Ｃ言語関数`

`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)を増やす`

`・接続機能が利用可能`

`Ｃ言語関数`

`ER ercd = wup_tsk( ID tskid );`

`引数`

`ID　　　　 tskid　　　タスクＩＤ`

`戻り値`

`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にしてリターンする`

`・接続機能が利用可能`

`Ｃ言語関数`

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

`引数`

`ID　　　　 tskid　　　タスクＩＤ（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　　タスク独立部あるいはディスパッチ禁止状態のタスク他ノードのタスクを指定`