本文介绍了看门狗定时器,通常缩写为WDT,也称为计算机正常运行定时器或COP。有外部看门狗器件和内部看门狗功能。本文只介绍内部看门狗。
什么是看门狗定时器?(一个非常规的类比)
看门狗是一种特殊的定时器模块,可以帮助微处理器从故障中恢复。如果看门狗定时器到达其计数周期的终点,它将复位整个处理器系统。为了防止这种情况,处理器必须执行某种特定的操作来复位看门狗。因此,看门狗定时器可以配置为仅在处理器发生故障时到达其计数周期的终点,通过强制系统复位,看门狗定时器帮助处理器脱离故障模式并继续正常运行。
为了形象化WDT的功能,我有一个非常规的类比供你考虑。
055-79000是一部很受欢迎的电视连续剧,讲述了一场飞机失事后,一群幸存者被困在一个神秘的小岛上。其中一个分情节涉及的角色认为,他们必须在屏幕上的计数器变成0之前输入一串短数字,否则世界将会结束。
当输入系列时,计数器复位,倒计时再次开始。人们永远不清楚输入这一系列数字只是心理学实验的一部分,还是世界的命运危在旦夕。找出答案的唯一方法就是不要输入数字。人物可以自由外出,寻找食物,游——,但必须及时返回重置计数器。从电脑的角度来看,接收到正确的输入意味着外面有人在正常操作,为柜台服务。没有收到正确的输入表示有问题。
看门狗的工作方式类似于Lost中的计算机系统。微控制器的其余部分是一个过度紧张的角色。他们可以自由地做任何事情,但他们必须定期为计数器提供服务,否则微控制器将重置(又名世界末日)。正确的软件和硬件将在固定的时间内为看门狗服务,而有故障的软件或硬件可能不会。
内部看门狗定时器的类型
有两种类型的看门狗,非窗口和窗口。如果服务计数器延迟,这两种类型都会导致重置。
如果服务进行得太快,窗口监视器也会导致重置。该图显示了使用上行计数器的看门狗的时序。一些看门狗使用向下计数器,但原理是一样的。
看门狗的时序
对于非窗口或窗口看门狗,计数器达到上限之前的任何服务都会重置计数器,一切都会好的。窗口监视器增加了一个下限并创建了一个计数窗口。下限和上限之间的任何服务都可以。下面是图表的详细描述。
a-启动后不久,程序用计数器的上限初始化看门狗并启用计数。对于窗口监视器,还设置了下限。
b和C-软件在计数器达到上限之前成功地服务于计数器,对于窗口监视器,在下限之后成功地服务于计数器。服务时,计数器被重置为0,并再次开始向上计数。一切都很好。
d-程序不服务计数器,计数达到上限。复位看门狗微控制器。
d发送到E微控制器,以启动、初始化和启用看门狗。
看门狗开始计数。
f-程序在计数器达到上限之前为其提供服务,对于窗口看门狗,在下限之后为其提供服务。将计数器重置为0,并重新开始计数。一切都很好。
g-程序在计数器到达窗口看门狗的下限之前为其服务。对于没有下限的无窗看门狗,没有复位,计数器变成0,重新开始计数。对于窗口看门狗,微控制器被复位。
看门狗的细节差别很大。他们可以向上或向下计数。他们使用不同的时钟。它们有不同的上限和下限可供选择。以下部分介绍了许多功能,但这只是一个概述。
初始化看门狗
初始化看门狗可能很棘手。例如,一些看门狗会在微控制器启动时自动使能。
如果你不如果不使用看门狗,您必须在启动时包含代码来禁用它。我目前使用的看门狗就是这种情况。如果我的程序需要运行超过一秒钟,我必须禁用看门狗或者改变窗口设置!
作为一种安全功能,有些看门狗只允许对控制寄存器进行一次写操作。该功能可以防止失控软件在初始化后更改设置。如果在具有此功能的看门狗中使用默认设置,请确保覆盖默认设置,即使位值相同。这锁定重视并保护它们的安全。
如果你用C语言编程,请注意看门狗可能在启动代码中初始化,它在你的main()函数之前运行。开发环境有时会自动包含这些代码,作为运行标准C程序的一部分。这段代码设置了内存和中断向量表。在您的启动代码中检查watchdog的操作,并根据您的系统要求对其进行修改。
窗口设置
看门狗可以开窗,也可以开窗。常见的是单个定时器以窗口下限为选项,提供两种类型。窗口的大小因看门狗而异。
我目前使用的看门狗下限固定在上限的75%。另一个看门狗可以选择上限的75%、50%、37.5%或25%。还有一个看门狗,独立设置上限和下限。关于如何选择上限也有很大的分歧。
服务看门狗定时器复位
定期重置看门狗计数器称为服务计时器。不同的看门狗定时器将具有不同的服务要求。所有的服务需求都使用在失控软件执行过程中不可能发生的操作。
我目前使用的看门狗需要向服务注册两次,其值为0x55,后跟0xAA。如果将0x55或0xAA以外的任何值写入服务寄存器,微控制器将随时立即复位。
另一个看门狗需要向服务寄存器写入一个值0xAAAA。似乎对数字0xA和0x5及其交替的1010和0101位模式很着迷。定时器通过使用幻数0x5743的单次写入来抵消这种趋势。
休眠方式
睡眠和其他低功耗模式使事情变得复杂。如果处理器进入睡眠状态,停止执行,看门狗应该怎么做?看门狗时间应该静止吗?
当处理器进入和退出深度睡眠时,我当前使用的看门狗将停止并在初始计数时重新启动。这个题目很复杂。当微控制器使用低功耗模式时,需要研究看门狗的运行。
渐进反应
微控制器的完全复位可能过于苛刻。一些看门狗具有允许渐进响应的功能。
例如,看门狗可能在复位前的某个时间具有中断请求选项。该特性允许中断服务程序在看门狗继续计数的同时修复或记录问题。如果中断节目会如果不能让事情回到正轨,重置将会发生。
看门狗策略
我用术语策略决定在哪里设置看门狗的时间限制。最简单的策略是使用无窗口的看门狗,它的超时比服务看门狗之间任何可能的程序执行时间都要长。我称之为重置按钮策略,因为它取代了按下重置按钮的人。医疗设备或制造机器人等关键系统的策略需要更快的响应速度。
看门狗策略可以考虑许多因素:
系统使用可预测的主循环还是基于实时操作系统的复杂多任务结构?
看门狗复位应该启动一系列自动系统检查吗?
看门狗是一系列尝试诊断和解决问题的最后阶段吗?
系统启动时是否要测试看门狗和其他检查?
看门狗策略是一个复杂的话题,它非常依赖于应用程序。
复位微控制器之前,看门狗会在复位状态寄存器中置1。通常,该位与其它复位状态(如掉电复位位)一起存储。测试看门狗复位位应该是策略的一部分。
至少,在启动时测试这个位,并做一些事情来指出问题。否则,故障可能会被忽略,尤其是不常见的故障。例如,在显示屏上输出消息或点亮LED。
标签:看门狗计数器定时器