短篇小说:
那些不会设置MCUSR
ATmega 处理器的位但仍会导致复位的复位条件是什么?
长篇大论:
我在 ATmega168 中使用掉电检测,并在我的代码中有一个位置来处理它。如果我的系统断电,一个电容器会将其保持在掉电水平以上约半秒,当我恢复供电时,掉电处理程序成功运行。(我检查了中的掉电位MCUSR
。)
但是,当我慢慢降低系统电压并慢慢恢复时,处理器重新启动,掉电处理例程不运行:MCUSR
为零!!!(我通过 DebugWire 使用外部调试器来检查它。)
什么会导致这种情况?如果是其他东西,比如意外启用了看门狗(我不使用它,并在启动时禁用它),那么MCUSR
.
但是不,它既不是看门狗复位(第 3 位)、掉电复位(第 2 位)、外部复位(第 1 位),也不是上电复位(第 0 位),那么如果两者都不是,是什么导致了复位以上??
另一个奇怪的事情是:在这种情况下,在某些情况下会周期性地发生复位,MCUSR 中的值总是为零。
否则,如果不发生这种情况,系统将始终完美运行。
编辑:
我在其他地方找不到结论性的答案,堆栈溢出或类似的与软件相关的错误会导致什么样的重置?也许这些是可能重置处理器的条件,让 MCUSR 独处?我认为这种情况只会破坏 RAM 甚至程序计数器,但不会导致重置。