Keil Logo

BreakSet

構文 説明
BreakSet exp , cnt , "cmd" 実行ブレークポイントまたは条件ブレークポイントを設定します。
BreakSet READ exp , cnt , "cmd" 読み出しアクセスブレークポイントを設定します。
BreakSet WRITE exp , cnt , "cmd" 書き込みアクセスブレークポイントを設定します。
BreakSet READWRITE exp , cnt , "cmd" 読み出し/書き込みアクセスブレークポイントを設定します。

BreakSet コマンドは、指定した式(exp)にブレークポイントを設定します。ブレークポイントは、true の場合にターゲットプログラムの実行を停止するか、指定されたコマンドを実行するプログラムアドレスまたは式です。

ブレークポイントの定義には、以下のパラメータを指定できます。

各パラメータの説明  
exp µVision4 が実行中に評価するアドレス指定または式です。
cnt ブレークポイント条件を満たした回数を決める式で、回数がこの値に達するとターゲットプログラムを停止するか、指定したコマンドを実行します。デフォルトカウント値は 1 です。
cmd ブレークポイントに達したときに実行する µVision4 コマンドを指定するコマンド文字列です。コマンドが指定されていない場合は、ブレークポイントに達したときに µVision4 がプログラムの実行を停止します。コマンドが指定されている場合、µVision4 はそのコマンドを実行するのみで、ターゲットプログラムを停止しません。このコマンドでは µVision4 ユーザ関数またはシグナル関数を指定することができます。_break_ 変数を 1 に設定するとプログラムの実行を停止することができます。

µVision4 は、実行ブレークポイント、条件ブレークポイント、アクセスブレークポイントの 3 タイプのブレークポイントを認識します。µVision4 では、以下の規則に従って各ブレークポイントを分類しています。

  1. メモリアクセスモード(READ、WRITE、または READWRITE)が指定されている場合、ブレークポイントはアクセスブレークポイントになります。
  2. 指定された式が単純なアドレスの場合、ブレークポイントは実行ブレークポイントになります。
  3. 指定された式をアドレスに変換できない場合、ブレークポイントは条件ブレークポイントになります。

以降では、ブレークポイントのタイプについて説明します。

実行ブレークポイント

実行ブレークポイントは、指定したコードアドレスに到達したときに、プログラムの実行を停止するか、コマンドを実行します。実行速度は実行ブレークポイントの影響を受けません。

コードアドレスは、命令の最初のバイトに指定する必要があります。命令の 2 バイト目または 3 バイト目に実行ブレークポイントを設定すると、ブレークポイントに到達しなくなります。

コードアドレスの実行ブレークポイントは、一度だけ指定できます。何度も定義することはできません。

条件ブレークポイント

条件ブレークポイントは、指定した条件式が true の場合にプログラムの実行を停止するか、コマンドを実行します。条件式は、各アセンブリ命令の後で再計算されます。条件式の複雑さに応じて、プログラムの実行速度が大幅に低下することがあります。実行速度は、条件ブレークポイントの数によっても影響を受けます。

条件ブレークポイントは、式により任意の条件を計算できるため、最も柔軟なタイプのブレークポイントです。

アクセスブレークポイント

メモリアクセスブレークポイントは、指定したアドレスが読み出されるか、書き込まれるか、アクセスされた場合、または指定したアドレスが特定の値で読み出されるか、書き込まれた場合に、プログラムの実行を停止するか、コマンドを実行します。アクセスの式は指定したアクセスイベントの発生時にそのアクセスイベントでのみ評価されるため、プログラムの実行速度がメモリアクセスブレークポイントによって大幅に影響を受けることはありません。

メモリアクセスブレークポイントに指定する式は、メモリアドレスとメモリタイプに変換する必要があります。メモリアクセスブレークポイントには、次の規則が適用されます。

  1. メモリアクセスブレークポイントに使用される式は、一意のメモリタイプとする必要があります。複数のオブジェクトを含む式は許可されていません。
  2. メモリアクセスブレークポイントの式では、少数の演算子(&、&&、<、<=、>、>=、==、および !=)のみを使用できます。

例えば、

BS WRITE time.sec                      /* Valid expression   */

上のブレークポイントは有効ですが、

BS WRITE time.sec + i0                 /* Invalid expression */

このブレークポイントは、2 つの値(timer.sec および i0)の合計がメモリタイプに変換されないため、無効です。

  • BreakList コマンドを使用してリストすると、メモリアクセスブレークポイントの先頭に READWRITE、または READWRITE が付きます。

次の例は、main 関数のアドレスに実行ブレークポイントを設定します。

>BS main

次の例は、timer0 関数のアドレスに実行ブレークポイントを設定します。timer0 が 10 回目に呼び出されると、ブレークポイントに達し、コマンド "MyRegs()" が実行されます。コマンドの実行後にプログラムの実行が継続されます。

>BS timer0,10,"MyRegs()"

次の例は、sindex シンボルに条件ブレークポイントを設定します。sindex が 8 と等しくなると、プログラムの実行が停止します。

>BS sindex == 8

次の例は、save_record 配列に条件ブレークポイントを設定します。save_record[5].time.sec が 3 回目に 4 以上になると、プログラムの実行が停止します。

>BS save_record[5].time.sec > 5, 3

次の例は、interval.min シンボルの READ アクセスにメモリアクセスブレークポイントを設定します。interval 構造体の min 要素または共用体が 3 の場合は、プログラムの実行が停止します。

>BS READ interval.min == 3

次の例は、savefirst シンボルの WRITE アクセスにメモリアクセスブレークポイントを設定します。savefirst の書き込み後に savefirst が 5 でアキュムレータ(acc)が 0x12 になった場合に、プログラムの実行が停止します。

>BS WRITE savefirst == 5 && acc == 0x12

ブレークポイントは、[ブレークポイント](Breakpoints)ダイアログでも定義することができます。このダイアログは、メインメニューの[デバッグ](Debug)→[ブレークポイント...](Breakpoints...)から開きます。

  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.