3

IRQ's最近、キーパッド ドライバーにスレッドを使用したい状況に遭遇しました。IRQスレッド化されたハンドラーの背景について:

http://lwn.net/Articles/302043/

IRQ私が理解していることから、発生するたびにIRQハンドラースレッドが起動されます。したがって、 を押すKEY Aと、スレッドが起動し、完了するまで実行されます。さて、 fromKEY Bのサービス中にハンドラースレッドがまだ実行されている場合、私が押すべき動作はどうなるでしょうか... fromは無視されますか?IRQKEY AIRQKEY B

予想される動作は何ですか?

4

2 に答える 2

4

理想的には、システムはキー A->キー B のシーケンスを常に認識します。

ただし、キーが押されたことを認識するために、システムは各キーが押された時点で何かを行う必要があります。つまり、キーボード割り込みが発生したときです。少なくとも、キーの押下をおそらくキューに記録する必要があります。

また、単一のプロセッサの観点からは、一度に 1 つのことしか実行できないため、キー プレス A の記録中にキー プレス B を同時に記録することはできません。 A を破棄して代わりに B を記録するには、B を無視する必要があります。

したがって、割り込み処理の目標は、プロセッサが特定の割り込みを確認するために必要な最小限の処理に費やす時間を最小限に抑えることです。

スレッド化された割り込みの目標は、より多くの作業を別々のスレッドにプッシュすることです。これにより、割り込みの確認に必要な最小限の時間が短縮され、したがって、割り込みの処理に費やされる時間が短縮されます (他の割り込みを同時に処理することはできません)。 ) 削減されます。

それでも、プロセッサが割り込みを破棄または無視する必要がないという理論的な保証はまだありませんが、実際には可能性がはるかに低くなります。

キーを押す特定の例では、プロセッサが A の最小限の処理を完了する前に B を押すのに十分な速さで何とかできた場合、両方の割り込みが同じソースからのものであり、したがって同じ優先度を持つため、B は無視され、B が押されていないように見えます。

于 2013-01-14T06:18:51.310 に答える
0

割り込みで動作する方法は、アプリケーションが対応する割り込みフラグをクリアするまで、プロセッサが有効な割り込みを何度も呼び出すことです。したがって、ハードウェア ハンドラで特定の割り込みを無効にして、スレッドを起動します。ハードウェア ハンドラが終了すると、割り込みフラグが設定されますが、割り込みは再度呼び出されません。したがって、スレッドで各フラグをチェックし、それをクリアします。キー押下のフラグが設定されていることを検出すると、キーを読み取ってからクリアします。データ レジスタを読み取った後に新しいキーが押され、ハードウェアに fifo がない場合、そのキーの押下は失われます。次に、割り込みフラグをクリアして、ハードウェア割り込みを再度有効にします。

USB のような状況 (つまり、PC と通信する USB ドライバーを作成する場合) では、データの読み取りが完了したときに USB 周辺機器に通知するオプションがあり、ホストにさらにデータを受け入れることができることを通知できます。そのような状況では、データを読み取ってフラグをクリアし、準備ができていることをペリフェラルに伝えるだけなので、データを失うことはありません。それまでの間、周辺機器はホストに準備ができていないことを通知するため、USB バスを介してデータがクロックインされることはありません。

于 2018-08-09T06:57:15.407 に答える