プロセッサモードおよびスタック
さまざまなプロセッサモードには個々のスタックが必要です。場合によってはこれらのリンカブロックの名前を把握しておく必要があります。例えば、[IDEオプション]ダイアログボックスの[スタック]ページで設定をするときなどです。
Arm7/9/11、Cortex-A、および Cortex-R デバイスでは、異なる例外が発生したときに入る5つの例外モードをサポートしています。各例外モードには、システム/ユーザモードスタックの破損を回避するための独自のスタックがあります。
表には、様々なスタックのデフォルトのスタックブロックの名前が記載されていますが、自分の名前を設定できます。ただし、スタックブロックがデフォルトの名前を使用している場合は、[IDEオプション]ダイアログボックスの[スタック]ページのスタックチェック機能のみが機能します。
プロセッサモード | デフォルトのスタックブロック名 | 説明 |
|---|---|---|
Supervisor | Arm 7/9/11、Cortex-A、およびCortex-Rのオペレーションシステムスタック | |
IRQ | Arm 7/9/11、Cortex-A、およびCortex-Rの汎用(IRQ)割り込みハンドラのスタック。 | |
FIQ | Arm 7/9/11、Cortex-A、およびCortex-Rの高速(FIQ)割り込みハンドラのスタック。 | |
Undefined | Arm 7/9/11、Cortex-A、およびCortex-Rの未定義命令割り込みのスタック。ハードウェアコプロセッサおよび命令セット拡張のソフトウェアエミュレーションをサポートします。 | |
Abort | Arm 7/9/11、Cortex-A、およびCortex-Rの命令フェッチおよびデータアクセスメモリ中断割り込みハンドラのスタック。 | |
User | Userモードのスタック。 | |
Monitor | SecureとNon-Secureステータス間でコンテキストを切り替えるスタック。. | |
Hypervisor | 仮想機能にアクセスするスタック。 |
スタックが必要な各プロセッサモードでは、個別のスタックポインタを起動コードで初期化し、セクション配置をリンカ設定ファイルで行う必要があります。IRQおよびFIQスタックは、提供されているcstartup.sおよびlnkarm.icfファイルで事前に定義されている唯一の例外スタックです。ただし、他の例外スタックを簡単に追加することができます。
注意
IDEで使用できる[スタック]ウィンドウにこれらのスタックを表示するには、ユーザが定義したブロック名ではなく、デフォルトの名を使用する必要があります。