Atmel处理器已复位,但MCUSR中没有指示复位源

问题描述 投票:0回答:4

短篇小说:

那些复位条件是什么,它们不会在ATmega处理器的MCUSR中置位,但仍会引起复位?

长话:

我在ATmega168中使用了掉电检测,并且在我的代码中有一个地方可以处理它。如果我的系统断电,则电容器会使其保持在电源不足水平之上约半秒钟,并且当我恢复电源时,电源不足处理例程将成功运行。 (我检查了MCUSR中的掉电位。)

但是,当我缓慢降低系统电压并缓慢地将其返回时,处理器将重新启动,并且掉电处理例程无法运行:MCUSR为零!!! (我通过DebugWire使用外部调试器进行检查。)

什么原因造成的?如果还有其他事情,例如看门狗被意外启用(我不使用它,并且在启动时将其禁用),则MCUSR中至少会有一些东西。

但是不,它既不是看门狗复位(位3),掉电复位(位2),外部复位(位1)或上电复位(位0),所以what

做了如果以上都不是,导致重置?

另一个奇怪的事情:在这种情况下,在某些情况下,重置会定期发生,在MCUSR中始终为零。

否则,当这种情况不发生时,系统将始终正常运行。

编辑:

我在其他地方找不到结论性的答案,堆栈溢出会导致什么样的复位,或者导致类似的软件相关错误?也许这些情况可能会使处理器复位,而使MCUSR独处?我以为这样的情况只会破坏RAM甚至是程序计数器,但不会导致重置。

简而言之:那些复位条件是什么,这些复位条件不会在ATmega处理器的MCUSR中置位,但仍会引起复位?长话大说:我在ATmega168中使用掉电检测,并且...

c assembly embedded atmel
4个回答
3
投票

堆栈溢出不会引起复位。堆栈溢出纯粹是一种软件情况,可能会导致不确定的行为。堆栈溢出可能会导致许多很多症状。例如:

  1. 行为无明显变化

1
投票

您是否尝试过使用BODLEVEL保险丝,如果有什么不同?


0
投票

如果您使用avrgcc,请尝试以下操作:


0
投票

我已经遇到引导加载程序清除了MCUSR的情况。

© www.soinside.com 2019 - 2024. All rights reserved.