-1

arm7tdmi で、命令が実行され、同時に FIQ と IRQ の両方が同時に発生するとします。現在、優先度に従って FIQ が処理され、次に IRQ が処理されますが、私の質問は、FIQ から戻った後に IRQ をどのように処理するかということです。 FIQ の戻り時に行われるプロセスと、FIQ ハンドラーの return ステートメントの後に制御がどのように IRQ ハンドラーに転送されるか?

例: アドレス => 命令

  0x00000100              :      MOV R0,R1
  0x00000104              :      MOV R0,R1
 =>> 0x00000108              :      MOV R0,R1   
  0x00000110              :      MOV R0,R1
  0x00000114              :      MOV R0,R1
  0x00000118              :      MOV R0,R1

; 0x00000108 で命令が実行され、FIQ と IRQ が発生したとします。

4

1 に答える 1

1

M プロファイル アーキテクチャとは異なり、テール チェイン例外を許可する非常に異なる例外モデルを持つ、クラシック/A プロファイル アーキテクチャは、完全に単純な方法で処理を行います。

各 CPSR.F/CPSR.I ビットがクリアされている場合、割り込みは命令境界でチェックされます。したがって、FIQ ハンドラーが単純であると仮定すると、0x108 の命令が完了すると、CPU がどのモードにあったとしても、FIQ が (IRQ よりも優先されるため) 取得され、FIQ ハンドラーは FIQ と IRQ をマスクして実行し、例外は 0x110 に戻ります。全体を通して保留中の IRQ がたまたまあったという事実は、何の違いもありません。

注意点は、FIQ ハンドラの最後のリターン命令とリターン先の境界です。FIQ リターンは、(おそらく) IRQ がマスクされていない以前の SPSR を復元します。したがって、その return 命令を実行した、0x110 の命令を実行する前に、CPU は初期モードに戻り、IRQ がマスク解除され、IRQ が保留されます。だからそれが必要です。IRQ ハンドラーは IRQ をマスクして実行し、0x110 への例外リターンを実行します。その後、実行は最終的に両方の割り込みを処理し続けます。

ARM7TDMI の場合は、これですべてです。新しいアーキテクチャ バージョン (ARMv7 以降) では、CPU 設計がスーパースカラーおよび/または順不同になり始めると、「命令境界」の概念が少し理解されるため、非同期例外が発生することが予想される場合に正確に強化されるいくつかのルールがあります。ぼやけています。ただし、この特定の状況は最新の CPU でも変わりません。FIQ から返される例外はコンテキスト同期イベントを構成し、その後、保留中の非同期例外 (つまり IRQ) をすぐに取得する必要があります。

于 2016-09-26T19:29:03.563 に答える