(toppers-users 296) Re: Q:Win シミュレーションの割込機能

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2001年 10月 17日 (水) 20:23:53 JST


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

青木 一磨 さんは書きました:
 > Visual Basicプログラムより、
 > デバイスコントロール「TOPPERS/JSP on Windows Device Component」
 > で提供されるメソッド RaiseInterrupt を実行したところ、
 > Toppers KernelからロードされるRPCRT4.DLLで、Access Violation
 > が発生した。

ご指摘の点、こちらでも確認しました。
 # Windows 2000 Professional SP1, SP2

次のようなことが内部で起っています.
 1. デバイス側から割込み要求が発行される
 2. デバイスマネージャの割込み要求ルーチンが起動される
 3. デバイスマネージャからカーネルへ割込み要求が発行される
     #ret = p_IKernelEvents->OnInterruptRequest(inhno)の部分
  <<ここからおかしい>>
 4. カーネルのデバイス処理スレッドに読み出し要求(メッセージ)が発行される
 5. カーネルは要求されたメモリの番地を読み出しに行く
  <<多分ここでAccessViolationが起っている>>
  <<私の環境では "偶然" 読める領域だった >>
 6. カーネルのデバイス処理スレッドはメッセージ待ちに入る
 7. RPCのタイムアウト時間を迎え、デバイスマネージャがリタイアする
 8. デバイスがリタイアする

本来であれば3.の次にIKernelEvents::OnInterruptRequestという
関数が呼ばれるはずなのですが、なぜかWM_USERメッセージが
送られてきています。ためしにDEV_READをWM_APP+10にずらして
みたのですが、やはりWM_USERが送られてきています。
以前は確かに動いていたのですが...
 #最近セキュリティアップデートを当てた以外に思い当たる節がない

青木さん ありがとうございます。
原因がわかったところで、早速デバッグ作業に入ります。

以上、まずはご報告まで。

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