(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 |
+----------------------------------------------+
| 豊橋技術科学大学 工学研究科 電子情報工学専攻 |
| 組込みリアルタイムシステム研究室 |
+----------------------------------------------+