2015-10-17 19:27 | カテゴリ:PIC応用回路
光明がさしかかっています!!

先日来、PICのプログラミングで、なかなか希望通りに動作しない問題が続いていました。
今日、その問題の解決の糸口らしきものが見えてきました。

PICプログラミングの問題点は、下記のものでした。

1)スイッチを急にパチパチ動かすと、PICがフリーズする。
2)LCDのメータを動作させるためにRS232信号を送信する部分をタイマールーチン内に記述すると
  プログラムが予期せぬ動作をして、LCDのメータ表示が誤動作する。

1)に関しては、その後、スイッチの番号を持ち帰るサブルーチンに、スイッチ番号を制限する部分を設けた事と、ADの取り込みを数msecおいて二度変換し、同じ値を得るまで、繰り返すと言うルーチンを追加して、かなり読み取り確度が上がりました。

しかし、2)に関しては、同じLCDへRS通信のサブルーチンを、メインの最初の所では上手く動作するのに、タイマールーチンの中では、動作しません。
同じルーチンなのに、です。

上手く行かない事態を繰り返していて、PICの開発環境のMPLAB-Xのコンパイル画面を何気なく見ていると、
「ハートウエアスタックを超えている」旨のメッセージが表示されていることに気づきました。
コンパイル自体は、正常終了していたので、今まで全く気づきませんでした。

XC8.jpg


要するに、PICにあるハードウエアスタック(確か記憶では、7か8段階しかなかったと思います)を超えてネスティングしているとの警告です。
これでは、PICが暴走するはずです。

プログラムを見てみると、自分のプログラムでのネスティングは、2-3段なのですが、「整数を文字列に変換する」内蔵関数を使用していますが、どうやらそれがスタックを多用しているようです。
念のため、その関数をコメントアウトして再度コンパイルしてみると、警告は出ませんでした。

原因がはっきりしましたが、この関数を使用しないわけには行かないので、他の部分でスタックを節約するように、再度プログラミングしなければなりませんので、ちょっと大変です。


【ジャンル】:趣味・実用 【テーマ】:鉄道模型
コメント(4)

管理者のみに表示する