問題タブ [interrupt-handling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - カスタム割り込み記述子テーブルの混乱
プロテクトモードで動作する小さなOSを書いています。カスタム割り込み記述子テーブルをロードしたいところですが、どこから始めればよいかわかりません。OS Dev wikiでいくつかのことを読みましたが、回答が必要な質問がいくつかあります。
OS Dev wiki ではthe first 32 (0-31) interrupts are reserved and used by the CPU, as exceptions, so don't use those for APIs or IRQs.
、カスタム割り込みテーブルをロードしている場合、それらすべての割り込みにエントリを提供する必要はないということです。
また、ウィキには、BIOS が IRQ0-7 を割り込み 8-15 にマップすると記載されています。この場合、IRQ 割り込みは予約された割り込みと競合しませんか?
私が得ていないものはありますか?割り込み 0 ~ 31 は別のテーブルか何かにありますか? 誰かが私を正しい方向に向けて、物事を片付けてください。
timer - Avr-gcc:UARTと競合するタイマー/カウンター割り込み?
次の例(Arduino IDE 0022、Ubuntu 11.04、Arduino AtMEGA 2560で試してみました)を検討してください。ここでは、タイマー/カウンター割り込みを開始Serial
し、同時にArduinoクラスを使用しようとしています。
例のように、シリアルによる印刷は次のようになります。
...その後、すべての処理が停止します(LEDピン13と34の両方にアクションがないことで示されます)。おそらく、これはチップの世界ではBSODと呼ばれるものです:)表面的には、ISRルーチンが初めて開始されるとすぐに停止が発生します。
「レジスタ更新部分」を取り出すと、シリアルプリントアウトは予想どおりに永久に実行されます。また(予想どおり)、ISRは実行されません。ただし、「レジスタ更新部分」が残っていて、Serial.println(...
代わりに2つの「」行がコメント化されている場合(プログラムは「Hellofrom setup」のみを出力します)、割り込みは実行されます(ピン34のパルスによって証明されます)。
これは、ATMega2560でタイマーISRとUARTを同時に実行することはできないことを示しているようです。これは、以前にATMega328で同じ種類のアプローチを使用して成功したことを考えると、ばかげています。
だから、私がやりたいこと(シリアルプリントアウトとピンパルスの両方を持っている)がこのアーキテクチャでは基本的に不可能かどうか迷っています-それともセットアップに何かが欠けているだけですか?
よろしくお願いします、乾杯!
(このSerialクラスは実際にはArduino IDEパッケージのHardwareSerial.cppのクラス定義で動作し、このクラスは受信USART割り込みルーチンを定義します。これが問題になる可能性があると考えましたが、同じアプローチを使用しました。私がそれが機能するのを見たATMega328で..)
java - ネットワーク アクティビティを待機しているスレッドを停止する正しい方法は何ですか?
この質問は、過去にさまざまな形で尋ねられたことは間違いありませんが、特定のシナリオについてはそれほど多くはありません。
UDP経由でネットワークメッセージを受信するのを待っている間にブロックしているスレッドを停止する最も正しい方法は何ですか.
たとえば、次のスレッドがあるとします。
さて、より正しい方法はinterrupt()
メソッドを使用することでしょうか? たとえば、次のメソッドを追加します。
私の唯一の懸念は、socket.receive()
割り込み不可能なブロッキング方法ではないということですか? 私が考えた1つの方法は、そのメソッド呼び出しで上記のように割り込みメソッドを実装socket.close()
しrun
、SocketException
. while(true)
または、割り込みメソッドで反転する状態を使用する代わりに。これが最善の方法ですか?それとももっとエレガントな方法がありますか?
ありがとう
linux-kernel - SoftIRQとタスクレットの違い
Linuxの割り込み処理を研究していると、タスクレットとSoftIRQが「下半分」(優先度の低い作業)を実行する2つの異なる方法であることがわかりました。私はこれを理解しています(かなりの真の必要性)。
違いは、SoftIRQは再エンタラントですが、タスクレットは再エンタラントではありません。同じSoftIRQを異なるCPUで実行できますが、タスクレットの場合はそうではありません。
私はこれを表面から理解していますが、2つの機能の要件を理解できていません。どのような場合にこれらの機能を使用できますか?今タスクレットを使用し、次にSoftIRQを使用する必要があることを認識する方法。
また、タスクレットがSoftIRQで作成されるとはどういう意味ですか?私がLKMLで読んだ本の1つで、タスクレットの削除について議論がありました。なぜそのような機能を導入するのか、私は完全に混乱しましたか?近視眼的(犯罪を意味しない)?
これに関するポインタは大いに役立ちます。
interrupt-handling - PIC (プログラマブル割り込みコントローラー) と VIM (ベクター割り込みコントローラー) の違いは何ですか?
ARM プロセッサ関連のドキュメントでは VIC について説明していますが、PIC は Intel 陣営から来ていると思います。それらは概念的に同じですか?
gcc - DOSのタイマー割り込みハンドラーをGNU(GCCおよびGAS)に置き換える
タイトルが示すように、DOSのタイマー割り込みの既存のハンドラーを自分のものに置き換えようとしています。さまざまなソリューションを幅広く検索した後、まさにそれを実行するアセンブリコードを見つけました。それをコンパイルしてテストすることもでき、それが機能することを確認しました。
ここでの問題は、私が見つけたコード(以下を参照)がTASM用に記述されていることです。これを、GCCでコンパイルする作成中のCコードで使用したいと思います。
コードをGAS(GNUアセンブラ)構文に変換しようとしましたが、機能しないようです(何度も試行したときに、ほとんどの場合、何らかのクラッシュが発生しました)。
誰かが私に解決策を教えてくれたらとてもありがたいです(GASがコンパイルできるアセンブリコードの動作バージョンであっても、Cですべてを実行する方法-"interrupt"キーワードは機能しません、また、「属性((割り込み))」なども、TASMとGCCの間を橋渡しする方法もありません。
また、私が使用しているDOSシステムは、実際にはFreeDOSがインストールされた仮想マシンを実行しているOracleVM VirtualBox Managerであり、Cに使用しているコンパイラはDJGPP開発環境で提供されるGCCです。 。
これは私が持っている動作中のTASMコードです(http://www.programmersheaven.com/mb/x86_asm/276128/276185/re-redefining-the-timer-interrupt-handler/から取得):
それは私のマシンで完全に動作します。プログラムを起動すると、コンソールの最初の行全体が、常に変化するカラフルな文字に置き換えられているのがわかります。
そして、これは上記のコードをGAS構文に変換する私の試みです。
次のコマンドを使用してファイル(「ttv2.s」と呼ばれる)をコンパイルします。
結果のEXEファイルを実行すると(アセンブリおよびリンケージ中に警告やエラーは発生しません)、プログラムは「リング0の例外0D(および多数のレジスタ値)」というエラーでクラッシュします。ただし、TASMバージョンは問題なく動作します。したがって、コードを変換する方法、または最終的なEXEを作成する方法のいずれかに問題があると推測しています。または両方。
少しの追加情報、それが何らかの形で役立つ場合:
- インストールコマンド( )を削除
int $0x21
してもクラッシュは発生せず、プログラムはキーを押すのを待ってから終了します。 - インストールコマンドを保持しているが、キー待機コマンド( )を削除する
int $0x16
と、プログラムはすぐに終了し、クラッシュは発生しません。 - インストールコマンドを保持し、wait-for-keyコマンドをアクティブな遅延ループ(40億回の反復の単純なループ)に置き換えると、wait-for-keyコマンドが配置されたときと同じようにプログラムがクラッシュします。 、しかし、すぐにではなく、数秒後。
- どちらの場合も(キーを押すか遅延して)クラッシュすると、2つのインストールコマンドの1つだけを削除しても、プログラムがクラッシュします。
あらゆる支援を事前に感謝し、長い投稿をお詫びします...
assembly - ISR で Int 13h を呼び出す
リアル モードでのアセンブリによって、int 9h の ISR を作成しました。この ISR では、ハードディスクにデータを書き込むために INT 13h、AH=0x02 を呼び出します。ただし、データはハードディスクに書き込まれません。また、int 13h, ah=0x02 も機能しません (ハードディスクからデータを読み取る)。call int 13h の後、キャリー フラグはオンですが、AH と AL はゼロです。このコードを ISR から使用すると、うまくいきます。ISR の INT13h が機能しないのに、INT10h などの他の割り込みが正しく機能するのはなぜですか?
assembly - 割り込みを処理するには?
ゼロ除算例外を処理するプログラムを作成するタスクがあります。それについての情報を見つけるのに苦労しています。私が理解しているように、割り込みベクタ テーブルの 0 番目のエントリを変更する必要がありますが、どうすればよいですか? LIDT 命令があるようですが、テーブル全体を記述する必要はありませんか?
注意してください、私は16ビットモードで作業します。
linux - ユーザー空間での Linux 割り込み処理
Linux では、カーネル空間ではなくユーザー空間コードでデバイス割り込みを処理するためのオプションは何ですか?
java - interrupt() が期待どおりに機能しない (割り込みはどのように機能しますか?)
スレッドを中断したいのですが、呼び出しinterrupt()
が機能していないようです。以下はサンプルコードです。
しかし、出力はスレッド 1 がまだ実行されているように見えます。誰もがこれとどのようにinterrupt()
機能するかを説明できますか? ありがとう!