Skip to main content

IAR Embedded Workbench for Arm 9.70.x

プロセッサモードおよびスタック

このセクションの内容:

さまざまなプロセッサモードには個々のスタックが必要です。場合によってはこれらのリンカブロックの名前を把握しておく必要があります。例えば、[IDEオプション]ダイアログボックスの[スタック]ページで設定をするときなどです。

Arm7/9/11、Cortex-A、および Cortex-R デバイスでは、異なる例外が発生したときに入る5つの例外モードをサポートしています。各例外モードには、システム/ユーザモードスタックの破損を回避するための独自のスタックがあります。

注記

64ビットArm コアおよびCortex-Mには個々の例外スタックはありません。 デフォルトでは、すべての例外スタックは、CSTACKセクションに配置されています。

表には、様々なスタックのデフォルトのスタックブロックの名前が記載されていますが、自分の名前を設定できます。ただし、スタックブロックがデフォルトの名前を使用している場合は、[IDEオプション]ダイアログボックスの[スタック]ページのスタックチェック機能のみが機能します。

プロセッサモード

デフォルトのスタックブロック名

説明

Supervisor

SVC_STACK

Arm 7/9/11、Cortex-A、およびCortex-Rのオペレーションシステムスタック

IRQ

IRQ_STACK

Arm 7/9/11、Cortex-A、およびCortex-Rの汎用(IRQ)割り込みハンドラのスタック。

FIQ

FIQ_STACK

Arm 7/9/11、Cortex-A、およびCortex-Rの高速(FIQ)割り込みハンドラのスタック。

Undefined

UND_STACK

Arm 7/9/11、Cortex-A、およびCortex-Rの未定義命令割り込みのスタック。ハードウェアコプロセッサおよび命令セット拡張のソフトウェアエミュレーションをサポートします。

Abort

ABT_STACK

Arm 7/9/11、Cortex-A、およびCortex-Rの命令フェッチおよびデータアクセスメモリ中断割り込みハンドラのスタック。

User

CSTACKまたはUSR_STACK

Userモードのスタック。

Monitor

MON_STACK

SecureとNon-Secureステータス間でコンテキストを切り替えるスタック。.

Hypervisor

HYP_STACK

仮想機能にアクセスするスタック。

表89 Armプロセッサモードのスタック


スタックが必要な各プロセッサモードでは、個別のスタックポインタを起動コードで初期化し、セクション配置をリンカ設定ファイルで行う必要があります。IRQおよびFIQスタックは、提供されているcstartup.sおよびlnkarm.icfファイルで事前に定義されている唯一の例外スタックです。ただし、他の例外スタックを簡単に追加することができます。

注意

IDEで使用できる[スタック]ウィンドウにこれらのスタックを表示するには、ユーザが定義したブロック名ではなく、デフォルトの名を使用する必要があります。