プログラムは動いたが・・・・ 途中でフリーズすることがある |
不具合 PIC16F877を使ったモールス符号発生器(キーヤー)で特定のモールス符号例えば ・−・−・− とか −・−・− などの符号を出すとフリーズしてしまう。 PIC18F452にそのプログラムを移植したら上の問題は解決したが、連続28回 長点 − を出し続けるとやはりハングアップしてしまう。 原 因 プログラムの構成が悪く スタックレベルを超えてしまう ことがあった。 1)ある動作をするプログラムの後に、いくつかのサブルーチンを書いた。そのプログラムの末尾は GOTO で それらのサブルーチンを飛越えていく。 2)そのプログラム中でいくつかのサブルーチンを CALL するがそのサブルーチンでは 条件により 他のプログラムへ GOTO で行ってしまい、CALL したところに戻らないことがある。 3)PIC16F877の ハードウエアスタックレベルは 8、 PIC18F452 では 32 ある。 解 決 スタックレベルが少なくなるようにメインプログラムの中に サブルーチン化したいくつかのプログラムを入れた。 ココまで書けば、ナンダそんなことかと言われるが プログラムとしては一応動いていたし、9ポイント活字で A4用紙50頁に及ぶプログラムなのでなかなか原因がわからなかった。 毎日プログラムを調べていたわけじゃないが 2ヶ月間悩んだ。 ばか馬鹿しいけど うれしい。 |
PIC目次へ トップページへ |