アプリ版:「スタンプのみでお礼する」機能のリリースについて

PIC16F1939では setup_wdt(WDT_128S) のように実行中にウォッチドック時間を変更できました。

現在、CCSのPCHでコンパイルしています。
PIC18LF46K22で同様に変更するにはどのようにしたらよいのでしょうか。
#fuse で WDT1~WDT32768まで設定して setup_wdt(WDT_ON)で固定的に
動作させることは出来ますが実行中に変更する方法がわかりません。
CONFIG2H (0x300003) を変更すればよいと思いますが #BYTE ではアクセス出来ないようです。

A 回答 (1件)

回答がないようなのでPICのC言語には詳しくありませんが軽く調べた範囲で回答します。


#BYTEというのはどうもレジスタに書き込むための指示のようですが、CONFIGはレジスタではないので書けません。
Flashメモリに書き込む方法を使う必要があります。なお書き込みには数ミリ秒かかりその間CPUは停止します。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
結果からご報告します。
問題は取り合えず解決しました。
CCSでしたら

bytecBuf[14];
read_configuration_memory(cBuf, sizeof(cBufL)); //50us(4MHz)
cBuf[3]=0x03 | 0x04; //0x04 - 0x3C
write_configuration_memory(cBuf, sizeof(cBuf)); //50ms(4MHz)
のように
read_configuration_memory および write_configuration_memory により
必要な部分を書き換えて書き戻すことで変更できました。
ただし、書き込みに4HMzClockで50msも要するためそれより短い設定にすると正常に
動作しなかったりウォッチドックが効いてしまいました。

そこでそれまでは #fuses に WDT_SW が無かったため
#fuses  ***,WDT_SW, WDT1,***
のように WDT1 で4ms としソフトウェア制御で必要な時間を得ることとしました。
ソフトウェア制御のWDT_SW を追加することで
write_configuration_memory による長時間処理も問題はなくなるでしょう。
しかし、Flash書き込みだとすると頻繁な書き込みは寿命問題がありますので
結果的には書き換えはやめることにしました。

お礼日時:2014/02/12 12:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!