[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CASSIOPEIA report
鈴木(康)です。
<200005170416.NAA03736@ninja.hpc.bs1.fc.nec.co.jp>の記事において
suz@hpc.bs1.fc.nec.co.jpさんは書きました。
| callout_xx について私が誤解していなければ(... って自信ないんですが)
| 本質的な違いはつぎの点になると思います。
|
| o 最低 1 回の hardclock() イベントが発生しないと実行されない。
| -- 時間的に 間が空く
| -- 割り込みをマスクしていると実行されない
|
| ハードウェアと密接に関係したもの以外では、
| この点が気になるケースは、ほとんどないと思います。
|
| しかし、全く同じことをするわけではなく、
| 今回はそれが引っかかるケースだと思います。
どうもこれは、間違いですね。
したい実験は、
o 割り込み処理の中で スタンバイもしくはサスペンド命令を
実行して意図的にフリーズさせる。
o 何らかの割り込みが入ればフリーズは 解除されるので、
割り込み処理はどうでもよい。
というものなので、(後のメールの問題がなければ)callout で十分ですね。
| ちなみに software interrupt は、仕組み的に INTR0 と INTR1 の両方
| で動くようです。
|
| callout は、(ほとんど?)INTR1 で動くことになるので、ここで CPU を止めると
| フリーズしそうです。
|
| 作ってみた software interrupt にしても、INTR0 動くとは限らない上に
| INTR1 の割り込み は rtc に限られるので、POWER ボタンの
| 割り込みが受けつけられないことになりそうです。
|
| このやりかたの延長でテストしたければ、INTR2 を setup してから 止めることを
| しないといけないんでしょうね。
|
| なんだか頭痛くなってきました。
こちらについてですが、実験とは関係ないレベルで問題あるんじゃないかと
いう気がしてきました。
software interrupt が、割り込み実行レベルを無視して実行されてしまうので
はないでしょうか?
たとえば、こんなことが起きるように思います。
o INTR0 での割り込み処理(たとえば KIU の処理)が実行されているときに、
INTR1 の割り込みが起きて hardclock() が実行される。
( このこと自体は hardclock() の方が 優先度が高く問題ない。)
o hardclock() の後 続いて softclock() も実行されてしまう。
( この場合、INTR0 で low level の spl制御をしていても
無視されて 最も低いレベルのはずの割り込み処理が動いてしまう。)
このようなことが起きそうなら、softclock() 等の処理をしない というロジック
が cpu_intr() の処理に入っていないといけないと思うのですが、
どうも入っていなさそうです。
具体的にどうすればいいか提示できなくて心苦しいのですが、
INTR2 で割り込みが入ってきても、software interrupt 実行中は、
INTR1 , INTER2 の割り込みマスクを外すことができるといいとおもいます。
( 単にマスクを解除するだけではダメでちゃんと設計しないと
いけないのですが... )
--
鈴木 康司 @NECソリューションズ
suz@hpc.bs1.fc.nec.co.jp
TEL 042-333-6465
--
鈴木 康司 (1ソフ四開 ALi)
suz@hpc.bs1.fc.nec.co.jp
8-23-26604 ←変更になりました。