M5Stackを動かしていたら、一定時間でリセットしてしまう件
とてーも初歩的なミス集ですが、初心者で悩んで抜け出せない場合の手助けになればと。。。
事の始まり
なんかですね、そんなコード書いていないのにM5Stackがリセットしてしまったってこと、経験無いですか??
そんなとき、可能性があるところとして、wdtがはたらいてしまっているという可能性があるようです。
対応の手順として、まずシリアルモニターを繋ぎますと・・・
[IGuru Meditation Error: Core 1 panic'ed (Interrupt wdt timeout on CPU1)
みたいな文言が出ている場合、はい、wdt働いてます。
(実際はこの文言の後に続けてCPU0とCPU1のそれぞれのメモリマップとか出力されてくるので、何かやらかしている事はすぐ実感できます)
こういう原因として、なかなか戻ってこない重い割り込み処理などをしているとそうなることがあるそうです。
でも、わたくし、割り込み処理じゃないのにこれ出ました。。。
私の経験として2個ほど・・・
1個目 「無い配列を参照してしまった」
これはまぁ、起こった時点で「あ、ダメじゃん」ってすぐ気が付くので特に悩みませんね。
2個目 「M5のLCDに、millis()を表示させた」
これはですね、正確にはmillis()を文字列に変換しないままStringの配列に放り込んで、順番に表示させてたのが原因でした。
これは悩みました。
だってエラー出てなかったし。。。
でも、LCDにはmsの時間は出ずに文字化けしまくるので、「はて?そんなバグるほどなにもコード書いていないとおもふ??」なんて考えこんでしまいました。
まとめ
結局のところ、データ形に適した扱いをしてないのが原因で、意図しない領域を参照してフリーズしてしまっただけですね。
そもそも私のようなケアレスミスラー的には、「コンパイラさん、何故、文句言ってくれなかったの!?」という他力本願を。。。←ダメな人