プログラムは動いたが・・・・        
     途中でフリーズすることがある

不具合

PIC16F877を使ったモールス符号発生器(キーヤー)で特定のモールス符号例えば ・−・−・− とか −・−・− などの符号を出すとフリーズしてしまう。

PIC18F452にそのプログラムを移植したら上の問題は解決したが、連続28回 長点 − を出し続けるとやはりハングアップしてしまう。

原 因
プログラムの構成が悪く
 スタックレベルを超えてしまう ことがあった。

1)ある動作をするプログラムの後に、いくつかのサブルーチンを書いた。そのプログラムの末尾は GOTO で それらのサブルーチンを飛越えていく。

2)そのプログラム中でいくつかのサブルーチンを CALL するがそのサブルーチンでは  条件により 他のプログラムへ GOTO で行ってしまい、CALL したところに戻らないことがある。

3)PIC16F877の ハードウエアスタックレベルは 8、 PIC18F452 では 32 ある。

解 決
スタックレベルが少なくなるようにメインプログラムの中に サブルーチン化したいくつかのプログラムを入れた。

ココまで書けば、ナンダそんなことかと言われるが プログラムとしては一応動いていたし、9ポイント活字で A4用紙50頁に及ぶプログラムなのでなかなか原因がわからなかった。

毎日プログラムを調べていたわけじゃないが 2ヶ月間悩んだ。 ばか馬鹿しいけど うれしい。
PIC目次へ        トップページへ