电子说
看门狗能够及时检测并采取相应措施,从而避免系统长时间处于故障状态。本文将详细介绍看门狗的工作原理及其正确使用方法。
同时通过具体示例解析,教你如何在一个简单的LuatOS项目中集成看门狗定时器,设置适当的参数来确保系统在正常运行和故障场景下都能自动恢复。
▼ 看门狗简介 ▼
看门狗(Watch Dog Timer,WDT)——是一种监控电路,主要应用于嵌入式系统,目的是为了提高系统的可靠性和稳定性。在看门狗电路的帮助下,当系统出现异常,如程序跑飞或死循环时,能够自动复位并重新启动系统。
工作原理:
看门狗电路通常包括一个定时器、一个喂狗信号和一个复位(Reset)输出。在正常的系统运行过程中,主控制器(MCU)会定期向喂狗信号发送一个脉冲,以“喂”看门狗,防止其计时到达预设值。如果MCU由于某种原因未能在规定时间内喂狗,看门狗定时器将会计满并输出一个复位信号,将MCU复位。
应用架构:
在实际应用中,看门狗芯片通常连接到MCU的一个GPIO端口。MCU在其正常运行期间会定期向该端口写入一个高电平或低电平信号,以此告诉看门狗它仍然正常工作。如果MCU未能按时发出信号,看门狗将触发复位操作。
芯片引脚功能:
某些看门狗芯片,如TPV6823具有多个引脚:包括供电引脚(VCC)、喂狗信号引脚(WDI)、复位输出引脚(RESETn)和手动复位输入引脚(MRn)。这些引脚提供了多种复位方式和时间设置,以适应不同的应用需求。
定时时间:
看门狗的定时时间通常需要保持在一个相对较长的周期,例如200毫秒左右。这样的设置是为了确保在正常运行中,即使MCU由于干扰而未能及时喂狗,看门狗也不会立即复位系统,从而给MCU足够的时间来响应和处理问题。
软硬件看门狗的区别:
硬件看门狗利用独立的定时器电路来实现监控功能,具有较高的可靠性。软件看门狗则使用处理器内部的定时器或其他机制来实现,虽然在一定程度上可以简化硬件设计,但在可靠性方面通常不如硬件看门狗。
WDT库提供了一系列用于管理和操作看门狗定时器的API函数,开发者可以通过Air201方便地在LuatOS系统中管理看门狗定时器,从而提高设备的稳定性。
软硬件相关准备工作及最新示例源码下载详见:
https://docs.openluat.com/air201/luatos/app/service/wdt/
一、看门狗示例解析
本文示例分为两个部分:
正常运行情况和故障场景模拟。
在正常运行情况下,示例代码会初始化看门狗库,并设置超时时间和喂狗周期。然后,创建一个任务,该任务会定期喂狗,以防止看门狗定时器超时。如果看门狗定时器超时,系统将自动重启。
在故障场景模拟部分,我们添加了一个新的任务fault_task,该任务进入一个死循环,不进行喂狗操作。这样,当看门狗定时器超时后,系统将自动重启,模拟了设备在故障场景下的自动恢复能力。
1.1 程序正常运行
1.1.1 示例代码介绍
项目信息:
在开头定义了项目名称(PROJECT)和版本(VERSION),并通过日志输出这些信息。
引入系统库:
通过require("sys") 引入了sys库,这是LuatOS中常用的系统库。
任务初始化:
使用sys.taskInit函数创建一个新的任务。在任务中检查wdt库是否可用,如果不可用,则进入一个无限循环,每秒钟输出一次提示信息。
WDT配置:
初始化wdt库,设置超时时间为9秒。设置一个定时器每3秒喂一次看门狗,确保设备在正常运行的情况下不会重启;若发生软件崩溃或硬件故障,最多18秒后将自动重启设备。
运行系统:
最后通过sys.run() 启动系统,后面不应添加任何其他语句。
1.1.2 完整代码展示
1.1.3 运行结果展示
通过Luatools工具查看日志:
1.2 添加死循环模拟故障场景
1.2.1 示例代码介绍
我们在原有示例代码中创建了一个新的任务,命名为fault_task,它将进入一个死循环。由于这个新任务不会喂看门狗,设备将在超时后自动重启。这样,我们就可以有效地模拟看门狗的超时情况。
1.2.2 完整代码展示
1.2.3 运行结果展示
二、看门狗的扩展
2.1 看门狗定时器的应用场景
看门狗定时器广泛应用于各种嵌入式系统和物联网设备中,特别是在需要高可靠性的应用场景中。
一些典型的应用场景包括:
工业控制系统:
在工业生产过程中,控制系统需要高度稳定和可靠,看门狗定时器可以确保系统在受到干扰或异常情况时能够迅速恢复。
车载电子系统:
车载电子系统面临着复杂的电磁环境和振动,看门狗定时器可以帮助系统在上电复位后保持稳定运行,防止因软件或硬件故障导致的系统死机。
医疗设备:
医疗设备对稳定性和可靠性有很高的要求,看门狗定时器可以确保设备在长时间运行过程中不会因为故障而停止工作,从而保障患者的安全和设备的连续性。
通信设备:
在通信系统中,看门狗定时器可以用于监控和保护网络设备,确保数据传输的稳定性和可靠性。
2.2 看门狗定时器的设计考虑因素
在设计和实现看门狗定时器时,需要考虑以下几个关键因素:
超时时间:
超时时间是指看门狗定时器从开始计时到触发复位信号的时间间隔。这个时间需要根据具体应用的需求来设定,通常需要平衡系统的稳定性和响应速度。
喂狗周期:
喂狗周期是指主控制器向看门狗芯片发送脉冲的时间间隔。喂狗周期应该设置得足够短,以防止看门狗定时器在正常运行中误触发复位。
看门狗复位输出:
看门狗定时器通常具有一个复位输出引脚,用于向主控制器提供复位信号。在设计时,需要确保复位输出引脚的电平和主控制器的复位输入引脚兼容。
看门狗功耗:
在设计看门狗定时器时,需要考虑其功耗,特别是在低功耗应用中。选择低功耗的看门狗芯片和合理的电源设计对于系统的整体功耗至关重要。
兼容性和可扩展性:
在设计看门狗定时器时,需要考虑其与其他系统的兼容性和可扩展性。确保看门狗定时器能够与其他硬件和软件组件无缝集成,并在未来需要时能够轻松扩展或升级。
通过综合考虑这些因素,开发者可以设计和实现一个稳定、可靠且高效的看门狗定时器解决方案,以确保嵌入式系统的正常运行和数据传输的稳定性。
三、看门狗的常见问题
3.1 看门狗定时器是如何工作的?
看门狗定时器通过主控制器定期向其发送脉冲信号来保持计时。如果主控制器在规定时间内未能发送脉冲,看门狗定时器将触发复位信号,将主控制器复位。
3.2 如何配置看门狗定时器的超时时间和喂狗周期?
在LuatOS等嵌入式操作系统中,看门狗定时器的超时时间和喂狗周期通常通过API函数进行配置。可以根据具体应用的需求来设置合适的时间间隔。
若使用本文中所提到的watchdog操作库,可按照以下步骤进行配置:
1)初始化看门狗:
使用wdt.init(timeout) 函数来初始化看门狗定时器,timeout参数是超时时长,单位为毫秒。
例如,如果你希望看门狗的超时时间为9000毫秒,可以这样调用:
2)设置看门狗超时时间(可选):
如果设备支持,可以调用:
wdt.setTimeout(timeout)
重新设置看门狗的超时时长,单位同样为毫秒。
例如:
3)定期喂狗:
使用wdt.feed() 函数来喂狗,以重置超时计时。建议使用定时器定期调用这个函数。
例如,使用系统定时器每3000毫秒喂一次狗,可以这样设置:
通过以上步骤,你可以成功配置看门狗定时器的超时时间和喂狗周期,确保设备不会因为未喂狗而重启。
今天的内容就分享到这里了~
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !