ハードウェア割り込みが発生したときに Java メソッドを自動的に呼び出すことができるかどうかを知りたいです。
6 に答える
代替案があるかもしれません。
私は似たようなことをしています: アプリケーションでは、4 匹のマウスのクリックを監視しています。これらのクリックは割り込みを生成しますが、Java から直接それらを処理しないことに満足しています。
/dev/input/mouse#
Linux では、マウスで何かが起こったときに大量の文字を吐き出すデバイス ファイル ( ) があることがわかりました。それぞれにスレッドがあり、FileReader が読み取りをブロックしています。文字が到着すると、関連するスレッドのブロックが解除され、好きな処理を行うことができます。
したがって、アイデアは次のとおりです。可能であれば、ファイル/デバイス形式でデータにアクセスできるようにするデバイスドライバーを取得する方法を見つけてください。そうすれば、JavaライブラリからのIO呼び出しだけを使用して、奇妙なビットなしでJavaからアクセスできます-いじり回しコードとその間に必要な C。
原則としてはい。ただし、それを Java に結び付けるには C コードと JNI が必要です。運が良ければ、興味のある paltform に適したライブラリがすでに誰かによって構築されている可能性があります。
結論: C で実行できる場合は、それを Java にフックできます。
Java からの割り込みに直接応答したい場合は、VM をカーネル空間で実行する必要があります (または、ドライバー コンテキストでユーザー空間ドライバーを備えた一部のシステムで実行する必要があります)。JamaicaVM は、Thread-X や VxWorks などの一部の RTOS でこのモードで DKM として実行されます。RTSJ の次のリリースでは、Java での割り込みサービス ルーチンの記述がサポートされる予定です。
RTSJ を使用して、ユーザー空間でも第 2 レベルの割り込みハンドラーを実行できます。これには、POSIX シグナルを VM に送信するか、VM 内の 1 つのスレッドがデバイスの読み取りをブロックするキャラクター デバイス インターフェイスを提供する小さなデバイス ドライバーが必要です。最初のケースでは、AsyncEventHandler を POSIX シグナルに関連付けることができます。2 つ目では、デバイスの読み取りをブロックするトレッドは、デバイスからバイトが読み取られるたびに AsyncEvent を発生させることができます。次に、AsyncEvebt にアタッチされた AsyncEventHandler が解放されます。
Linux でこれを試してみたい場合は、JamaicaVM パーソナル版をダウンロードできます: "http://www.aicas.com/jamaica-pe.html"。JamaicaVM にはリアルタイム ガベージ コレクタがあり、コードを静的にコンパイルしてリアルタイム パフォーマンスを確保できます。これは、従来の JVM とは異なる展開モデルです。
これは組み込みリアルタイム Java の標準です。www.ajile.com または systrmonx.com にアクセスして、評価ボードを購入してください。
組み込み Java はPC の標準ではありません。PC ハードウェアでリアルタイム Java を取得できますが、埋め込みビットは取得できません。
Swigを見てください。Java 実装には、C/C++ から Java を呼び出すことができるディレクターがあります。
このテクノロジを使用して、C# への割り込み呼び出しを処理しましたが、うまく機能しました。Java の呼び出しと大差ないはずです。