新しい開発環境でコンパイル→プログラムがシームレスにできるようになり、
時刻合わせ、アラーム設定などの機能を追加しています。
ところがプログラムが少しづつ大きくなったある時点から、実行時に下のように一部のセグメントが
常時点灯したままになる現象が発生してしまいました。
はじめはICのピンがラッチアップか何かで破壊したのではないかと思いましたがもう一台のハードで
実行させても同じ。
このセグメントが共通で接続されているのは内蔵LCDドライバのSEG1ピンですが、このピンは同時に
OSC2/CLKOUT/VCAPの機能もマルチプレクスされています。
さてはと思い、確認するとやはりSEG1のピンにはシステムクロックと同じ方形波が常時出力されており、
このためセグメントが点灯したままになったようです。
つまり「SEG1」ピンが「CLKOUT」に機能設定されてしまったのですが、これが何故かということです。
CLKOUT設定はCONFIGビットで指定され、コーディング上はきちんと設定しています。
ここを CLKOUTEN=ON にすると現象が消え正常動作するようになりますが、意味が逆のような気がするし
しかも、ある時点までは想定通りの CLKOUTEN=OFF でOKだったわけです。