1
wdt_disable()を呼び出してウォッチドッグタイマーをオフにしようとすると、AVRがリセットされるのはなぜですか?
AVR ATtiny84Aでウォッチドッグシーケンスを無効にすると、タイマーには十分な時間が残っているはずですが、実際にチップがリセットされるという問題があります。これは一貫性がなく、多くの物理パーツで同じコードを実行しているときに発生します。毎回リセットされるものもあれば、時々リセットされるものと、決してリセットされないものもあります。 問題を実証するために、私は簡単なプログラムを書きました... 1秒のタイムアウトでウォッチドッグを有効にします ウォッチドッグをリセットします 白色LEDを0.1秒間点滅させます 白色LEDを0.1秒間点滅させた ウォッチドッグを無効にします ウォッチドッグの有効化と無効化の間の合計時間は0.3秒未満ですが、無効化シーケンスの実行時にウォッチドッグリセットが発生する場合があります。 コードは次のとおりです。 #define F_CPU 1000000 // Name used by delay.h. We are running 1Mhz (default fuses) #include <avr/io.h> #include <util/delay.h> #include <avr/wdt.h> // White LED connected to pin 8 - PA5 #define WHITE_LED_PORT PORTA #define WHITE_LED_DDR DDRA #define WHITE_LED_BIT 5 // Red …