短編小説:
ATmega プロセッサのビットを設定しないMCUSR
が、それでもリセットを引き起こすリセット条件は何ですか?
長い話:
私は ATmega168 でブラウンアウト検出を使用しており、コード内にそれを処理する場所があります。システムの電源が失われた場合、コンデンサが約 0.5 秒間ブラウンアウト レベルを超えた状態を維持し、電源を回復すると、ブラウンアウト処理ルーチンが正常に実行されます。(ブラウンアウトビットをチェックしMCUSR
ます。)
ただし、システムの電圧をゆっくりと下げてゆっくりと元に戻すと、プロセッサが再起動し、ブラウンアウト処理ルーチンが実行されません:MCUSR
ゼロです!!! (DebugWire 経由で外部デバッガを使用して確認します。)
何が原因でしょうか? ウォッチドッグが誤って有効になっているなど、それ以外の場合 (私は使用せず、起動時に無効にします)、MCUSR
..
しかし、いいえ、それはウォッチドッグ リセット (ビット 3)、ブラウンアウト リセット (ビット 2)、外部リセット (ビット 1)、またはパワーオン リセット (ビット 0)のいずれでもありませんでした。上記??
もう 1 つの奇妙な点は、このような状態の後、場合によっては定期的にリセットが発生し、常に MCUSR の値が 0 になることです。
それ以外の場合、これが発生しない場合、システムは常に完全に実行されます。
編集:
他の場所で決定的な答えを見つけることができませんでした.スタックオーバーフローまたは同様のソフトウェア関連のエラーはどのような種類のリセットにつながりますか? おそらく、これらはプロセッサをリセットし、MCUSR を放置する可能性のある条件でしょうか? このような状況は、RAM またはプログラム カウンターを破損するだけで、リセットは発生しないと思いました。