主頁 > 資料庫 > 一篇文章搞定嵌入式看門狗watch dog概述與示例代碼

一篇文章搞定嵌入式看門狗watch dog概述與示例代碼

2020-09-30 13:53:48 資料庫

硬體中的看門狗,不是門衛的意思,而是一只很兇的狗!如果你不按時喂它,它就會讓系統重啟!這反而是我們想要的功能,

看門狗功能:CPU在執行軟體時對跑飛的一種恢復方式,


1、看門狗概述

防止系統跑飛(軟體顛覆)

看門狗可用于受到電氣噪音、電源故障、靜電放電等影響(造成軟體運行進入死回圈,或者死掉)的應用,或需要高可靠性的環境,
看門狗定時器(WDT,Watch Dog Timer)是單片機的一個組成部分,它實際上是一個計數器,一般給看門狗一個數字,程式開始運行后看門狗開始倒計數,

  1. 運行正常情況:
    如果程式運行正常,過一段時間CPU應發出指令讓看門狗復位(喂狗指令:程式陳述句是分散地放在單片機其他控制陳述句中間的),重新開始倒計數,
  2. 運行例外情況:
    一旦單片機由于干擾造成程式跑飛后而陷入某一程式段進入死回圈狀態時,寫看門狗引腳的程式便不能被執行,這個時候,看門狗電路就會由于得不到單片機送來的信號,便在它和單片機復位引腳相連的引腳上送出一個復位信號,使單片機發生復位,即程式從程式存盤器的起始位置開始執行,這樣便實作了單片機的自動復位,
    如果看門狗減到0就認為程式沒有正常作業,強制整個系統復位,因此可以用看門狗防止程式在跑飛的時候回不到正常模式,相當于網路中的TTL(TIME TO LIFE就是能夠活多久,防止一個包在網路中長時間亂竄)

2、看門狗模式(向系統發送RESET,不會產生中斷)

WDT 可以配置為一個看門狗定時器或一個通用的定時器,WDT 模塊的運行由WDCTL 暫存器控制, 當系統重啟后看門狗定時器失能,
WDT 運行在一個頻率為32.768 kHz(當使用32 kHz XOSC時)的看門狗定時器時鐘上,這個時鐘頻率的超時期限等于1.9ms,15.625 ms,0.25 s 和1s,分別對應64,512,8192 和32768 的計數值設定,
當計數器達到設定的計數值時,看門狗會對系統產生一個reset信號,如果在計數器到達設定值之前執行了看門狗clear序列,counter的值會被重置為0,并會繼續遞增,看門狗的clear序列包含:writing 0xA to WDCTL.CLR[3:0], followed by writing 0x5 to the same register bits within one watchdog clock period. 如果這個完整序列不能在watch dog時期結束前完成,看門狗就會產生一個系統reset信號,

3、定時器模式(產生中斷信號)

To start the WDT in timer mode, the WDCTL.MODE[1:0] bits must be set to 11. The timer is started and the counter starts incrementing from 0. When the counter reaches the selected interval value, the timer produces an interrupt request (IRCON2.WDTIF/IEN2.WDTIE).
In timer mode, it is possible to clear the timer contents by writing a 1 to WDCTL.CLR[0]. When the timer is cleared, the content of the counter is set to 0. Writing 00 or 01 to WDCTL.MODE[1:0] stops the timer and clears it to 0.
The timer interval is set by the WDCTL.INT[1:0] bits. The interval cannot be changed during timer operation, and should be set when the timer is started. In timer mode, a reset is not produced when the timer interval has been reached.
注意:如果看門狗模式被選擇,那只能等到芯片reset之后定時器模式才能被選擇,

4、工程DEMO

 /****************************************************************
* 描    述: 打開看門狗后,得記得喂狗,不然系統就會不停地復位了
綠燈閃=喂狗    紅燈閃=沒有喂狗,系統復位
************************************************************/
#include <ioCC2530.h>
#define uchar unsigned char
#define uint unsigned int  
#define LED1 P1_0       // P1.0口控制LED1
#define LED2 P1_1       // P1.1口控制LED2
/***************************************************************
* 名    稱: DelayMS()
* 功    能: 以毫秒為單位延時 16M時約為535,系統時鐘不修改默認為16M
* 入口引數: msec 延時引數,值越大,延時越久
**************************************************************/
void DelayMS(uint msec)
{ 
    uint i,j;    
    for (i=0; i<msec; i++)
        for (j=0; j<535; j++);
}

/*****************************************************************
* 名    稱: InitLed()
* 功    能: 設定LED燈相應的IO口
*************************************************************/
void InitLed()
{
    P1DIR |= 0x03;      //P1.0、P1.1定義為輸出
    LED1 = 1;           //默認LED燈為熄滅狀態
    LED2 = 0;//系統復位時候,紅燈閃爍一次
    DelayMS(100);
    LED2=1;
}
void Init_Watchdog() 
{ 
	WDCTL = 0x00;         //0000 0000   進入IDLE模式,必須進入IDLE才能寫周期
    WDCTL |= 0x08;      //0000 1000選擇看門狗模式,定時器間隔選擇,間隔一秒
}
void FeetDog() //喂狗
{ 
    WDCTL = 0xa0; //清除定時器,1010 0000當0xA跟隨0x5寫入,表示喂狗
    WDCTL = 0x50;     //0101 0000
}
void main()
{
InitLed();        //呼叫初始化函式
//此處讓紅綠燈連閃3次,表示啟動
Init_Watchdog();

    while(1)
    { 
      DelayMS(5000);            
      //綠燈亮
      FeetDog();     //喂狗系統將不再主動復位,綠燈閃
                       //注釋FeetDog函式時系統不斷復位,紅燈閃爍
    //關閉綠燈
    }
} 

/*****************************************************************
* 名    稱: Init_Watchdog()
* 功    能: 看門狗初始化
*************************************************************/
void Init_Watchdog(void) 
{ 
    WDCTL = 0x00;       //打開IDLE才能設定看門狗
    WDCTL |= 0x08;      //定時器間隔選擇,間隔一秒
}
/*初始化第1行令WDCTL為0是因為下表WDCTL中關于MODE介紹——MODE[1:0]是用來模式選擇,這兩位用來在Watchdog模式或Timer模式啟動看門狗定時器,

其中有個說明:
如果在timer模式想切換到看門狗模式,第一步需要停止WDT,然后才能在看門狗模式啟動WDT,當處在看門狗模式,向這些位寫資料是無效的”,因此向MODE中寫00是使讓看門狗處于IDLE模式(停止timer),接著才能啟動WDT,

初始化第2行是設定INT,選擇超期時限為1s(即設定INT[1:0]=00) 
*/



 /*下面是喂狗的函式,其中第1、2行設定設定WDCTL為0xa0,緊接著設定為0x50,是一個clear序列,用于清除定時器*/
void FeetDog(void) 
{ 
    WDCTL = 0xa0;       //清除定時器,當0xA跟隨0x5寫到這些位,定時器被清除
    WDCTL = 0x50; 
    LED2 = 0;           //系統不復位LED2燈長亮
}


因此,整個工程的意思是:初始化看門狗并設定1s鐘的喂狗期限,如果整個工程執行程序中超過1s不喂狗,看門狗timer就會產生一個系統reset信號讓系統重置,因此代碼中69行如果注釋掉喂狗,帶來的結果就是系統不斷重啟LED2不斷閃爍;如果喂狗則紅燈不亮,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/142244.html

標籤:其他

上一篇:LLAPNDK_DOUBLE聲波發送代碼分析

下一篇:stm32cubemx,簡易通信協議,用串口發送資料包,解碼后: 1.改變PB5和PB6的PWM頻率和占空比 2.使PA0輸入捕獲方波 3.相關資訊回傳串口

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more