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関数の最後でタイマーをリセットしてあげます。