嵌入式系统的Watchdog
IntroductionWatchdog,又名看门狗,光听名字就知道是保卫系统的可靠帮手,它相当于系统警察,当系统发生严重错误(比如程序跑飞或进入死循环等)不能恢复的时候,能够让系统重启。看门狗最初的意义是因为早期嵌入式设备上的程序经常跑飞(比如说电磁干扰等),为了避免系统在无人干预时长时间挂起,所以专门设置了一个硬件看门狗,每隔一段时间,看门狗就去检查某个参数是不是被设置了,如果发现该参数被设置
·
Introduction
Watchdog,又名看门狗,光听名字就知道是保卫系统的可靠帮手,它相当于系统警察,当系统发生严重错误(比如程序跑飞或进入死循环等)不能恢复的时候,能够让系统重启。
看门狗最初的意义是因为早期嵌入式设备上的程序经常跑飞(比如说电磁干扰等),为了避免系统在无人干预时长时间挂起,所以专门设置了一个硬件看门狗,每隔一段时间,看门狗就去检查某个参数是不是被设置了,如果发现该参数被设置了,则判断为系统出错,然后强制重启。
另外,它又叫 watchdogtimer(WDT),即一个定时器电路, 一般有一个输入,叫喂狗(feed),一个输出到MCU(微控制单元 Microcontroller Unit,俗称单片机)的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定时间不喂狗(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 从而使嵌入式系统可以在无人状态下实现连续工作。
How to work?
Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。
在比较高档的嵌入式硬件芯片中,都有一个Watchdog模块,如果在MCU/MPU中没有集成Watchdog,一般会在此嵌入式系统中加一个专门的Watchdog芯片(常用的WDT芯片如MAX813 ,5045, IMP 813等)来实现Watchdog机制。此模块主要的功能包括:
1. 提供WATCHDOG控制寄存器和配置寄存器,供软件开发人员根据系统需要进行灵活配置。
2. 提供一接口,使应用软件能够定时给WATCHDOG“喂狗”。
3. 提供WATCHDOG机制,当系统进入不可恢复错误时,能产生一个不可屏蔽中断来通知系统自动重启 (一般这样,也有改变为其他处理方式的),只有相应的复位信号才能清除它。
如果是单独的watchdog芯片,则,
1. 芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平);
2. 如果单片机一旦跑飞或陷入死循环状态,看门狗电路就会由于得不到嵌入式系统送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。
HW WDT and SW WDT:
硬件watchdog(由硬件电路支持)比软件watchdog(一般是通过定时器机制实现)有更好的可靠性。 软件watchdog基于内核的定时器实现,当内核或中断出现异常时,软件watchdog将会失效。而硬件watchdog由自身的硬件电路控制, 独立于内核。无论当前系统状态如何,硬件watchdog在设定的时间间隔内没有被执行写操作,仍会重新启动系统
在Linux 内核下, 自带一个watchdog的实现,用于监视系统的运行,它的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。 /dev/watchdog 是一个主设备号为10, 从设备号130的字符设备节点。 Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动。 驱动源码位于内核源码树drivers\char\watchdog\目录下。
Sample code flow:
Wdt_config() {
// config the timer register
// enable the mdode register
// enable WDT irq
}
wdt_cb(){
// feed watchdog or reset the system
}
Wdt_register_timerout_handler(wdt_cb);
Wdt_enable();
The Ending
WATCHDOG在嵌入式系统中发挥着非常重要的作用,其实现方式会有较大差别。可以根据不同的硬件设计,可以选用不同的看门狗实现,但它们的作用是一样的:保证系统在出现不可恢复错误时,能够自动让系统重启。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)