2

私はアーム用のデバイスドライバーから始めました...そこで私は各ハンドラーの言及を見ました__attribute__((interrupt( irq )))------。この属性がどのようにドライバールーチンを呼び出すのか混乱しています..??

アームのIRQには次のベクトルアドレスがあります---0x00000018(または0xFFFF0018)同じ行に多くの割り込みハンドラーが存在する可能性があるため。再登録する独自のIRQを持つ4つのデバイスドライバーがあるとします。

いくつかのスタートアップコードがIRQハンドラー用にGCCコンパイラーによって提供され、コンパイラーが割り込みハンドラー用のそのスタートアップコードでルーチンを呼び出すことを意味します.....私は正しいですか...?

4

2 に答える 2

1

割り込み属性のGCC ドキュメントから:

この属性が存在する場合、コンパイラは、割り込みハンドラでの使用に適した関数の開始および終了シーケンスを生成します。

この属性を使用objdumpしてバイナリがどのように変化するかを簡単に確認できます。これにより、状況がより明確になります。

于 2012-12-09T10:43:15.783 に答える
0

この属性は、OS の割り込みハンドラーでのみ使用し、特定のドライバーの割り込みハンドラーでは使用しないでください。OS は IRQ ベクトル/番号を読み取り、適切なドライバー関数を呼び出して IRQ を処理します。ドライバー/ISR を OS に登録するだけです。

于 2012-12-29T09:18:16.547 に答える