(toppers-users 295) Q:Win シミュレーションの割込機能
青木 一磨
kazuma.aoki @ nifty.ne.jp
2001年 10月 17日 (水) 18:00:38 JST
青木と申します。
はじめてメールさせていただきます。
「TOPPERS/JSPカーネル Release 1.1 (patchlevel=1)(Windows用配付
キット) 」の Windows シミュレーション環境を利用しておりますが、
大変期待している、デバイスエミュレータ機能の利用方法にて行き詰まっ
た点があります。
どなたか、情報をお持ちでしたらよろしくご教示ください。
デバッグのヒント、利用のノウハウ、補足情報のありかなど何でも
結構ですのでよろしくお願いします。
【概要】
Visual Basicプログラムより、
デバイスコントロール「TOPPERS/JSP on Windows Device Component」
で提供されるメソッド RaiseInterrupt を実行したところ、
Toppers KernelからロードされるRPCRT4.DLLで、Access Violation
が発生した。
【詳細】
1)落ちる場所
VisualBasicプログラムよりRaiseInterruptをコール
→ devicecontrol.dll(CDeviceControl::RaiseInterrupt())
→ devicemanager.exe(CDevice::RaiseInterrupt())
...略...
( devicemanagerCP.h line 54 )
ret = p_IKernelEvents->OnInterruptRequest(inhno);
この関数をコールする(Remote Procedure Call発生)と、
RPCRT4.DLLでAccess Violation となります。
(本来は、KernelのEXEの関数が呼び出されるはず)
2)他のメソッド
devicecontrol.dll、devicemanager.exeの他のメソッドが
正常動作することは確認済みです。
3)割込みハンドラ
また、カーネルに対する割込みハンドラの登録も出来ていることは、
Kernel側プログラムより HALInterruptRequest() でハンドラが呼び
出されることを確認しています。
4)再現環境
次の環境で再現します。
I. Kernel: sample1をベースに割込みハンドラを定義
1) sample1.cfg line 20 に次を追加
DEF_INH( 1, { TA_HLNG, interupt_handler_KeyIn } );
DEF_INH( 2, { TA_HLNG, interupt_handler_KeyIn } );
2) sample1.h line 27 に次を追加
extern void interupt_handler_KeyIn( void );
3) sample1.c line 194 に次を追加
void interupt_handler_KeyIn( void ) { return; }
II. 擬似デバイスVisualBasic プログラム
1) jsp/doc/windows.txt 5.1.2章の表以降の記述どおりに
作成
2) ボタンを追加し、クリックされたら
DeviceControl1.RaiseInterrupt 2
を呼ぶ。