sw_operationプログラムのデバッグで苦労した
Raspi-PICcoloはPic-coloのRaspi搭載モデルです。
秋月電子のRaspi用ユニバーサル基板にRaspi-PICcoloを組んでみました。
これを使って、プログラムの試作を進めています。
先ずは基本の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操作プログラムの完成です。
やれやれ