Embedded 关于看门狗定时器

Embedded 关于看门狗定时器,embedded,Embedded,有谁能告诉我,在启动/引导代码执行期间,我们应该启用还是禁用看门狗?我的朋友告诉我,我们通常在引导代码中禁用看门狗。有谁能告诉我这样做的优点或缺点是什么吗?这取决于你的项目。看门狗可以帮助您确保程序在执行代码时不会被“卡住”如果您的程序可能在引导过程中挂起,那么也可以在那里加入看门狗 也就是说,我通常在启动程序结束时启动看门狗。我想,切换的晶体管更少,因此节省的电量也很小。这实际上可能是一笔很大的节省,这取决于你睡了多少觉。您的朋友可能指的是在您实际做某事时关闭WDT,然后在您睡觉时打开WDT的

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

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


也就是说,我通常在启动程序结束时启动看门狗。

我想,切换的晶体管更少,因此节省的电量也很小。这实际上可能是一笔很大的节省,这取决于你睡了多少觉。您的朋友可能指的是在您实际做某事时关闭WDT,然后在您睡觉时打开WDT的做法。Microchip给出了一个很好的观点:


“如果WDT在正常操作期间被禁用(FWDTEN=0),则SWDTEN位(RCON)可用于在进入睡眠模式之前打开WDT”

通常在启动程序后启用WD(看门狗),因为这是程序进入其“循环”并定期启动WD的时候。在引导过程中,我想你指的是硬件和外围设备的线性初始化,代码中的周期性要小得多,很难插入WD循环。

我总是启用它。禁用它有什么好处?那么,如果我必须在启动代码期间重置它呢?

生产代码应始终启用看门狗。嗜好和/或原型项目显然是一种特殊情况,可能不需要看门狗


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

如果您正在调试,则需要将其关闭,否则当您尝试单步执行代码时,设备将重新启动。否则就看你了。我见过看门狗拯救项目,我见过看门狗导致不经意的重启循环,导致客户阻塞支持线路,从而使公司损失惨重


你打电话。

最好的做法是在通电时让看门狗自动启动。如果您的硬件不是为此设计的,请尽快将其打开。一般来说,我会在开机期间长时间设置看门狗,但一旦我过了开机时间,我会暂停一段时间,并定期为看门狗提供服务

在工厂关闭并在远程位置重新启动后,您可能不会一直在重置挂起的板。或者该电路板位于无法进入的地下室爬行空间中,并且在断电后未重新启动。实验室简易实践不是现实世界的最佳实践

尝试设计硬件,以便软件可以在启动时检查重置原因并报告。如果您得到一个看门狗超时,您需要知道,因为这是系统中的一个故障,忽略它可能会导致以后出现问题


在关闭看门狗的情况下进行调试比较容易,但在开发过程中,在打开看门狗的情况下定期进行测试,以确保一切正常。

看门狗有三个两个但不同的主要目的,以及第三个不太密切相关的目的:(1)确保在所有情况下,系统都会失去正常,它会恢复正常,最后,;(2) 确保在启用硬件时,如果不进行维修,则不会持续太长时间,任何可能阻止此类维修的东西都会合理地快速关闭系统;(3) 提供一种方法,使系统可以暂时进入睡眠状态,而不会永远处于睡眠状态

虽然在引导加载程序期间禁用看门狗可能不会干扰目的2,但它可能会干扰目的1。我的偏好是在引导加载程序期间启用看门狗,并在任何时候发生指示系统确实应该在引导加载程序中的事情时(例如,每次它收到有效的引导加载程序命令包时),让引导加载程序点击看门狗。在一个项目中,我没有这样做,只是让引导加载程序盲目地向看门狗提供信息,静态的ZAP有时可能会使单位永远处于引导加载程序模式。让看门狗在没有实际引导加载的情况下将系统从引导加载程序中踢出可以缓解这个问题

顺便说一句,如果我在设计我的“理想”嵌入式看门狗电路,我会有一个最大看门狗时间的硬件可配置参数,并会有“请求看门狗时间”和“最大看门狗时间”的软件设置。最初,两个软件设置都将设置为最大值;任何时候给看门狗喂食,时间将被设置为三个设置中的最小值。软件可以随时将“请求的看门狗时间”更改为任何值;“最大看门狗时间”设置可以随时减少,但只能通过系统重置增加

顺便说一句,我可能还包括一个“定期重置”计时器,它将强制系统以一定间隔无条件重置。软件将无法覆盖此计时器的行为,但可以查询它并请求提前重置。即使是那些试图在看门狗的帮助下把一切都做好的系统,也可能陷入“崩溃”状态,但看门狗得到的食物很好。如果可以接受定期计划停机,则定期重置可以避免此类问题。只要不会中断正在进行的、可能会被中断的某些操作,就可以尽早执行重置,从而将此类重置对系统有用性的影响降至最低。例如,如果重置间隔设置为7小时,则可以在时钟下降到1小时的任何时间,要求不请求进一步的操作,等待几分钟