リセット要因
マイクロコントローラがなぜ再起動したかを示すステータスフラグ。現場の機器が突然最初からやり直したとき、唯一の目撃者となる。
多くのマイクロコントローラには、要因ごとに1ビットを割り当てたレジスタがある。パワーオンリセット、ブラウンアウト、外部リセットピン、ソフトウェアリセット、ウォッチドッグなどだ。STM32では RCC_CSR にあり、ESP32では esp_reset_reason() で取得できる。フラグは再起動をまたいで残り、ファームウェアがクリアするまでセットされたままになる。
正しい作法は、起動の早い段階でレジスタを読み、ログに残すか報告し、そのうえでクリアすることである。これを怠ると、10分ごとのウォッチドッグリセットが、誰かが電源ケーブルを引き抜いたのと見分けがつかなくなる。よく付け加えられるのが、リセットでゼロクリアされないRAM上のカウンタだ。ウォッチドッグによる再起動が3回続いたら、ファームウェアはセーフモードに入るか、以前のイメージに戻る。