短篇小说:
那些复位条件是什么,它们不会在ATmega处理器的MCUSR
中置位,但仍会引起复位?
长话:
我在ATmega168中使用了掉电检测,并且在我的代码中有一个地方可以处理它。如果我的系统断电,则电容器会使其保持在电源不足水平之上约半秒钟,并且当我恢复电源时,电源不足处理例程将成功运行。 (我检查了MCUSR
中的掉电位。)
但是,当我缓慢降低系统电压并缓慢地将其返回时,处理器将重新启动,并且掉电处理例程无法运行:MCUSR
为零!!! (我通过DebugWire使用外部调试器进行检查。)
什么原因造成的?如果还有其他事情,例如看门狗被意外启用(我不使用它,并且在启动时将其禁用),则MCUSR
中至少会有一些东西。
但是不,它既不是看门狗复位(位3),掉电复位(位2),外部复位(位1)或上电复位(位0),所以what
做了如果以上都不是,导致重置?另一个奇怪的事情:在这种情况下,在某些情况下,重置会定期发生,在MCUSR中始终为零。
否则,当这种情况不发生时,系统将始终正常运行。
编辑:
我在其他地方找不到结论性的答案,堆栈溢出会导致什么样的复位,或者导致类似的软件相关错误?也许这些情况可能会使处理器复位,而使MCUSR独处?我以为这样的情况只会破坏RAM甚至是程序计数器,但不会导致重置。
简而言之:那些复位条件是什么,这些复位条件不会在ATmega处理器的MCUSR中置位,但仍会引起复位?长话大说:我在ATmega168中使用掉电检测,并且...
堆栈溢出不会引起复位。堆栈溢出纯粹是一种软件情况,可能会导致不确定的行为。堆栈溢出可能会导致许多很多症状。例如:
您是否尝试过使用BODLEVEL保险丝,如果有什么不同?
如果您使用avrgcc,请尝试以下操作:
我已经遇到引导加载程序清除了MCUSR的情况。