(toppers-users 768) Re: 割込みハンドラ出口処理について
SHUKUGUCHI Masahiro
ms89019 @ mms.co.jp
2003年 3月 11日 (火) 14:51:00 JST
かりやさま
宿口ともうします。私が認識している範囲で回答します。
> 1.M68K, CPU 依存部、割込みハンドラ出口処理
> (cpu_support.s : ret_int)
> この処理で、(runtask == NULL) の場合(実行中のタスクがない)で、
> schedtsk に何らかのタスクが設定されてこの処理が実行された時、
> dispatcher に飛ぶ前 NULL をポインタとしたエリアにアクセスする事
> になりませんでしょうか? 特に、0番地当たりがROMエリアに割当て
> られている場合CPU例外が起きてしまうのではないでしょうか?
ご指摘の処理 cpu_suppoert.S の dispatch: は、カレントタスクが存在する
状態、即ち runtask!=NULL の状態で呼出されますので、ご指摘の問題は発生
しません。
次のカレントタスク(RUNNINGタスク)が存在しない場合は、STOP命令が実行
されますね。
> 2.最低優先順位の番号について
>
> 標準で16が最低優先度です。ready_queue 配列は確かに16個の配列を
> 用意してありますが、この ready_queue 配列のアクセス時、TCB に保存
> してある priority 値をダイレクトにインデックス値としている為、
> 最低優先順位のタスクを作ると ready_queue[16] というアクセスが発生
> してしまう。インデックスとして(priority - 1)を使用しないといけない
> のではないでしょうか?
内部処理で、ご指摘の処理に変換されています。即ち、最高優先度が0、
最低優先度が1 になっています。この処理は task.h のマクロで実施されて
います。
task.h の(多分)49行目あたり
/*
* タスク優先度の内部表現・外部表現変換マクロ
*/
#define INT_PRIORITY(x) ((UINT)((x) - TMIN_TPRI))
#define EXT_TSKPRI(x) ((PRI)(x) + TMIN_TPRI)
取急ぎ。
宿口雅弘