デバック


■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 アイコンをクリックするとサブ関数の中も1行
 づつ実行することができます。
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アイコンをクリックして、 最初の命令delay_ms(500)の
前の命令までプログラムを実行します。
E次にもう一度Continueアイコンをクリックして delay_ms(500)
命令を実行します。 左は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 アイコンをクリックすると
分岐命令後の共通の命令に移ります。






■ PICKit 3 によるデバック

   ・ シュミレータモードの場合は、プロジェクトファイルのプロパティでシュミレータモードに設定変更しましたが、 ターゲットボードでのデバッグに於いては通常の書込みモードのままでデバックを行います。
   ・ 最大のブレークポイント数は 2個です。




■ ICD 3 によるデバック

   ・ シュミレータモードの場合は、プロジェクトファイルのプロパティでシュミレータモードに設定変更しましたが、 ターゲットボードでのデバッグに於いては通常の書込みモードのままでデバックを行います。
   ・ 最大のブレークポイント数は 1000個です。