在做项目时添加看门狗一个好的办法
来源:互联网 发布:命令模式入门 java 编辑:程序博客网 时间:2024/06/06 02:14
由于项目到后来抗干扰实验没有通过,需要加入看门狗,喂狗指令怎么加?加到什么地方比较合适?这是一个很有意思的问题,自己总结下,够后人参考。
目前有两个理论:主程序喂狗论和中断喂狗论;主程序喂狗论最大的依据就是:程序跑飞了但中断不一定会死,因为中断一般都有自己固定的中断向量地址,这个时候中断喂狗就失去了看门狗的意思。而中断喂狗论则认为:(1)只在主程序喂狗,由于中断被无意关断,那么主程序实际就只干傻喂狗功能,这种不工作也不死的 ,比死了更难受;(2)如果主程序陷入死循环,而死循环刚好又有喂狗程序,则起不到让系统复位的作用。
实际上无论哪种方法都不可能把所有的意外情况处理掉,我们能做的只是尽可能的处理意外事件。最好的办法就是主程序和中断相结合的方法喂狗,这个需要根据实际程序中断的特点编写相应的喂狗功能。我有两种想法实现主程序和中断相结合的办法。
(1)interrupt void ISR(void)//中断服务程序,定时周期为T
{
if(Dog_Save != Dog_Flag)//看门狗标志位不同表示程序在正常运行
{
WDT=0;//喂狗
Dog_Count=0;//用于计数
}
else
{
WDT=0;//喂狗
Dog_Count++;
if(Dog_Count>50)//死机50个周期后开始不喂狗
while(1);//等待看门狗使系统复位,此处也可软件复位。
}
}
main()
{
Dog_Flag = 1;//看门狗标志位
...............
Dog_Flag = 2;
..............
Dog_Flag = 3;
..............
}
在主程序中设置许多软狗标志位,定时器中不断检测软狗标志位是否变化,以此来检测主程序是否在正常运行。从而使看门狗系统能够可靠的保证程序在异常情况下实现系统复位!
(2)
interrupt void ISR(void)//中断服务程序,定时周期为T
{
Dog_Count++;l
if(Dog_Count<50)//如果程序正常运行,主程序中有清0,一定会喂狗。
{
WDT = 0;//喂狗
}
else
{
while(1);//如果程序死机50个周期,开始不喂狗,等待硬件复位。
}
}
main()
{
Dog_Count = 0;//在主程序中清除计数位
...............
Dog_Count = 0;
..............
Dog_Count = 0;
..............
}
主程序中清0相当于看门狗喂狗的条件,这样就可以实现主程序和中断相结合,最终抗干扰效果要比单一的方法好很多。- 在做项目时添加看门狗一个好的办法
- 想做一个预览窗口任意大小的camera,有什么好的办法
- 做一个好的developer
- 做一个好的程序员
- 做一个好的项目经理
- Android Framework学习笔记 -- 在android源码添加项目的正确办法
- SOS!!!在做一个SSH项目的时侯遇到困难了~~~~~~~~~
- 最近在做一个虚拟示波器的项目
- 现在在做电子地图的一个小项目
- 最近在做一个关于颜色色差的项目,自己动手做了一个
- 好难的一个项目。。
- VS中在一个项目中添加现有的数据库
- 做项目(OA)我了解到业务逻辑在做项目时是一个问题
- 如何做一个好的下属?
- 如何做一个好的互联网老板
- 做一个好老公的时间表
- 如何做一个好的程序员?
- 做一个好的宅人
- getClass()与getName()和getSimpleName()的区别
- 洛谷的群号
- 8.10 直播回顾 | 一个小时内,我们用UWA GOT解决了这些问题...
- bat文件获取管理员权限
- 【mysql】sql语句的四舍五入
- 在做项目时添加看门狗一个好的办法
- 线段树模板
- Spring Boot支持Undertow服务器,支持http、https(ssl、tls)双协议,支持双端口
- 新手开发中常用ES6基础知识总结
- Upload
- 从Android/Java基础之上学习C/C++语言(6)--C语言基础--联合体与枚举
- C语言实现CRC32算法
- TORCS无人驾驶笔记
- 滑动内联动效的实现之图片平行逆差效果