Everything

chg_pri

ichg_pri

概要
タスク優先度の変更
C言語形式
 ER      chg_pri ( ID tskid, PRI tskpri );
 ER      ichg_pri ( ID tskid, PRI tskpri );
パラメータ
I/O
パラメータ
説明
I
 ID      tskid;
タスクのID
TSK_SELF: 自タスク
数値: タスクのID
I
 PRI     tskpri;
タスクのベース優先度
TPRI_INI: タスクの初期優先度
数値: タスクのベース優先度

機能
tskidで指定されたタスクのベース優先度をtskpriで指定された値に変更します。
変更されたタスクのベース優先度は,タスクが終了,または本サービス・コールを呼び出すまで有効です。次回のタスク起動時,タスクのベース優先度はタスク生成時に指定した初期タスク優先度になります。
本サービス・コールは,対象タスクの現在優先度も,tskpriで示された値に変更します。ただし,対象タスクがミューテックスをロックしている場合は,現在優先度は変更しません。
対象タスクがミューテックスをロックしているかロックを待っている場合で,tskpriがそれらのミューテックスのいずれかの上限優先度よりも高い場合には,戻り値としてE_ILUSEを返します。
現在優先度が変更された場合,以下の状態変化が生じます。
1 ) 対象タスクがRUNNING状態またはREADY状態の場合
本サービス・コールは,対象タスクをtskpriで指定された優先度に応じたレディ・キューの最後尾につなぎかえます。
2 ) 対象タスクがTA_TPRI属性またはTA_CEILING属性のオブジェクトの待ちキューにキューイングされている場合
本サービス・コールは,tskpriで指定された優先度にしたがって対象タスクを待ちキューにつなぎかえます。待ちキューにtskpriで指定された現在優先度のタスクが複数ある場合は,対象タスクをそれらの中の最後尾につなぎかえます。
例 セマフォの待ちキューに3つのタスク(タスクA:優先度10,タスクB:優先度11,タスクC:優先度12)が優先度順でキューイングされているとき,タスクBの優先度を11から9に変更した場合,待ちキューの順序は,以下のように変更されます。
 
備考 現在優先度とベース優先度については,「8.2.2 現在優先度とベース優先度」を参照してください。
戻り値
マクロ
数値
意味
E_OK
0
正常終了
E_PAR
-17
パラメータ・エラー
- tskpri < 0
- tskpri > TMAX_TPRI
E_ID
-18
不正ID番号
- tskid < 0
- tskid > VTMAX_TSK
- ichg_priを発行した際,tskidTSK_SELFを指定した。
E_CTX
-25
コンテキスト・エラー
- CPUロック状態から本サービス・コールを発行した。
- タスクからichg_priを発行した。
- 非タスクからchg_priを発行した。
- 「PSW.IPL > カーネル割り込みマスクレベル」の状態から本サービス・コールを発行した。
E_MACV
-26
メモリ・アクセス違反(chg_priのみ)
- スタック・ポインタが呼出しタスクのユーザ・スタック領域の範囲外を指している。
E_ILUSE
-28
サービス・コール不正使用
- tskpri < 対象タスクがロックしているミューテックスの上限優先度
- tskpri < 対象タスクがロックを待っているミューテックスの上限優先度
E_OBJ
-41
オブジェクト状態エラー
- 対象タスクがDORMANT状態である。
E_NOEXS
-42
オブジェクト未生成
- tskidのタスクが存在しない。