denshikobo’s blog

PICプログラミングやPCの操作で感じた日々の由無し事を綴ります

sw_operationプログラムのデバッグで苦労した

Raspi-PICcoloはPic-coloのRaspi搭載モデルです。

秋月電子のRaspi用ユニバーサル基板にRaspi-PICcoloを組んでみました。

f:id:denshikobo:20170928130204j:plain

 

これを使って、プログラムの試作を進めています。

先ずは基本のLチカプログラムから、これはすんなり動いて次はSW操作プログラムです。タクトSWの短押し一回で1点灯、短押し二回で2点灯、長押し一回で1秒間隔の点滅、長押し二回で2秒間隔の点滅を繰り返すというものです。動いたように見えたのですが・・・途中で動作が止まってしまいます。ちょっと嫌な不具合です。orz

 

いつもなら、PICkit3でプログラムの動作を追いかける所です。しかし、ここはPICkit3に頼らず、Raspi-PICcoloだけでデバッグできることを示さなければなりません。

 

しかし、何をどうすれば良いのか?PIc-coloに加えたいデバッグ機能が色々でてきましたが・・・

SW操作プログラムのベースはLチカプログラムです。先ずはLチカプログラムに戻って、そこに追加した機能を順番に試してみることにしました。

MainループのLED制御は初期状態では1点灯の反復です。これはLチカプログラムとほとんど同じなのですが、念のため確認しておきます。問題なし。

次は10msインターバルで行う、SWの状態読み取りです。これも問題なし。最後に残ったSW操作の判定処理・・・ん、不具合再現!

 

不具合箇所が絞られました。ソースコードを見直します。

100msインターバルでSW操作の判定を行っているのですが・・・ あ!

中でdi()ei()を使う関数をms_timer割り込みの中から呼び出していました。orz

 

関数の呼び出しをMainループに移すと・・・

ビンゴ~

動きました。SW操作プログラムの完成です。

 

やれやれ