デバック
■MPLAB X Simulatorによるデバック
操作・設定 | PC画面 |
@ MPLAB X のプロジェクトファイルのプロパティの ダイアログを開く A Hardware Tool欄で Simulator を選択して 右下の Applyボタンをクリックする。 |
![]() |
C Categoreis 欄 のPickit3(ICD 3: ICD3の場合)が Simulator に変わる D Option categoriesのOscillator を選択して ターゲットのInstruction Frequency を入力する |
![]() |
E メニューの[Debug] → [Debug Project](または、 Debug Project MainProgramアイコン ![]() での再コンパイルを行う。 再コンパイルが行われると同時にアイコン欄デバック用の アイコンが表示される |
![]() |
F デバックが実行中となった状態となるので、メニューの [Debug] → [Pause](または、 ![]() デバック停止させる |
![]() |
G デバッグモードを終了して、通常のモードに戻りたい場合は Finish Debugger Session アイコン ![]() |
![]() |
■ デバック実行要領
★ シュミレータによるデバックは、Pickit やICDのターゲットへの接続有無にかかわらず実行できる。
★ do...while ループは Continueアイコンを使って実行した場合、(デフォルトでは)2回繰り返したあとにループを抜けるようである。
操作 | PC画面 |
@ブレークポイントは デバッガーモードでない通常のモードに 於いて設定する。 デバッカーモードで設定するとブレークポイントを設定しようと するコマンドの行が灰色となりブレークポイントの動作を実行しない |
![]() |
A プログラムを変更したらデバッグ実行に先立ち、 必ずデバックモードで再コンパイル( ![]() おこないます。 |
![]() |
Bあらかじめ チェックしたい項目が表示されるウォッチウィンドウや ストップウォッチウィンドウなどを開いておく。プログラムの最初からの 動作をチェックしたい場合は リセット(リセットアイコン ![]() おこないます。 |
![]() |
C Continueアイコン![]() 前の行までプログラムを実行する。プログラムが実行され ブレークポイントの行が 赤色から緑色に変わる。 緑色の 行は次の操作によってプログラムが開始される行をあらわ します。 尚、ウォッチウィンドウには、プログラムが停止した状態の 変数やレジスタの値などが表示されている。右の画面では Num1++;が 実行されNum1が0x000000000らインクリメント されて 0x00000001になっていることが表示されている。 また、値が変化しているので”赤色”となっています。 |
![]() |
D プログラムをサブ関数には入らないで1行だけ実行する場合は Step Over アイコン ![]() Num++;が実行され ウォッチウィンドウのNum2が 0x00000000から 0x00000001に変化しています。 尚、Step into アイコン ![]() づつ実行することができます。 |
![]() |
E マウスカーソルでも ブレークポイントと同じように停止行を 設定できます。 カーソルを停止させたいコマンドの前にセットして Run to Cursorアイコン ![]() 右図ではNum5++;の前にカーソルをセットして実行しようと しているところです。 |
![]() |
E 右図はun to Cursorアイコン![]() その他に、カーソル操作で以下ができます。 ★ カーソルを実行開始したいコマンドの前にセットして Set PC at Cusorアイコン ![]() から コマンドを実行開始できます。 ★ Focus Cursor at PCアイコン ![]() 開始行の先頭にカーソルを移動することができます。 |
![]() |
操作 | PC画面 | ||
メニューバーの[Windows] --> [Debugging] --> [Watches]を クリックすると ウォッチウィンドウが開きます |
![]() |
||
Name欄のアイコンをダブルクリックするとキーボードから 文字を入力できるようになるので ウォッチしたい変数を 入力します。 入力する方法には MPLABX上の ソースコードにある 変数をドラック&ドロップしても変数をセットできます。 |
![]() |
||
ウォッチできる項目として、PICのレジスタもセットできます。 Configulation Register はセットできないようです。 |
![]() |
■ 実行時間の測定
操作 | PC画面 | ||
@メニューバーの[Windows] --> [Debugging] --> [Stopwatch]を クリックすると ストップウォッチウィンドウが開きます Aメニューバーのリセットアイコン ![]() main( )の先頭に移動します。 |
![]() |
||
B一度Finsh Debug Sessionアイコン![]() C測定したいの前後に ブレークポイントを設定します。 ブレークポイントが設定されると命令の行は赤くなります。 この例では delayms(500)の実行時間を測定します。 |
![]() |
||
DContinueアイコン![]() 前の命令までプログラムを実行します。 |
![]() |
||
E次にもう一度Continueアイコン![]() 命令を実行します。 左はdelay_ms(500)命令を実行中の画面です。 Simulator Debuggerでの実行時間はPCの処理速度によりますが 実際の実行時間より大変長い時間がかかります。このdelay(500) 命令の実行時間は実に160sec(2分40秒)もかかりました。 ターゲットボードでの実行時間500msecの実に320倍もの 時間がかりました。 |
![]() |
||
F測定結果が以下のように表示されています。 Target halted. Stopwatch cycle count = 90016630 (450.08315 ms) ★ 90016630はdelay_ms(500)の実行サイクル数です。 450.08315msが delay_ms(500)の実行時間です。ターゲットボードのLEDフリーランで この時間をデジタルシンクロで測定するとこの500msecです。 実機とSimulatorとでは若干(かなり)の差があるようです。 |
![]() |
操作 | PC画面 |
メニューの[Window] --> [Debugging] --> [Disassembly]を クリックすると逆アセンブリルリストが表示されます。 |
![]() |
■ ピンへの入力
操作 | PC画面 | |
@ メニューバーの[windows] --> [Simulator] -->{Stimulus]を クリックすると Stimulusウィンドウが 開きます。 AAsynchronousタブを選択してPin欄から信号を 入力するピンを選択します。 |
![]() |
|
RB = 0 を 入力する 場合 |
Continueアイコン![]() 前まで 実行を進めます |
![]() |
Step Over アイコン![]() 命令まで実行を進めます。 Stimulus ウィンドウの Actionが”Set Low” 側のアローアイコン ![]() |
![]() |
|
次に Step Over アイコン![]() 実行が 次の命令 LATCbits.LATC14 = 1; を 飛び越えてその次の命令にジャンプします。 |
![]() |
|
RB = 1を 入力する 場合 |
Continueアイコン![]() 前まで 実行を進めます |
![]() |
Step Over アイコン![]() 命令まで実行を進めます。 |
![]() |
|
Stimulus ウィンドウの Actionが”Set High” 側のアローアイコン ![]() RB = 1の場合の命令 LATCbits.LATC14 = 1; に移ります |
![]() |
|
Step Over アイコン![]() 分岐命令後の共通の命令に移ります。 |
![]() |
|
・ シュミレータモードの場合は、プロジェクトファイルのプロパティでシュミレータモードに設定変更しましたが、 ターゲットボードでのデバッグに於いては通常の書込みモードのままでデバックを行います。
・ 最大のブレークポイント数は 2個です。
■ ICD 3 によるデバック
・ シュミレータモードの場合は、プロジェクトファイルのプロパティでシュミレータモードに設定変更しましたが、 ターゲットボードでのデバッグに於いては通常の書込みモードのままでデバックを行います。
・ 最大のブレークポイント数は 1000個です。