ESP32[10] Watch Dog Timer 番犬
Watch Dog Timerはソフト処理が何処かでループしたり想定より遅くなった場合に、強制的にソフトリセットをかける機能です。個人的には、そんな時は既にハードウエアに異常があるので、何回ソフトリセットしても効果がないという意見ですが、リセットをかけることで気が付くこともあるかなと思い入れてみました。起動時にBEEPオンを出すと気が付きやすいかもしれませんね。
Watch Dog Timer は Timer なのでTimerの使い方と同じです。
// SAMPLE hw_timer_t * wd_timer = NULL; //watch dog timer 初期化 volatile int wdtTimeout = 3000; void setup(){ wd_timer = timerBegin(1, 80, true); //timer 1, div 80 他のタイマーと被らないように、1にしてます。 timerAttachInterrupt(wd_timer, &resetModule, true); //attach callback timerAlarmWrite(wd_timer, wdtTimeout * 1000, false); //set time in ms timerAlarmEnable(wd_timer); //enable interrupt } void loop(){ timerWrite(wd_timer, 0); //reset timer }
タイマーの起動はsetup関数の最後に入れるのがいいと思います。また、この設定では3秒以内にタイマーをリセットしないとソフトウエアリセットがかかるので、loop関数の最後でタイマーをリセットしてあげます。