PICkit3の夏バテ対策を見つけた
現在の気温は27度。久しぶりに涼しい朝を迎えています。お陰様でPICkit3も好調です。
気温が30度を越すとPICkit3の調子がおかしくなる(<==夏バテと呼んでる)のですが、最近頻発するのが”A tool request has been waiting for・・・”というエラーです。
デバッグの最中にPICkit3の不具合で作業を中断するのは、(『精神の鍛練を心掛ける』とは言え)やっぱり効率が悪く、なかなかデバッグが進みません(<==言い訳)。
調べてみると、これはMPLABXのバグらしく、Versionを3.55に戻すと良くなるのだそうです。MPLABXのArchive(ここ↓)から3.55を持ってきて早速試してみました。
Downloads Archive | Microchip Technology Inc. | Microchip Technology Inc.
昨日の午後から3.55に替えたのですが、”A tool request has been waiting for・・・”というエラーは出なくなりました。
(パチパチパチ~ )
先達の知恵、おそるべし!(同様に、このblogの情報が少しでも皆さんのお役に立つことを願います。)
デバッグ作業がようやく進みだしました。
RUNコマンドを送ると、指定した関数が走り出す・・・よし
BREAKコマンドを送ると、指定した関数を抜けてBreak_Loopが走り出す・・・よし
RESTARTコマンドを送ると、再び指定した関数が走り出す・・・よし
STOPコマンドを送ると、Main_Loopに戻る・・・よし
実は、関数の実行に問題が見つかって、BREAKコマンドを送っていないのにBreak_Loopが走ったり、STOPコマンドを送っていないのにMain_Loopに戻ってしまったり・・・その不具合のデバッグをしていました。原因は、『割り込み発生時に行われるレジスタ退避』に関して私の理解が不足していたことです。
以下マニュアルの抜粋
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
4.5 内容保存機能
割り込み動作に遷移する際、復帰時の PC アドレス値がスタックに保存されます。また、次に示すレジスタ値も自動的にシャドウ レジスタに保存されます。
• W レジスタ
• ステータス レジスタ (TO および PD を除く)
• BSR レジスタ
• FSR レジスタ
• PCLATH レジスタ
割り込みサービス ルーチンから通常動作に戻るとき、自動的にこれらのレジスタ値が回復されます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーー
割り込みから戻るときに、comm_main関数を呼び出したため、 ユーザ・プログラムへ戻ったときに上記レジスタの値が変化していました。ユーザ・プログラムの実行中もコマンド操作を可能にするための処置だったのですが・・・
少し不便ですが、ループ処理を伴うユーザ・プログラムは『ループ処理に所定の関数呼び出し(break関数)を加える』という条件を付けて、この問題の解決を図ることにしました。(<==ちょっと残念!)
次は、ユーザ・プログラムにBREAKポイントを設定してみます。