WINCE平台下C#应用程序中使用看门狗
看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
近日使用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#应用程序中使用看门狗的更多相关文章
- 在多任务(RTOS)环境中使用看门狗
最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章.从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁.为了阅读方便,有些航天领域名词 ...
- MacOS平台下@rpath在动态链接库中的应用
一.背景介绍 公司开发的一个底层库被用在了Mac平台的多个产品中.在开发这个底层库的初期,对于Mac OSX下的Install name 并没有过多的了解.对于XCode中的install name项 ...
- AMD平台下在Windows虚拟机中安装Mac10.8.6【Written By KillerLegend】
我的电脑CPU是AMD,以前在虚拟机中装过Windows操作系统,感觉很简单,这几天想体验一下苹果系统,未来也可能会从事Mac相关软件开发,于是从早上便兴致勃勃的开始了--于是悲剧也开始了,上网各种查 ...
- macOS平台下Qt应用程序菜单翻译及调整
一.翻译 在macOS平台上,系统会为应用程序菜单添加一些额外的菜单项.先来看一些典型的例子: 这个是Qt Creator的菜单,系统为应用程序菜单添加了一些桌面显示操作相关的菜单项: 这个是Qt D ...
- freecplus框架,Linux平台下C/C++程序员提高开发效率的利器
目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参数文 ...
- 对于Linux平台下C语言开发中__sync_函数的认识
reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built ...
- 【NodeJs】Ctrl+C在Linux平台和Windows平台下的TCP连接中的不同表现
Linux平台:CentOS release 6.5 (Final) Windows平台:Windows 7 旗舰版 服务器端代码如下: var net = require('net'); var s ...
- 对于Linux平台下C语言开发中__sync_函数的认识(转)
reference:http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html#Atomic-Builtins A built-i ...
- 利用zabbix监控ogg进程(Windows平台下)
本文给大家介绍如何监控windows平台下的ogg程序.(注:所有操作都在administrator用户下面进行操作) 监控linux平台下的ogg程序请看:https://www.cnblogs.c ...
随机推荐
- IO之读入文件
整个java.io包中最重要的就是5个类和一个接口,5个类指的是File,OutputStream,InputStream,Reader,Writer:一个接口是Serializable. 在整个io ...
- 电脑硬件扫盲--CPU 显卡
CPU: 主要2个厂商 Inter:core(酷睿) > pentinum(奔腾) > celeron(赛扬) AMD:athlon(速龙) > semporn(闪龙) 主频(GHz ...
- codeforces 546E. Soldier and Traveling 网络流
题目链接 给出n个城市, 以及初始时每个城市的人数以及目标人数.初始时有些城市是相连的. 每个城市的人只可以待在自己的城市或走到与他相邻的城市, 相邻, 相当于只能走一条路. 如果目标状态不可达, 输 ...
- 经验分享:CSS浮动(float,clear)通俗讲解 太棒了,清晰明了
很早以前就接触过CSS,但对于浮动始终非常迷惑,可能是自身理解能力差,也可能是没能遇到一篇通俗的教程. 前些天小菜终于搞懂了浮动的基本原理,迫不及待的分享给大家. 写在前面的话: 由于CSS内容比较多 ...
- Windows Azure 社区新闻综述(#73 版)
欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure的社区推动新闻.内容和对话. 以下是过去一周基于您的反馈汇集在一起的内容: 文章.视频和博客文章 · Windows A ...
- POJ 3261 Milk Patterns(后缀数组+二分答案)
[题目链接] http://poj.org/problem?id=3261 [题目大意] 求最长可允许重叠的出现次数不小于k的子串. [题解] 对原串做一遍后缀数组,二分子串长度x,将前缀相同长度超过 ...
- 在美国,一名 Uber 司机能赚多少?
在美国,Uber 司机是最热门的职业.有了 uberX,任何有车一族都能成为司机.Uber 让我们很容易成为司机. 虽然 Uber 做不到赚得盆满钵满,但对于水深火热的司机这一行来说,多了许多盈利机会 ...
- java的数学函数总结
java的数学函数都放在java.lang这个包中,并且这些函数的方法在类Math中是作为static方法出现的,所以要引用一个特定的函数,只需将类Math和一个圆点写在要使用的方法前就好.如方法sq ...
- c 查找A字符串在B字符串中是否存在,计算出现的次数
主要是应用了头文件<string.h>中的strstr函数 char * strstr(const char *s1, const char *s2); 查找是否存在: #include& ...
- 关于js封装框架类库之属性操作
在对DOM对象操作时,往往都要涉及到其属性的操作,为了提高开发效率,同时兼顾浏览器的性能,在这简单的封装了几个常见的属性.因为是模块化,在这只是引入了部分代码,其他代码在前几篇模块封装中有写.如有不足 ...