Skip to main content

IAR Embedded Workbench for Arm 9.70.x

Cortex-Mデバイスの割り込み関数

このセクションの内容:

Cortex-Mは、以前のArmアーキテクチャとは割り込みメカニズムが異なります。つまり、コンパイラにより提供されるプリミティブも異なります。

Cortex-Mの割り込み

Cortex-Mでは、割り込みサービスルーチンの入力とリターンは、通常の関数と同じです。つまり、特殊なキーワードは必要ありません。そのため、キーワード__irq__fiq、および__nestedは、Cortex-Mのコンパイルには使用できません。

これらの例外関数の名前は、cstartup_M.ccstartup_M.sに定義されています。これらは、ライブラリ例外ベクタコードによって参照されます。

NMI_Handler
HardFault_Handler
MemManage_Handler
BusFault_Handler
UsageFault_Handler
SVC_Handler
DebugMon_Handler
PendSV_Handler
SysTick_Handler

ベクタテーブルは配列として実装されます。C-SPYデバッガはベクタテーブルを配置する場所を決めるときにシンボルを検索するので、__vector_tableという名前は常にあるべきです。

定義済みの例外関数は、weakシンボルとして定義されます。weakシンボルは、重複するシンボルがない限り、リンカにより使用されます。別のシンボルが同じ名前で定義されている場合、これが優先されます。そのためアプリケーションは、上記の一覧から正しい名前を使用するだけで、独自の例外関数を定義できます。他の割り込みまたは他の例外ハンドラが必要な場合には、cstartup_M.cまたはcstartup_M.sファイルのコピーを作成し、ベクタテーブルに正しく追加する必要があります。

組み込み関数__get_CPSR__set_CPSRは、Cortex-Mのコンパイルには使用できません。レジスタまたは他のレジスタの値を取得または設定する必要がある場合、インラインアセンブラを使用できます。詳細については、Cおよびアセンブラオブジェクト間での値の受渡しを参照してください。

FPUを備えたCortex-Mの割り込み

FPUを備えたCortex-Mコアの場合、システムレジスタビットFPCCR.ASPEN1に設定して浮動小数点レジスタ(S0S15および FPSCR)の自動状態保持を有効にする必要があります。これにより、浮動小数点レジスタを使用している場合でも通常の関数と同じ方法で、割り込みサービスルーチンにエンターし、リターンします。

浮動小数点コンテキスト保存手順(FPCCR.ASPEN=0)は、次の場合省略することができます。

  • 1 つのアプリケーションタスクのみがFPUを使用し、割り込みハンドラはFPUを使用しない。または

  • アプリケーションタスクはFPUを使用せず、割り込みハンドラのみで、FPU を使用する。

オペレーティングシステムなしで実行されているアプリケーションは、単一のアプリケーションタスクと見なされます。SVC_Handlerを含むすべてのハンドラは影響を受け、ソフトウェア割り込み関数(__svcキーワードで宣言済みの関数)も影響を受けます。