タスク管理
[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 タスク独立部あるいはディスパッチ禁止状態のタスク他ノードのタスクを指定