关于看门狗定时器

5

请问在启动/引导代码执行期间,我们应该启用还是禁用看门狗?我的朋友告诉我通常在引导代码中禁用看门狗。有人能告诉我这样做的优缺点吗?

8个回答

4

这真的取决于你的项目。看门狗旨在帮助确保程序在执行代码时不会“卡住”。-- 如果您的程序在引导过程中可能会挂起,那么在那里加入看门狗可能是有意义的。

话虽如此,我通常会在我的启动程序结束时启动看门狗。


3
通常情况下,开机程序完成后会启用看门狗(WD)功能,因为此时程序进入其“循环”,并定期踢动看门狗。在启动过程中,我想您指的是硬件和外设的线性初始化,您的代码周期性较少,难以插入看门狗踢动周期。

3

生产代码应始终启用看门狗。兴趣或原型项目显然是可能不需要看门狗的特殊情况。

如果在启动时启用了看门狗,则必须考虑一个特殊情况。擦除和写入内存需要很长时间(擦除整个设备可能需要几秒钟才能完成)。因此,您必须确保您的擦除和写入例程定期服务于看门狗以避免重置。


3
如果您正在调试,您应该关闭看门狗定时器,否则在执行代码时设备会重启。否则,是否开启看门狗由您决定。我曾经见过看门狗挽救了项目的困境,也见过看门狗导致意外的重启循环,这会导致客户堵塞支持线路,并给公司带来巨大的成本。
这是您做的决定。

3
最佳实践是在电源启动时自动激活看门狗。如果您的硬件没有为此设计,则应尽快打开它。通常,在引导过程中,我会设置长时间的看门狗,但一旦超过引导过程,我就会选择短暂的超时时间并定期维护看门狗。
您可能无法始终在远程位置重置因工厂关机和重新启动而挂起的板子。或者该板位于无法访问的地下爬行空间,并且在电源波动后未重新启动。实验室易于操作的做法并不是真正的最佳实践。
尝试设计您的硬件,以便您的软件可以在引导时检查复位原因并报告。如果您遇到看门狗超时,您需要知道,因为这是系统故障,忽略它可能会在以后引起问题。
关闭看门狗更容易进行调试,但在开发过程中定期使用看门狗进行测试,以确保一切正常。

2

我一直将其启用。禁用它有什么优点?如果在引导代码期间必须重置它,那又怎样呢?


2
在我看来,看门狗有三个不同但相关的主要目的,以及一个第三个次要目的:(1)确保在系统出现故障时,它最终会恢复正常;(2)确保当启用必须定期服务的硬件时,任何可能阻止此类服务的事物都会合理快速地关闭系统;(3)提供一种方式让系统暂时休眠,而不是永久休眠。
虽然在引导加载程序期间禁用看门狗可能不会干扰第二个目的,但可能会干扰第一个目的。我更喜欢在引导加载程序期间保持看门狗处于启用状态,并且每次发生指示系统实际上应该处于引导加载程序中的情况(例如每次接收到有效的引导加载程序命令数据包),引导加载程序都会触发看门狗。在一个我没有这样做的项目中,引导加载程序只是盲目地喂看门狗,静电会使单位有时进入引导加载程序模式,在那里它们将永远停留。当没有实际的引导加载程序时,通过看门狗将系统从引导加载程序中退出可以缓解该问题。
顺便说一下,如果我正在设计我的“理想”嵌入式看门狗电路,我将具有最大看门狗时间的硬件可配置参数,并且将具有“请求的看门狗时间”和“最大看门狗时间”的软件设置。最初,两个软件设置都将设置为最大值;每次喂看门狗时,时间将设置为三个设置中的最小值。软件可以随时更改“请求的看门狗时间”,以任何值;可以在任何时候降低“最大看门狗时间”设置,但只能通过系统重置增加它。
顺便说一下,我可能还会包括一个“定期重置”计时器,它将强制系统在某个间隔内无条件重置。软件将无法覆盖此计时器的行为,但将能够查询它并要求尽早重置。即使尝试使用看门狗做到一切正确的系统仍然可能陷入“损坏”状态,但看门狗仍然正常运行。如果可以接受定期计划的停机时间,定期重置可以避免这种问题。可以通过在不干扰将被打断的某些正在进行的操作的情况下尽早执行它们来将这些重置对系统有用性的影响最小化。例如,如果将重置间隔设置为七小时,则可以在时钟倒计时到一小时时,要求不再请求任何操作,等待几秒钟以查看是否有人试图在被要求停止后发送操作,并且如果没有请求,则重置,然后邀请进一步的请求。如果系统即将重置时发送的请求将被延迟直到重置发生后,但是只要没有请求需要超过一个小时才能完成,就不会丢失或中断任何请求。

0

我猜是因为晶体管开关数量减少,所以能节省微小的功率。根据你睡眠的时间长短,这可能会带来很大的节省。你的朋友可能指的是在实际操作时关闭 WDT,然后在睡眠时打开它的做法。Microchip 关于 他们的 PICs 给出了一个不错的小提示:

"如果在正常操作期间禁用 WDT(FWDTEN = 0),则可以使用 SWDTEN 位(RCON<5>)在进入睡眠模式前打开 WDT"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接