C でコード化された組み込みプロジェクトに megaAVR を使用しています。明らかな理由もなくデバイスがクラッシュすることがあります。コードに論理エラーがないことを意味します。
私の質問は、そのようなクラッシュが発生した場合に確認すべきことは何ですか?
私の提案: スタック - スタックの使用量が多すぎます。メモリ - 該当なし、malloc を使用しません。
もっと?どのような種類の AVR 固有のものでしょうか?
AVR MCU がクラッシュします [...]。何を確認すればよいですか?
MCU は「クラッシュ」しません。ハードウェア リセット条件のいずれかが満たされ、定義されたリセットが発生するか、ソフトウェア関連の問題によって未定義の動作が発生し、完全なリセットが発生したように見えることがあります。
実際にリセットが発生し、潜在的な原因があるかどうかを判断してください。最初のステップは、MCU 制御およびステータス レジスタ MCUCSR を評価することです。最新のリセットのソースに関する情報を提供します。
リセット フラグを使用してリセット条件を識別するには、プログラムのできるだけ早い段階で MCUCSR を読み出してリセットする必要があります。別のリセットが発生する前にレジスタがクリアされた場合、リセットフラグを調べることでリセットの原因を見つけることができます。
ソースのリセット:
小切手: