PICキット スタートマニュアル7
デジタルI/O制御の基本プログラミング その3
FullColorLEDを制御してみる
(シミュレーション・デバッガ)編
MPLAB X IDE(Ver3.51) 起動
MPLABX IDEのデバッキング機能や方法は多機能で、当局もまるで把握していません <(_ _)>
ここではとりあえず、アッセンブラでのシミュレーション・デバッグを行います。
使用するレジスタ類のデータを表示させながら、シミュレータで1ステップづつのコードの実行を行います。
この方法でも、概ねバグを潰せますが、プログラム内容によってはダメな場合も多々あります。
その場合は、インサーキット・デバッグ等を行うのも有効な方法です。
今回はインサーキット・デバッキングの方法までは行いません。(今回のプログラムではシミュレータで十分)
PICkit3を使用したインサーキット・デバッキングを行うには「PICkit3プログラマ・デバッガ・ユーザーズガイド」日本語版を参照してください。
さらに、XC8でのデバッグも行いません。(と言うより、当局自体がXC8での効率的なデバッグ方法が良く解かっていないのが本音です)
(1)シミュレーション デバッグの準備
1)プロジェクト オープン
前回作成したプロジェクト「PIC_START_PRG01」を開きます
すると、「PIC_START_PRG01.asm」もついでに開くと思いまが、開いてないならオープンします。
プロジェクトにソースファイルが登録されてない場合は「Source Files」に登録します。
2)MPLABX IDEの設定チェック
左下の「Dashboard」ウインドウの左側一番上Project Propertiesアイコンをクリック、
または全ウインドウ上部メニューバー「File」をクリック、そして、「Project Properties」をクリックして開きます。
実行速度設定
3)シミュレータ起動
①ツールバーのアイコンをクリックして、シミュレータを起動・実行させる
②メニューバーの「Window」の「Debugging」の「Watches」をクリック、Watchウインドウを開きます。
③Watchウインドウ下の「New Watch」をEnterして、必要なレジスタを登録・表示
④Watchウインドウ上のバーを右クリックして、必要な数値項目を選択
4)ステップ動作
下記の動作はコマンドバーのアイコンで行うか、メニューバー「Debug」をクリックしても、同じコマンドが表示されます。
①リセット
今の状態では動作したまんまですので、コマンドバーのシミュレータの「Pause」アイコンをクリック
同様に「Reset」アイコンをクリック、これで、リセットベクタに飛びます
②ステップ動作(Step In)
ステップ動作のアイコンをクリックすると、命令コードを1行ずつ実行します。
サブルーチンコールの実行は、そのサブルーチンに飛び、サブルーチン内を1行ずつ実行します。
実行の度に、レジスタの内容をチェックして、目的の動作を調べます。
③ステップ動作(Step Over)
命令コードを1行ずつ実行するのですが、呼び出すサブルーチンコールはすべて実行し、次の行へ行きます
そのサブルーチンの動作結果が調べられます。
MPLABX IDEのデバッキング機能や方法は多機能で、当局もまるで把握していません <(_ _)>
ここではとりあえず、アッセンブラでのシミュレーション・デバッグを行います。
使用するレジスタ類のデータを表示させながら、シミュレータで1ステップづつのコードの実行を行います。
この方法でも、概ねバグを潰せますが、プログラム内容によってはダメな場合も多々あります。
その場合は、インサーキット・デバッグ等を行うのも有効な方法です。
今回はインサーキット・デバッキングの方法までは行いません。(今回のプログラムではシミュレータで十分)
PICkit3を使用したインサーキット・デバッキングを行うには「PICkit3プログラマ・デバッガ・ユーザーズガイド」日本語版を参照してください。
さらに、XC8でのデバッグも行いません。(と言うより、当局自体がXC8での効率的なデバッグ方法が良く解かっていないのが本音です)
(1)シミュレーション デバッグの準備
1)プロジェクト オープン
前回作成したプロジェクト「PIC_START_PRG01」を開きます
すると、「PIC_START_PRG01.asm」もついでに開くと思いまが、開いてないならオープンします。
プロジェクトにソースファイルが登録されてない場合は「Source Files」に登録します。
2)MPLABX IDEの設定チェック
左下の「Dashboard」ウインドウの左側一番上Project Propertiesアイコンをクリック、
または全ウインドウ上部メニューバー「File」をクリック、そして、「Project Properties」をクリックして開きます。
実行速度設定
3)シミュレータ起動
①ツールバーのアイコンをクリックして、シミュレータを起動・実行させる
②メニューバーの「Window」の「Debugging」の「Watches」をクリック、Watchウインドウを開きます。
③Watchウインドウ下の「New Watch」をEnterして、必要なレジスタを登録・表示
④Watchウインドウ上のバーを右クリックして、必要な数値項目を選択
4)ステップ動作
下記の動作はコマンドバーのアイコンで行うか、メニューバー「Debug」をクリックしても、同じコマンドが表示されます。
①リセット
今の状態では動作したまんまですので、コマンドバーのシミュレータの「Pause」アイコンをクリック
同様に「Reset」アイコンをクリック、これで、リセットベクタに飛びます
②ステップ動作(Step In)
ステップ動作のアイコンをクリックすると、命令コードを1行ずつ実行します。
サブルーチンコールの実行は、そのサブルーチンに飛び、サブルーチン内を1行ずつ実行します。
実行の度に、レジスタの内容をチェックして、目的の動作を調べます。
③ステップ動作(Step Over)
命令コードを1行ずつ実行するのですが、呼び出すサブルーチンコールはすべて実行し、次の行へ行きます
そのサブルーチンの動作結果が調べられます。
画像03 「Project Properties」ウインドウ
「Categories」の「mpasm(Global Option)」をクリック
右欄の「Build in Absolute mode」のチェック欄にチェックが入っているか確認
入ってなければ、チェック欄をクリックしてチェックを入れます
「Categories」の「mpasm(Global Option)」をクリック
右欄の「Build in Absolute mode」のチェック欄にチェックが入っているか確認
入ってなければ、チェック欄をクリックしてチェックを入れます
画像05 シミュレータ起動
この画像が画像01のコマンドアイコン「Debug Project」をクリックして、ビルド
そしてシミュレータによる動作を始めた所
すると、シミュレータのコマンドアイコンが追加されています。
この画像が画像01のコマンドアイコン「Debug Project」をクリックして、ビルド
そしてシミュレータによる動作を始めた所
すると、シミュレータのコマンドアイコンが追加されています。
画像06 ウォッチ ウインドウを表示
デスクトップ上部のメニューバーの「Window」をクリック、
出てきた中で「Debugging」をポイントするとさらにメニューが表示、
その中の「Watches」をクリック、Watchウインドウを開きます
画像ではすでに各種レジスタが表示されています。
一番最初は、何も表示されていません
そこで、一番下の項目「Enter New Watch」をクリックして、Enterキーを押します。
すると、小さな「New Watch」ウインドウが開きます
デスクトップ上部のメニューバーの「Window」をクリック、
出てきた中で「Debugging」をポイントするとさらにメニューが表示、
その中の「Watches」をクリック、Watchウインドウを開きます
画像ではすでに各種レジスタが表示されています。
一番最初は、何も表示されていません
そこで、一番下の項目「Enter New Watch」をクリックして、Enterキーを押します。
すると、小さな「New Watch」ウインドウが開きます
画像07 New Watch ウインドウの表示
ここで、Watchウインドウに表示させるレジスタを選択します。
左の「Global Symbols」では定義した変数(汎用データRAMレジスタ)
右の「SFR’s」では「STATUS」レジスタ等のSFR
表示させる代表的なSFRは、
STATUSレジスタ、Wレジスタ、PORTA(C)レジスタ、BSR等
今回のプログラムでは、TMR0レジスタ
変数は、その時によりますが、
今回のプログラムでは、PWM変調用のP_PER等をすべて表示しています
ここで、Watchウインドウに表示させるレジスタを選択します。
左の「Global Symbols」では定義した変数(汎用データRAMレジスタ)
右の「SFR’s」では「STATUS」レジスタ等のSFR
表示させる代表的なSFRは、
STATUSレジスタ、Wレジスタ、PORTA(C)レジスタ、BSR等
今回のプログラムでは、TMR0レジスタ
変数は、その時によりますが、
今回のプログラムでは、PWM変調用のP_PER等をすべて表示しています
画像08 ウォッチウインドウ表示項目の設定
ウォッチウインドウ右上の設定アイコンをクリックすると左記画像の様に、
「Change Visible Columns」ウインドウが開きます。
ここれ、表示したい各レジスタの、表示方法項目を選択します。
ウォッチウインドウ右上の設定アイコンをクリックすると左記画像の様に、
「Change Visible Columns」ウインドウが開きます。
ここれ、表示したい各レジスタの、表示方法項目を選択します。
画像10 リセット
シミュレータ用コマンドアイコンの、
「Pause」アイコンをクリック、続いて
「Reset」アイコンをクリックして、リセットベクタに動作が移ったところの画像
これからおもむろに、
「Step Into」や「Step Over」アイコンをクリックしながら、
1行ずつデバッグしていきます・・・
これらの画像で示したデバッグ方法は基本だと思いますが、
この他色々なデバッグ用ウインドウがありますので、弄ってみると楽しいと思います。
TMR0のオーバーフロー割込みは、「Step Over」でサブルーチン実行中(主にウエイトが多い)に発生した場合、割込みルーチン(ISR)に飛ばない様です。
ISRに飛ばせたい場合は、TMR0値をFCH位に調整、「Step Into」で1行動作で飛びます。
シミュレータ用コマンドアイコンの、
「Pause」アイコンをクリック、続いて
「Reset」アイコンをクリックして、リセットベクタに動作が移ったところの画像
これからおもむろに、
「Step Into」や「Step Over」アイコンをクリックしながら、
1行ずつデバッグしていきます・・・
これらの画像で示したデバッグ方法は基本だと思いますが、
この他色々なデバッグ用ウインドウがありますので、弄ってみると楽しいと思います。
TMR0のオーバーフロー割込みは、「Step Over」でサブルーチン実行中(主にウエイトが多い)に発生した場合、割込みルーチン(ISR)に飛ばない様です。
ISRに飛ばせたい場合は、TMR0値をFCH位に調整、「Step Into」で1行動作で飛びます。