Skip to main content

IAR Embedded Workbench for Arm 9.70.x

ブレークポイントの種類

このセクションの内容:

使用している C-SPY ドライバによっては、C-SPY で別の種類のブレークポイントを使用できる場合があります。

コードブレークポイント

コードブレークポイントは、プログラムロジックが正しいかどうかや、トレースの出力を取得するためにコードの位置を探すときに使用します。コードブレークポイントは、指定位置から命令をフェッチした時にトリガされます。特定のマシン命令にブレークポイントを設定した場合は、命令の実行前にブレークポイントがトリガされ、実行が停止します。

ログブレークポイント

ログブレークポイントは、アプリケーションのソースコードにコードを追加することなく、トレース出力を追加する便利な方法です。ログブレークポイントは、指定位置から命令をフェッチ時にトリガされます。特定のマシン命令にブレークポイントを設定した場合は、命令の実行前にブレークポイントがトリガされ、実行が一時停止し、指定したメッセージが[C-SPY デバッグログ]ウィンドウに出力されます。

[トレース開始/停止]トリガブレークポイント

トレース開始トリガおよびトレース停止トリガブレークポイントは、トレースデータの収集を開始および停止します。これは、2 つの実行ポイント間で命令を解析する便利な方法です。

データブレークポイント

主にメモリ上の固定アドレスに割り当てられた変数に使用します。アクセス可能なローカル変数にブレークポイントを設定した場合、実際には対応するメモリアドレス(ロケーション)に設定されます。この位置の妥当性が保証されるのは、コードの一部だけです。データブレークポイントは、指定された位置のデータがアクセスされたときにトリガされます。

通常は、データにアクセスする命令が実行された直後に、実行が停止します。ただし、Cortex-M55 などの一部の新しい Arm デバイスでは、データブレークポイントは、数命令後まで実行を停止しない場合があります。さらに、CPUが何らかの理由で停止した場合、そのような「遅延」データブレークポイントは全く効果がありません。例 : 2つの連続する命令が、データブレークポイントがある 2 つの異なる場所から読み取られる場合、2 番目の命令は効果がありません。同様に、データブレークポイントの直後にコードブレークポイントが続く場合、そのデータブレークポイントは効果がありません。

データログブレークポイント

データログブレークポイントは、指定の変数にアクセスするとトリガされます。ログエントリは、各アクセスについて[SWO トレース]ウィンドウ(シミュレータの[トレース] ウィンドウ) に書き込まれます。ログメッセージは[データログ]ウィンドウにも表示されます。データログは[タイムライン]ウィンドウのデータロググラフにも表示することができます(ウィンドウが有効な場合)。ただし、これらのログメッセージを使用するには、[SWO設定]ダイアログボックスでトレースデータを設定しておく必要があります([SWO 設定]ダイアログボックスを参照)。

データログブレークポイントは、[ブレークポイント]ウィンドウ、[メモリ]ウィンドウ、エディタウィンドウを使用して設定できます。

単一の命令を使用して、マイクロコントローラは、4 バイト以下の値にのみアクセスできます。1 つの命令でアクセスできないメモリ位置にデータログブレークポイントを指定すると(例えば、double または[メモリ]ウィンドウの 大きすぎるエリア)、予期しない結果となる場合があります。

イミディエイトブレークポイント

一部のコアおよびデバイスでは、C-SPY シミュレータは、一時的にのみ命令の実行を停止するイミディエイトブレークポイントを使用できます。これによって、命令の実行が一時的に停止します。このブレークポイントを使用すると、シミュレーションされたプロセッサがある位置からデータを読み込む直前か、ある位置にデータを書き込んだ直後に、C-SPY マクロ関数を呼び出すことができます。アクションが終了すると、命令の実行が再開されます。

イミディエイトブレークポイントは、メモリにマッピングされたさまざまな種類のデバイス(シリアルポートやタイマなど)をシミュレーションする場合に便利です。デバイスがメモリマッピングされた位置からシミュレーションされたプロセッサが読み込むと、C-SPY マクロ関数が実行されて適切なデータを供給します。逆に、デバイスがメモリマッピングされた位置にシミュレーションされたプロセッサが書き込むと、C-SPY マクロ関数が実行されて、書き込まれた値に応じた適切な動作を実行します。

JTAGウォッチポイント

C-SPY J-Link/J-Trace ドライバでは、Arm7/9 コアの JTAG ウォッチポイント機構を活用できます。

ウォッチポイントは、Arm EmbeddedICE のマクロセルが提供する機能を使用して実装されます。. このマクロセルは、JTAG インターフェースをサポートするすべての Arm コアの一部です。EmbeddedICE ウォッチポイントコンパレータでは、アドレスバス、データバス、CPU 制御信号、および外部入力信号と、定義されたウォッチポイントをリアルタイムで比較します。定義された条件がすべて真の場合、プログラムが中断します。

ウォッチポイントは、C-SPY で暗黙的に使用して、アプリケーションのコードブレークポイントやデータブレークポイントを設定します。リード / ライトメモリにブレークポイントを設定する場合、デバッガではウォッチポイントが 1 つのみ必要です。リードオンリーメモリにブレークポイントを設定する場合、各ブレークポイントには 1 つのウォッチポイントが必要です。マクロセルでは 2 つのハードウェアウォッチポイントしか実装しないため、リードオンリーメモリのブレークポイントの最大値は 2 つです。

Arm JTAG ウォッチポイント機構の詳細については、Arm Limited の以下の資料を参照してください。

  • 『ARM7TDMI (rev 3) Technical Reference Manual』の C第5章「Debug Interface」および付録Bの「Debug in Depth」

  • アプリケーションノート28の「The ARM7TDMI Debug Architecture」

フラッシュブレークポイント

ソフトウェアコードブレークポイント(メモリにブレークポイント命令を書き込むことに依存してするブレークポイント)は、フラッシュブレークポイントメカニズムを使用して、フラッシュメモリまたは他の不揮発性の実行可能メモリに設定することができます。これは、アプリケーションをダウンロードするときに行われているのと同じ方法で、フラッシュローダを使用するフラッシュメモリのプログラミングを必要とします。

このブレークポイントタイプは、C-SPY I-jet ドライバで使用できます。他のデバッグプローブでは、別のメカニズムを使用してフラッシュメモリにブレークポイントを設定できる可能性があります。たとえば、J-Link はその 1 つです。