3.15 プロセッサ例外処理

ARM® プロセッサは、例外ベクタと呼ばれる固定アドレスのいずれかにジャンプすることで例外を処理します。

スーパーバイザコール(SVC)またはセキュアモニターコール(SMC)を除き、これらのイベントは通常のプログラムフローの一部ではありません。ソフトウェアのバグなどが原因で、イベントは予期せず発生する場合があります。そのため、ほとんどの ARM プロセッサにはこれらの例外をトラップするためのベクタキャッチ機能が搭載されています。この機能はベアメタルプロジェクトや開発の初期段階にあるプロジェクトに最も役立ちます。OS の実行中は、仮想メモリ処理などの正当な目的にこれらの例外が使用されることもあります。

ベクトルキャッチを有効にすると、選択したベクタテーブルエントリにブレークポイントを配置するのと同様の効果があります。ただしこの場合、ベクタキャッチはプロセッサの専用ハードウェアを使用し、貴重なブレークポイントリソースを使い切ることはありません。

注:

使用可能なベクタキャッチイベントは、接続しているプロセッサによって異なります。

デバッガでベクタキャッチを管理するには、以下のいずれかの操作を行います。

  • [Breakpoints] ツールバーまたはビューのメニューから [Manage Signals] を選択して、[Manage Signals] ダイアログボックスを表示します。

    情報が必要な個々の信号には、停止または印刷オプションのいずれかを選択します。停止オプションは、実行を停止して、メッセージを印刷します。印刷オプションは、メッセージを印刷しますが、実行は継続します。コマンドビューにこれらのメッセージを表示できます。

    図 3-10 [信号の管理]ダイアログ
    [信号の管理]ダイアログ


  • handle コマンドを使用して、コマンドビューに結果を表示します。

ヒント:

また、 info signals コマンドを使用して、ハンドラの現在の設定を表示することもできます。

例 3-4 例

例外ハンドラのデバッグ
例外が発生したときに例外をキャッチして、イベントを記録し、アプリケーションを停止するようデバッガで指定するには、例外に基づく停止をイネーブルする必要があります。以下の例では、NON-SECURE_FIQ 例外が発生すると、デバッガが停止してコマンドビューにメッセージが印刷されます。その後で、ハンドラがある場合は、それをステップ実行または実行できます。
handle NON-SECURE_FIQ stop        # Enable stop and print on a NON-SECURE_FIQ exception
例外の無視
例外が発生したときに停止を伴わずにハンドラを呼び出すには、例外に基づく停止をディセーブルする必要があります。
handle NON-SECURE_FIQ nostop      # Disable stop on a NON-SECURE_FIQ exception
非機密扱いPDF file icon PDF 版ARM DUI0446ZJ
Copyright © 2010–2016 ARM.All rights reserved.