μITRON(主にNORTi)を使用して気が付いたことなどをメモ。
dry_tskとrot_rdq
優先度の高いタスクが実行権を握り続けないようにするためにdry_tskを使用する、
というコードやコメントをよく見かけます。
その目的の場合rot_rdqを実行することで、指定したタスク優先度に実行することができるため、
ラウンドロビンのように実行順を制御することができます。
各タスクの優先度が適切に設定されていれば、不要にdry_tskをして処理を遅らせる必要がなくなります。
(他に動きたいタスクがいなければ、自タスクが動けるので)
rel_wai
slp_task,wai_flg,wai_sem,rcv_msg等により、他タスクから待ち状態になっているタスクを強制的に待ち解除できます。
キャンセル処理等に使用できますが、待ち状態になる各システムコールの戻り値がE_RLWAIで返ることを想定していないソースコードもあるので注意が必要です。(μITRON3.0以前の古いコードには無かったので)
ミューテクスとセマフォ
ミューテックスは、セマフォと同様に資源の排他制御に使われます。
違いとしては、
ミューテクス:ロックしたタスクしかロック解除できない。
ロックしたタスクが終了すると、自動的にロックが解除される。
優先度継承プロトコルや優先度上限プロトコルにより優先度逆転を防ぐことができる。
資源の数が1個固定。(セマフォの最大値1と同じ)
セマフォ:ロックしたタスク以外でもロック解除できる。
ロックしたタスクが終了しても、ロック解除されない。
優先度逆転が起こる可能性がある。
最大値、初期値を変更できる。(0や1以外も可)
などがあります。
使い方にもよりますが、排他制御としてはミューテックスを使用したほうが安全です。