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

  看门狗定时器是单片机的一个组成部分,在单片机程序的调试和运行中都有着重要的意义。它的主要功能是在发生软件故障时,通过使器件复位(如果软件未将器件清零)将单片机复位。也可以用于将器件从休眠或空闲模式唤醒,看门狗定时器对微控制器提供了独立的保护系统,当系统出现故障时,在可选的超时周期之后,看门狗将以RESET信号作出响应,像x25045就可选超时周期为1.4秒、600毫秒、200毫秒三种。当你的程序死机时,x25045就会使单片机复位。
 

  近日使用wince平台做C#的开发,由于设备提供商的设备不够稳定,有时会出现在运行过程中设备黑屏、假死的现象,故在程序中加入看门狗功能。当设备假死导致程序停止工作之后,没有及时喂狗,可以通过CPU让设备重启,恢复软件的正常工作状态,从一定程度上防止因为硬件假死导致程序不能正常工作的状态。

  以下是基于wince嵌入式开发平台写的一个看门狗测试程序,经测试可以达到预期使用效果,现在共享给需要的人。

  要说明的一点是,要使用看门狗的功能,要先调用看门狗的动态库,我在附件的项目中有提供。(FeedDog/bin/Debug/WDogDLL.dll)

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices; namespace FeedDog
{
//作者:姚量
//日期:2016-1-5
//说明:基于WINCE5.0平台的看门狗测试程序
//博客:http://www.cnblogs.com/leon719/
public partial class Form1 : Form
{ //初始化应用程序看门狗
[DllImport("WDogDLL.dll")]
public extern static bool InitWatchdog(uint dwPeriod); //启动看门狗。注意:初始化看门狗后,启动看门狗才有监控效果
[DllImport("WDogDLL.dll")]
public extern static bool StartWatchdog(); //停止看门狗。停止看门狗后,一直没有喂狗,也不重启系统。
[DllImport("WDogDLL.dll")]
public extern static bool StopWatchdog(); //喂狗函数。初始化并且启动看门狗后,周期内不喂狗,则重启设备
[DllImport("WDogDLL.dll")]
public extern static bool FeedWatchdog(); public Form1()
{
InitializeComponent();
} private void btn_init_Click_1(object sender, EventArgs e)
{
uint feedPeriod;
try
{
feedPeriod = Convert.ToUInt32(tb_feedTime.Text.Trim());
}
catch
{
feedPeriod = ;
}
if (InitWatchdog(feedPeriod))
{
AddInfo("初始化看门狗成功!");
}
else
{
AddInfo("初始化看门狗失败!");
}
} private void btn_start_Click_1(object sender, EventArgs e)
{
if (StartWatchdog())
{
AddInfo("启动看门狗成功!");
}
else
{
AddInfo("启动看门狗失败!");
}
} private void btn_stop_Click_1(object sender, EventArgs e)
{
if (StopWatchdog())
{
AddInfo("停止看门狗成功!");
}
else
{
AddInfo("停止看门狗失败!");
}
} private void btn_feed_Click_1(object sender, EventArgs e)
{
if (FeedWatchdog())
{
AddInfo("喂狗成功!");
}
else
{
AddInfo("喂狗失败!");
}
} private void AddInfo(string msg)
{
lb_feedback.Text = msg;
}
}
}

附件地址:

http://pan.baidu.com/s/1o7vDdI6

WINCE平台下C#应用程序中使用看门狗的更多相关文章

  1. 在多任务(RTOS)环境中使用看门狗

    最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章.从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁.为了阅读方便,有些航天领域名词 ...

  2. MacOS平台下@rpath在动态链接库中的应用

    一.背景介绍 公司开发的一个底层库被用在了Mac平台的多个产品中.在开发这个底层库的初期,对于Mac OSX下的Install name 并没有过多的了解.对于XCode中的install name项 ...

  3. AMD平台下在Windows虚拟机中安装Mac10.8.6【Written By KillerLegend】

    我的电脑CPU是AMD,以前在虚拟机中装过Windows操作系统,感觉很简单,这几天想体验一下苹果系统,未来也可能会从事Mac相关软件开发,于是从早上便兴致勃勃的开始了--于是悲剧也开始了,上网各种查 ...

  4. macOS平台下Qt应用程序菜单翻译及调整

    一.翻译 在macOS平台上,系统会为应用程序菜单添加一些额外的菜单项.先来看一些典型的例子: 这个是Qt Creator的菜单,系统为应用程序菜单添加了一些桌面显示操作相关的菜单项: 这个是Qt D ...

  5. freecplus框架,Linux平台下C/C++程序员提高开发效率的利器

    目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参数文 ...

  6. 对于Linux平台下C语言开发中__sync_函数的认识

      reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built ...

  7. 【NodeJs】Ctrl+C在Linux平台和Windows平台下的TCP连接中的不同表现

    Linux平台:CentOS release 6.5 (Final) Windows平台:Windows 7 旗舰版 服务器端代码如下: var net = require('net'); var s ...

  8. 对于Linux平台下C语言开发中__sync_函数的认识(转)

    reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...

  9. 利用zabbix监控ogg进程(Windows平台下)

    本文给大家介绍如何监控windows平台下的ogg程序.(注:所有操作都在administrator用户下面进行操作) 监控linux平台下的ogg程序请看:https://www.cnblogs.c ...

随机推荐

  1. page cache和buffer cache

    因为要优化I/O性能,所以要理解一下这两个概念,这两个cache着实让我迷糊了好久,通过查资料大概明白了两者的区别,试着说下. page cache:文件系统层级的缓存,从磁盘里读取的内容是存储到这里 ...

  2. MySQL 表分区A

    在MySQL中表的分区类型总的来说有四种: 第一种:range分区.基于一个给定的区间范围,把数据分配到不同的分区. 第二种:list   分区.基本枚举的值列表进行分区. 第三种:hast 分区.基 ...

  3. DNS解析

    大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf.很多网友对此文件的用处不太了解.其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名 ...

  4. 闪存主控IC的作用

    闪存主要是由闪存芯片.主控芯片.晶振.PCB板等部件组成的.其中主控芯片相当于闪存的“灵魂”,它控制着闪存的工作.主控芯片也是处理单元,在里面写入的程序对整个电路做控制.主控IC是把flash跟hos ...

  5. 转 C语言面试题大汇总

    转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题:   C语言面试题大汇总,个人觉得还是比较全地!!!  作 者:   free131 (白日?做梦!)   信 誉 值:   100    ...

  6. Junk-Mail Filter(并差集删点)

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  7. Android开发_SQLite使用方法技巧

    SQLite介绍 SQLite是轻量级的.嵌入式的.关系型数据库,目前已经在iPhone.Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠.SQLite嵌入到使用 ...

  8. Node.js 小工具--supervisor

    Node.js 在写文件的时候 一旦更改.每次都得重新运行 app.js. 很麻烦. supervisor 工具可以帮助你 监听文件改动,自动重启. sudo npm install -g super ...

  9. 在不同Activity之间传递数据的四种常用方法

    在Android中传递数据的方法非常多,本次介绍4中比较常用的数据传递方法: 1.通过Intent传递数据 2.通过静态变量(static)传递数据 3.通过剪贴板(Clipboard)传递数据 4. ...

  10. 空类的默认函数—— SAP电面(2)/FEI

    定义一个空类 class Empty { }; 默认会生成以下几个函数 2. 拷贝构造函数 Empty(const Empty& copy) { } 3. 赋值运算符 Empty& o ...