WINCE平臺下C#應用程序中使用看門狗

jopen 8年前發布 | 10K 次閱讀 WindowsCE C# .NET開發

看門狗定時器(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 = 60000;
            }
            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

來自: http://www.cnblogs.com/leon719/p/5104502.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!