~ 問題 ~
先日購入した Arduino MEGA2560 を長期稼働させていると定期的にハングアップしている。デバッグで Serial 出力しているので位置は特定できる。どうもウォッチドッグタイマ(以下WDT)が異常のようだ。
WDTリセットがかかるタイミングで 必ずハングする 。プログラムを見てもおかしいところは見当たらない。というのもWDTカウント開始とWDTカウントクリアしか関数がない。 リセットボタンを押してもハングしたまま 。とても困る。
~ 答え合わせ ~
実は純正品 Arduino ではハングしない。コピー品がまずい。しかしハードウェアコンパチであるので性能差はない。
原因は AVRマイコン の方にある。実はこいつ WDTリセットがかかった後、WDTカウント解除しない 。純正品のブートローダーは上手い具合に起動と同時にWDTカウント解除してくれていたのだ。
ブートローダーは Arduino がもう一台あれば Arduino IDE から更新できる。さあ書き換えよう。
~ 余談 ~
Arduino MEGA2560 がとても高価なためサインスマートから購入して使っていた。安い。今度は Arduino UNO の CH340 のUSBシリアル通信チップが載ったバージョンだ。安すぎる。
異常系のテストをあれほどしておけと...