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のタスクが存在しない。