watchdog

本文介绍了一种利用看门狗定时器实现程序监视的方法。通过设置不同的参数,看门狗可以在超时后触发系统复位或进入普通中断。文中提供了一个具体的测试程序示例,展示了如何配置看门狗并实现喂狗操作。
看门狗实质上和其他的定时器功能相似,只是看门狗多了一个时间到就复位的功能,只要将WTCON的【0】设置成0就成了普通的中断,将进入中断处理程序中,如果设置成了1将复位。这样的话,我们可以使用看门狗来实现对程序的监视,定时的去喂狗也就是定时去给WTCNT复制,如果程序跑飞了话就不能定时去喂狗,系统将重启。

下面的程序中我使用了一个中断处理函数,中断处理程序中使蜂窝器响一下,如果开启了喂狗程序的话不会引发中断,

下面是测试程序:(特别注意延时的时间,否则不能正常工作)

  1. #include "watchdog.h"  
  2. #include "def.h"  
  3. #include "2440addr.h"  
  4. #include "uart.h"   
  5.   
  6. void __irq watchdog_isr(void)   //__irq是把中断现场保存和恢复工作交由编译器自动完成,如果碰到中断嵌套,则__irq容易引起混乱
  7. {   
  8.   
  9.       uart_printf("Enter interrupt!\n");   
  10.       Beep(2000, 100);   
  11.        //清中断标志位   
  12.        rSRCPND = 0x1<<9;   
  13.        rSUBSRCPND = 0x1<<13;   
  14.        rINTPND = 0x1<<9;   
  15.   
  16. }   
  17.   
  18.   
  19.   
  20. void watchdog_test()   
  21. {   
  22.        
  23.     // freq=PCLK / (Prescaler value + 1) / Division_factor   
  24.     ////prescaler =249  division factor = 16 freq = 12.5kHZ 如果[0]为1,但中断发生时将引起复位,   
  25.     //这里设置成了普通的中断,中断发生时会进入中断处理程序   
  26.     rWTCON = (249<<8) | (0<<3) |(0);  //   
  27.     rWTDAT = 50000;  //看门狗计数4秒(4/(1/12500)   
  28.     rWTCNT = 50000;   //这两个值必须初始化   
  29.        
  30.     rWTCON |=(1<<5) |(1<<2);  //开看门狗中断   
  31.        
  32.     rSRCPND = 1<<9;   
  33.     rSUBSRCPND =1<<13;   
  34.     rINTPND =1<<9;   
  35.     rINTSUBMSK = ~(1<<13);   //开中断子屏蔽   
  36.     rINTMSK =~(1<<9);   
  37.        
  38.     pISR_WDT_AC97 = (U32)watchdog_isr;  //安装中断处理句柄   
  39.        
  40.    Delay(1000);   
  41.   
  42.        while(1)   
  43.   
  44.        {   
  45.   
  46.                      Delay(1000);   
  47.   
  48.              // rWTCNT = 50000;         //喂狗,重新赋值,防止中断,果         
  49.                          //把这条语句打开的话,将进行喂狗,不会进入中断   
  50.   
  51.                      Delay(1000);   
  52.   
  53.          }   
  54.   
  55. }  
### WATCHDOG 在 IT 领域的作用 在 IT 领域,WATCHDOG 是一种用于保障系统稳定性的重要机制。其核心功能在于实时监控系统的运行状态,并在检测到异常情况时采取恢复措施[^2]。具体而言,当操作系统或其他软件组件发生死锁或无响应的情况时,WATCHDOG 能够触发重启操作或者执行其他预定义的动作来恢复正常服务。 #### 实现方式 WATCHDOG 的实现通常依赖于硬件和软件两种形式: 1. **硬件 WATCHDOG** 硬件 WATCHDOG 基于专用芯片设计,能够独立于主机 CPU 运行。它会定期接收来自应用程序的信号(称为“喂狗”动作)。如果一段时间内未收到该信号,则认为系统可能陷入停滞状态并自动触发重置命令[^3]。 2. **软件 WATCHDOG** 软件 WATCHDOG 则完全由程序逻辑构成,在某些嵌入式设备或服务器环境中被广泛采用。开发者可以通过编写定时器函数配合事件监听器完成类似的功能;一旦发现目标进程未能按时更新心跳标志位便会启动应急流程。 以下是基于 Linux 平台下启用软看护进程的一个简单例子: ```python import time import os def watchdog(): while True: try: # Simulate a task that should run periodically. print("Watchdog checking...") # If the main process fails to update this file within timeout period, # an exception will be raised here causing system reboot or other actions. with open("/tmp/heartbeat", 'r') as f: data = f.read() if not data.strip(): raise Exception('Heartbeat lost!') except Exception as e: print(f"Error detected: {e}. Initiating recovery procedure.") break finally: time.sleep(5) if __name__ == "__main__": watchdog() # Start monitoring loop. # In case of failure, perform necessary steps like restarting service etc. os.system("sudo systemctl restart myservice.service") ``` 上述脚本展示了如何构建一个基础版的软件 WATCHDOG 来监视某个特定文件的内容变化作为健康指标之一。如果有任何错误抛出,则立即停止循环并通过调用外部工具重新激活关联的服务实例[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值