の違いは何ですかFIQおよび割り込み割り込みシステム?
-
13-09-2019 - |
質問
知りたいの違いをFIQおよび割り込み割り込みシステム 載のマイクロプロセッサ。g:ARM926EJ.
解決
最新のARM CPUの機能(およびいくつかの他)。
特許から:
高速を行う方法 デジタル・データ・プロセッサに割り込みます より多くを処理する能力を有します 1つの割り込みが提供されます。とき 高速割り込み要求が受信されます フラグ設定され、プログラムカウンタ そして、条件コードレジスタがあります スタックに保存されています。の終わり ルーチンの復帰を割り込み処理 割り込み命令取り出してから、 コンディションコードレジスタました デジタルの状態が含まれています データ・プロセッサとかどうかを確認し フラグが設定されているか否か。 フラグが設定されている場合には、ことを示しています 高速割り込みがサービスされ、 したがって、唯一のプログラムカウンタがあります 積み重ねています。
言い換えれば、FIQは、要求サービス中IRQおよび他のFIQハンドラを無効にすることによって、優先されるだけで優先順位の高い割込み要求、です。したがって、他の割り込みがアクティブFIQ割り込みの処理中に発生することができない。
他のヒント
アーム電話 FIQ
の 早割り込み, こ IRQ
は 通常の優先.任意のリアルシステムがあります多くの資源割り込みを行うだけではな二つのデバイスが、その一部を外部割り込みハードウェアコントローラでマスキング、優先順位付け。これらの多数の発生源とするドライブの割り込み依頼のプロセッサー
ある程度この両者の区別は割り込みモード冗長および多くのシステムのご利用がない nFIQ
全てのご使用方法に類似している非maskable(NMI
送したその他のプロセッサーが FIQ
ソフトウェアmaskableほとんどのARMプロセッサ).
理由は一体なんだろう?アーム電話FIQ"高速"?
- FIQモードでは、独自の専用bankedの登録、
r8-r14
.R14のリンクを登録するに戻りアドレス(+4)からのFIQ.が合わない場合にはFIQハンドラが書き込まれるようについてアフターサービスについてr8-r13
, では、これらを活用すbankedレジスタは二つの方法:- ありませんが、オーバーヘッドを押して、吹出しの他に登録されている割り込みサービスのルーチン(ISR).このでかなりの数のサイクルの両方の出入りのISR.
- また、ハンドラに依存できる値に固執レジスタからの電話のように例えば
r8
として用いる場合のポインタをハードウェアデバイスのハンドラに依存できる.同じ値がr8
次の時間と呼ばれています。
- FIQ立地の例外のベクトルク表
0x1C
するということは、場合にはFIQハンドラのコードは直後のベクトル、テーブル支店を所要のコードから直接実行0x1C
.この数サイクルへのエントリの論文 - FIQよ割り込み.この場合、コアかFIQを除くと、自動的に仮面をIRQs.る割り込みできないFIQ割り込み、ハンドラです。の反対ではありませんの割り込みはマスクFIQsのFIQハンドラ使用している場合)で割り込みの割り込み.また、場合に割り込みおよびFIQ要求が発生と同時に、コアのFIQます。
それでは、なぜ多くのシステムは使用しないでFIQ?
- FIQハンドラのコードを使用できない文字で書き込まれる直接組み立てます。場合は介護が十分に約ISR能を利用したいFIQ、ほとんどなく少数のサイクルのテーブルコーディングのCの場合よりも重要なのは、Cコンパイラのないコードの制限のみを使用レジスタ
r8-r13
.コードされるCコンパイラー準拠したアームATPCS
呼び出しスタンダード代わりに利用登録r0-r3
スクラッチ価値が発生することはありませんが正しいcpsr
回復帰コードのために停止してしまうの機能です。 - すべての割り込みコントローラーハードウェアは、通常の割り込みをピンと張ります。使用FIQのみ意味を持つ場合にはシングルの最優先課題を中断源に接続されnFIQ入力および多くのシステムがない単一の永久優先ます。値がな接続の複数のFIQを有するソフトウェアを優先して削除しますほぼすべての利点をFIQ以上の割り込み.
FIQ または 早割り込み しいものに変えていくと考えてい ソフトDMA 一部のアームの参照です。
の特徴 FIQ は、
- 別のモードbanked登録を含むスタック、リンクの登録およびR8-R12.
- 別FIQの有効/無効設定の時です。
- テールベクターのテーブル(いつもキャッシュマップによるMMU).
最後の特徴でもあっけに取られて活用する 割り込み だけます。
速度はデモデイを開催、'C'
あるいは引用の難易度における符号化のアセンブラにFIQ. gcc
はためのアノテーションコードa FIQ ハンドラです。ここでの例では、
void __attribute__ ((interrupt ("FIQ"))) fiq_handler(void)
{
/* registers set previously by FIQ setup. */
register volatile char *src asm ("r8"); /* A source buffer to transfer. */
register char *uart asm ("r9"); /* pointer to uart tx register. */
register int size asm ("r10"); /* Size of buffer remaining. */
if(size--) {
*uart = *src++;
}
}
そのほとんど良いアセンブラ、
00000000 <fiq_handler>:
0: e35a0000 cmp sl, #0
4: e52d3004 push {r3} ; use r11, r12, etc as scratch.
8: 15d83000 ldrbne r3, [r8]
c: 15c93000 strbne r3, [r9]
10: e49d3004 pop {r3} ; same thing.
14: e25ef004 subs pc, lr, #4
のアセンブラチ 0x1c
が、
tst r10, #0 ; counter zero?
ldrbne r11, [r8] ; get character.
subne r10, #1 ; decrement count
strbne r11, [r9] ; write to uart
subs pc, lr, #4 ; return from FIQ.
実 UART おそらく意のビットが、コードの高速 ソフトDMA のFIQが10-20に示します。本コードのニーズへの世論調査のFIQ r10
かを判定するのには、バッファは終了しました。主な非コードの割り込みが転送設定のbanked FIQ レジスタを使用 msr
指示に切り替える FIQ モード転送-非banked R0-R7にbanked R8-R13登録する
通常、RTOS割り込みの待ちます500-1000ください。Linuxでも2000-10000ください。実DMAは常に好ましい、しかし、高周波数の単純な割り込み(バッファに転送、 FIQ を提供できます。
としての FIQ が速いだけでなく安全における符号化のアセンブラ(うえします。アセンブラによる"限りなく走行プログラマーがより速くよりもコンパイラです。有GCCを支援できる初心者.
遅延
としての FIQ には別途マスクビットではほぼ普遍的に存在有効になります。以前のアームのCpuなどのARM926EJ、原子力事業が実施するマスキング割り込みを行う.でも最先端の皮質、CpuがあるOSはマスクの割り込みを行う.多くのサービス時間にする必要はありません割り込みの中、その時間信号とサービスここで、 FIQ にも有利です。
弱点
の FIQ ないラブル。利用するために複数の FIQ
源のbankedレジスタ間で共有することが不可欠の中で割り込みがありました。また、コードを追加する必要があるの割り込み/FIQ.の FIQ 一般的には、 一trickポニー.
場合に割り込みが非常に複雑なネットワークドライバー、USBなど)、そのFIQかとなった。これは基本的に同声明として多重化方式、割り込みを行う.の banked 登録い6自由変数を使用する な負荷からメモリ.登録がよりスピーディになります。レジスタを高速L2-キャッシュ.レジスタを高速L1-キャッシュ.登録しています。できれば書いていない日常が6変数の FIQ には不向きです。注意:できるダブルの責務の一部登録 シフト や 回転 である無料のアームをご利用の場合16ビットの値です。
明らかに FIQ はさらに複雑になります。OS開発者をサポートしたいと考えて複数の割り込みます。お客様の要件 FIQ 異なり、しばしばこのうただのお客様 ロール自身の.通常のサポート FIQ 限として支援に対する損の主利益 速度.
概要
なbash友人の FIQ.そんなシステムのprogramersワトリックに対しみます。ではないが、その場所です。すべてのその他の軽減の試みの遅延を増やISRサービスの周波数に失敗したの FIQ きのみになります(またはよりよいハードウェアました。
にすることも可能としての利用 パニック 割り込みの一部の安全性に最適です。
カオスはすでによく答えていますが、これまでにカバーされていない追加のポイントは、FIQはベクタテーブルの末尾にあるとIRQベクタは通常、まさにそれであるのに対し、それは、ちょうどそこにルーチンを開始する伝統的な/一般的だということです。 (つまり、どこか別の場所にジャンプします)。すぐにフルスタッシュとコンテキストスイッチの後に余分な枝がわずかな速度ゲインであることを回避ます。
FIQは高い優先度であり、別のIRQが処理されている間に導入することができます。最も重要なリソースは(S)FIQのによって処理され、残りはIRQのによって処理されます。
、FIQモード
R14_fiqレジスタにR8を有します私は、これはあなたが探しているものであると信じています:
のhttp://newsgroups.derkeiler .COM /アーカイブ/コンプ/ comp.sys.arm / 2005-09 / msg00084.htmlする
本質的に、FIQは、複数と最も高い優先度より低い優先度のIRQソースになります。
はありませんFIQについての魔法。 FIQはちょうどそれが「速い」と呼ばれている理由です、提供されている他のIRQを中断することができます。システムは、これらの割り込みに速く反応するが、残りの部分は同じです。
FIQsは優先度の高い、間違いなく、私は確認していない残りのポイントです..... FIQが、我々がFIQsを使う必要とされ、一般のIRQが使用されている高速データ処理の高速データ転送(または)チャネル処理をサポートします通常の割り込みhandllingます。
また、それがR8-R14レジスタのユニークなセットを持って、それは1つの分岐命令を必要としないことがあり、我々は割り込みハンドラの設計方法によって異なりますので、我々は戻ってFIQに来て、次回は、私たちがプッシュする必要はありません中断します/スタックをポップアップ表示。勿論それはいくつかのサイクルを保存しますが、再び、それはより多くのハンドラが1 FIQにサービスを提供し、そうFIQがより優先順位をしているが、それはより速く割り込みを処理します言うこと何らかの理由ではありません持つことは賢明ではありません、IRQ / FIQの両方が、同じCPUの周波数で動作しますそこで、彼らは同じ速度で動作している必要があります。
これは間違っている可能性があります。私が知っているすべては、FIQが高速割り込み要求の略で、IRQは割り込み要求を意味していることということです。これらの名前から判断すると、私はFIQが処理されることを推測します(スロー?)IRQよりも速いです。これはおそらく、FIQが速くIRQよりもプロセスを中断しますプロセッサの設計とは何かを持っています。私はちょうど今推測している、私が間違っている場合、私は謝るが、私は通常、より高いレベルのプログラミングを行うます。