软件看门狗实现

图片

一文看懂看门狗(附STM和英飞凌芯片应用)

文章目录

  • 一文看懂看门狗(附STM和英飞凌芯片应用)
  • (一)看门狗概述
  • (二)硬件看门狗
  • (三)软件看门狗


(一)看门狗概述

看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗置零,重新开始计数。如果看门狗增加到设定值就认为程序没有正常工作,强制整个系统复位。

一般情况下看门狗可分为硬件看门狗和软件看门狗,两种形式实现方法,优先级和使用环境不同。

(二)硬件看门狗

原理图如下:
在这里插入图片描述

在看门狗( watchdog timer),是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

(三)软件看门狗

看门狗命令在程序的中断中拥有最高的优先级。防止程序跑飞。也可以防止程序在线运行时候出现死循环。

相对于一个监视守护进程,避免关键程序出现死锁影响系统功能。
下面是一个基于STC的IO控制软件看门狗示例代码:

#define MAIN_Fosc 22118400L //定义主时钟
#include "STC15Fxxxx.H"
#define DIS_DOT 0x20
#define DIS_BLACK 0x10
#define DIS_ 0x11
#define Timer0_Reload                                                          \(65536UL - (MAIN_Fosc / 1000)) // Timer 0 中断频率, 1000次/秒u8 code t_display[] = { //标准字库// 0 1 2 3 4 5 6 7 8 9 A B C D E F0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C,0x39, 0x5E, 0x79, 0x71,// black - H J K L N o P U t G Q r M y0x00, 0x40, 0x76, 0x1E, 0x70, 0x38, 0x37, 0x5C, 0x73, 0x3E, 0x78, 0x3d,0x67, 0x50, 0x37, 0x6e, 0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87,0xFF, 0xEF, 0x46}; // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
u8 code T_COM[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; //位码
sbit P_HC595_SER = P4 ^ 0;   // pin 14 SER data input
sbit P_HC595_RCLK = P5 ^ 4;  // pin 12 RCLk store (latch) clock
sbit P_HC595_SRCLK = P4 ^ 3; // pin 11 SRCLK Shift data clock
u8 LED8[8];                  //显示缓冲
u8 display_index;            //显示位索引
u16 ms_cnt;
u8 tes_cnt; //测试用的计数变量void delay_ms(u8 ms);
void DisplayScan(void);
void main(void) {u8 i;P0M1 = 0;P0M0 = 0; //设置为准双向口P1M1 = 0;P1M0 = 0; //设置为准双向口P2M1 = 0;P2M0 = 0; //设置为准双向口P3M1 = 0;P3M0 = 0; //设置为准双向口P4M1 = 0;P4M0 = 0; //设置为准双向口P5M1 = 0;P5M0 = 0; //设置为准双向口P6M1 = 0;P6M0 = 0; //设置为准双向口P7M1 = 0;P7M0 = 0; //设置为准双向口display_index = 0;for (i = 0; i < 8; i++)LED8[i] = DIS_BLACK; //全部消隐tes_cnt = 0;ms_cnt = 0;LED8[7] = ms_cnt;while (1){delay_ms(1); //延时1msDisplayScan();if (tes_cnt <= 5) // 5秒后不喂狗, 将复位,WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_16); // 喂狗if (++ms_cnt >= 1000){ms_cnt = 0;tes_cnt++;LED8[7] = tes_cnt;}}
}
void delay_ms(u8 ms)
{u16 i;do {i = MAIN_Fosc / 13000;while (--i)   ; // 14T per loop} while (--ms);
}
void Send_595(u8 dat)
{u8 i;for (i = 0; i < 8; i++){dat <<= 1;P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}
}
void DisplayScan(void)
{Send_595(~T_COM[display_index]); //输出位码Send_595(t_display[LED8[display_index]]); //输出段码P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据if (++display_index >= 8)display_index = 0; // 8位结束回0
}

此文做自己学习使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1549878.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

为HttpClient开启HTTP/2

正文 .Net Core在调用其他服务时&#xff0c;调用通常使用HttpClient&#xff0c;而HttpClient默认使用HTTP/1.1 。 配置 HttpClient 以使用 HTTP/2 h2 连接 自 .NET Core 3.0 发布以来&#xff0c; .NET 开发人员可以使用 HttpClient 启用 HTTP/2 。 设置 HTTP/2 的方法 De…

Linux系统软件看门狗

1.看门狗定义 Linux 自带了一个 watchdog 的实现&#xff0c;用于监视系统的运行&#xff0c;包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。 内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备&a…

软件看门狗怎么设计

有几个看门狗 主控内部有条看门狗&#xff0c;叫做内部狗&#xff0c;有的产品外部有充电ic&#xff0c;也能起到看门狗的作用&#xff0c;一般和主控采用IIC通讯&#xff0c;叫做外部狗。 环境 以RTOS为例子&#xff0c;介绍看门狗设计 设计目的 1.能监控到每个线程是否有…

STM32看门狗详解

看门狗的作用&#xff1a;防止单片机因未知原因死机或比我们预期的时间过长长时间不能响应&#xff0c;如果出现这种问题&#xff0c;看门狗就会把单片机复位 独立看门狗&#xff08;IWDG&#xff09;&#xff1a; 时钟来源&#xff1a;内部低速时钟&#xff08;LSI&#xff0…

linux看门狗定时器,看门狗定时器的作用

看门狗定时器(WDT&#xff0c;Watch Dog TImer)是单片机的一个组成部分&#xff0c;它实际上是一个计数器&#xff0c;一般给看门狗一个数字&#xff0c;程序开始运行后看门狗开始倒计数。如果程序运行正常&#xff0c;过一段时间CPU应发出指令让看门狗复位&#xff0c;重新开始…

独立看门狗

一、独立看门狗概述 1、为什么需要看门狗&#xff1f; 单片机的工作易受到外界电磁场干扰&#xff0c;造成程序跑飞&#xff0c;而陷入死循环&#xff0c;造成整个系统陷入停滞状态。出于对单片机运行状态进行实时监测的考虑&#xff0c;便产生了一种专门用于监测单片机程序运…

Prometheus+Grafana+AlertManager监控Linux主机状态

文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …

STM32看门狗简述

概述 看门狗一般分为硬件看门狗和软件看门狗&#xff0c;主要用来解决程序CPU异常&#xff0c;程序跑飞挂死等问题&#xff0c;提高系统的可靠性。 硬件看门狗是利用一个定时器电路&#xff0c;其定时输出连接到电路的复位端&#xff0c;程序在一定时间范围内对定时器清零(俗…

国内大公司的开源项目一览表(包含mysql读写分离等)

原文地址&#xff1a;http://gad.qq.com/article/detail/34413?sessionUserTypeBFT.PARAMS.239074.TASKID&ADUIN731373934&ADSESSION1508293481&ADTAGCLIENT.QQ.5533_.0&ADPUBNO26719 奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qih…

BAT、360、新浪 小米 网易等大公司开源项目

阿里巴巴开源的好软件太多&#xff0c;请自行选择所需&#xff0c;我列几个我们用的 阿里巴巴 Alibaba https://github.com/alibaba/ https://github.com/thx 1.分布式key/value存储系统 Tair Tair是由淘宝网自主开发的Key/Value结构数据存储系统&#xff0c;在淘宝网有着大规…

【GeoDa实用技巧100例】022:geoda生成空间权重矩阵(邻接矩阵、距离矩阵)

geoda生成空间权重矩阵(邻接矩阵、距离矩阵),车式矩阵、后式矩阵、K邻接矩阵。 文章目录 一、概述二、“车式”邻接的gal文档生成三、“后式”邻接gal文档生成四、k最近邻居gat文档生成五、查看gal和gat文档一、概述 空间权重矩阵(或相应的表格形式)一般需要用计算机软件生…

一些官方的github地址

阿里巴巴开源github地址:https://github.com/alibaba 腾讯开源github地址:https://github.com/Tencent 奇虎360github地址:https://github.com/Qihoo360 小米开源github地址:https://github.com/XiaoMi 豆瓣开源github地址:https://github.com/douban 网易开源github地址…

32、启用 HTTP 响应压缩和编程式配置Web应用

★ 启用HTTP压缩 就是前端页面如果改动的比较多&#xff0c;那么响应就会比较慢&#xff0c;可以通过设置HTTP响应压缩来提高响应&#xff0c;如果前端改动少&#xff0c;那么就不需要启动这个响应压缩。 目的&#xff1a;为了提高HTTP响应数据在网络上的传输效率。▲ 设置如…

Android Jetpack Compose中使用字段验证的方法

Android Jetpack Compose中使用字段验证的方法 数据验证是创建健壮且用户友好的Android应用程序的关键部分。随着现代UI工具包Jetpack Compose的引入&#xff0c;处理字段验证变得更加高效和直观。在这篇文章中&#xff0c;我们将探讨如何在Android应用中使用Jetpack Compose进…

快速搭建 Linux 学习平台

最近换了一个新的笔记本电脑&#xff0c;原来的学习环境没了&#xff0c;所以就重新搭建一下&#xff0c;顺便把这个过程给记录下来&#xff0c;希望可以帮助有需要的人。一个学习环境最主要的目的是简化学习需要准备的时间&#xff0c;不需要花费太多的时间在哪些不必要的细枝…

ZD Soft Screen Recorder 注册汉化版 【好用的屏幕录制软件】

ZD Soft Screen Recorder 汉化版捕获计算机屏幕上的内容与声音&#xff0c;并保存为各种格式压缩的视频文件。你在屏幕上看到的一切都可以在高帧速率连续进行记录。其结果视频在记录时间内清晰再现画面内容&#xff0c;所以是声音。 ZD Soft Screen Recorder 也能够拍摄图像的截…

树莓派控制ZD-8731两相步进电机驱动器

之前写过一篇驱动步进电机的文章&#xff0c;可以跟这篇参考着看。请戳这里&#xff01; 一、硬件&#xff1a; 树莓派3B ZD-8731驱动器 与驱动器配套的步进电机 电源 驱动器需要24V电源供电&#xff08;用电很危险&#xff0c;请注意安全&#xff01;&#xff09; 二、…

linux内核编译无线网卡,ZD1211B芯片USB无线网卡Linux驱动的编译

我用的无线网卡芯片是zd1211b的&#xff0c;在网上找到很多驱动都不好用&#xff0c;最后在这里上找到好用的驱动 我们用的Linux内核是2.6.14的。驱动的交叉编译非常简单&#xff0c;在其Makefile中修改交叉编译器&#xff0c;然后把相应的KERNEL_SOURCE&#xff0c;MODPATH&am…

c -2 数组 指针 %zd 结构体

数组的初始化方式 初始化方式 int a[3] {10, 9, 6};int a[3] {10,9};int a[] {11, 7, 6};int a[4] {[1]11,[0] 7}; 数组与函数 数组作为函数参数,可以省略元素个数. 数组作为函数参数.传递是整个数组的地址,修改函数形参, 数组元素的值,会影响到外面的实参数组. 数组当做函…

特别好用的录屏软件--ZD Soft Screen Recorder_8.0

亲测&#xff0c;特别好用的一款录屏软件&#xff0c;大小仅有2.14M 免安装&#xff0c;即开即用 下载地址&#xff1a;https://download.csdn.net/download/smwykao/10391461