(toppers-users 287) Re: i_lock_cpu() について教えてください

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2001年 10月 5日 (金) 11:52:44 JST


豊橋技術科学大学の若林です.

Horie, Seiichi さんは書きました:
 > ところで、もう一つ質問させていただきたいことがあります。この仕組みは
 > chg_ipmで割り込み許可レベルを変化させるから必要なのであって、chg_ipm
 > を実装しないならば lok_cpu()、i_loc_cpu()とも単純なdisint() でかまわないと
 > 思います。これは正しいでしょうか。

この仕組みはchg_ipmに関係なく必要です.この仕組みはCPU依存です.
t_lock_cpu/t_unlock_cpuとtask_intmaskはchg_ipmをサポートしなければ
もっと簡単にできますが,i_lock_cpu/i_unlock_cpuではこの機構は必須です.

この仕組みが必要になる条件は,
 ・多重割込みをサポートする
 ・割込み全禁止と割込みマスクが独立して動かない
の2点です.

NECのV850のようにマスクレベルの許可/禁止,全禁止を独立して覚えている
CPUであれば,この仕組みはいりません.i_lock_cpuに全禁止を使い,
unlockで全禁止を解除しても,元のマスクレベルに勝手に戻ってくれるからです.
 #config/v850/cpu_config.h:80, config/arm7tdmi/cpu_config.h:98

一方,m68kはどうやらマスクレベルを操作する以外で割り込みを禁止する
方法が無いようなので(すいません m68kに疎いので),全禁止として
マスクを最大にした後,unlockするためには元々の割込みマスクレベルへ
戻す必要があります.そのためこの仕組みは避けられません.
 #その点では,SH3もブロックビットを使えばこの仕組みは
 #避けられる気がするのですが,どうでしょう? > 本田君

以上 参考になれば幸いです。

+----------------------------------------------+
| Takayuki WAKABAYASHI (わかばやし たかゆき)   |
|  mailto: takayuki @ ertl.ics.tut.ac.jp         |
+----------------------------------------------+
| 豊橋技術科学大学 工学研究科 電子情報工学専攻 |
|   組込みリアルタイムシステム研究室           |
+----------------------------------------------+