(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
    を呼ぶ。