任何人都可以告诉我在启动/启动代码执行期间是否应启用或禁用看门狗?我的朋友告诉我,我们通常会在启动代码中禁用看门狗。任何人都可以告诉我这样做的优点或缺点是什么?
答案 0 :(得分:4)
这真的取决于你的项目。监视器可以帮助您确保程序在执行代码时不会“卡住”。 - 如果你的程序有可能在启动过程中挂起,那么在那里加入看门狗也是有意义的。
话虽这么说,我通常会在启动程序结束时启动监视程序。
答案 1 :(得分:3)
通常在启动程序后启用WD(看门狗),因为这是程序进入“循环”并定期启动WD的时间。在启动过程中,我认为你的意思是硬件和外设的线性初始化,代码中的周期性要小得多,并且很难插入WD踢脚循环。
答案 2 :(得分:3)
生产代码应始终启用监视程序。业余爱好和/或原型项目显然是一个特殊情况,可能不需要看门狗。
如果在启动过程中启用了看门狗,则必须考虑特殊情况。擦除和写入内存需要很长时间(擦除整个设备可能需要几秒钟才能完成)。因此,您必须确保擦除和写入例程定期为看门狗提供服务以防止复位。
答案 3 :(得分:3)
如果您正在调试,则需要将其关闭,或者当您尝试单步执行代码时设备将重新启动。否则,这取决于你。我见过看门狗保存项目的屁股,我看到看门狗导致无意的重启循环,导致客户堵塞支持线,从而使公司损失惨重。
你打电话。
答案 4 :(得分:3)
最佳做法是让看门狗在加电时自动激活。如果您的硬件不是为那个开关而设计的,请尽快开启。一般情况下,我会在启动过程中长时间设置看门狗,但是一旦我启动了,我会花一小段时间定期为看门狗提供服务。
在工厂关闭并在远程位置重新启动后,您可能并不总是在复位挂起的电路板。或者电路板位于难以接近的地下室爬行空间中,并且在电源掉电后它没有重新启动。实验室简易实践不是现实世界的最佳实践。
尝试并设计您的硬件,以便您的软件可以在启动和报告时检查重置原因。如果你得到一个看门狗超时你需要知道,因为它是你的系统失败而忽略它会导致以后出现问题。
关闭看门狗可以更容易地进行调试,但在开发期间定期测试看门狗以确保一切正常。
答案 5 :(得分:2)
我总是启用它。禁用它有什么好处?那么如果我必须在启动代码中重置它呢?
答案 6 :(得分:2)
监督机构恕我办公室服务于三个两个,但不同的主要目的,以及第三个不太强烈相关的目的:(1)确保在所有情况下系统被打败,它最终会恢复; (2)确保在启用硬件时不能在没有服务的情况下使用太长时间,任何阻止此类维护的设备都会合理地快速关闭系统; (3)提供一种系统可以在一段时间内进入睡眠而不会永远沉睡的方法。
虽然在引导加载程序期间禁用监视程序可能不会干扰目的#2,但它可能会干扰目标#1。我的偏好是在引导加载程序期间启用监视程序,并且只要发生某些事情表明系统确实应该在引导加载程序中(例如,每次它收到有效的引导加载程序时),引导加载程序都会命中监视程序。命令包)。在我没有做到这一点的一个项目中,只是让引导加载程序盲目地为监视器提供信息,静态zaps有时会将单元转换为引导加载程序模式,它们将永远存在。当没有实际的启动加载时,看门狗会将系统踢出引导加载程序,从而缓解了这个问题。
顺便提一下,如果我正在设计我的“理想”嵌入式看门狗电路,我将拥有一个硬件可配置的参数,以获得最长的看门狗时间,并且可以设置“请求的看门狗时间”和“最大看门狗时间”。最初,两个软件设置都将设置为最大值;每当看门狗被送入时,时间将被设置为三个设置中的最小值。软件可以随时将“请求的看门狗时间”更改为任何值; “最大看门狗时间”设置可以随时降低,但只能通过系统复位来增加。
顺便说一句,我可能还包括一个“周期性重置”定时器,它会强制系统在某个时间间隔内无条件地重置。软件无法覆盖此计时器的行为,但能够查询它并提前请求重置。即使是那些试图通过监督机构做好一切事情的系统,仍然会陷入“破碎”的状态,但看门狗会被罚款。如果可以接受定期的计划停机时间,则定期重置可以避免此类问题。可以通过尽早执行这些重置对系统有用性的影响来最小化它,只要它不会破坏正在进行的某些将被中断的动作。例如,如果重置间隔设置为七小时,则可以在时钟下降到一小时的任何时间,请求不要求进一步的操作,等待几秒钟以查看是否有人尝试发送操作就像它们一样要求停止,如果没有请求任何操作,请重置,然后再邀请其他请求。在系统即将重置时发送的请求将被延迟,直到重置发生,但如果没有请求需要超过一个小时才能完成,请求不会丢失或中断。答案 7 :(得分:0)
我想,更少的晶体管开关,所以节省的电量微乎其微。根据你的睡眠量,这实际上可能是一个很大的节省。您的朋友可能指的是在您实际执行某些操作时关闭WDT的操作,然后在您睡觉时将其打开。 Microchip提供了their PICs:
这一点“如果在正常操作期间WDT被禁止(FWDTEN = 0),则SWDTEN位(RCON< 5>)可用于在进入休眠模式之前打开WDT”