<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          看門狗你確定會用了?(經(jīng)驗干貨滿滿)

          共 1637字,需瀏覽 4分鐘

           ·

          2021-02-22 07:15

          看門狗?

          看門狗(watchdog)-字面上的意思就是一條看門的dog,如果一切正常dog就不回叫,如出現(xiàn)異常dog就會叫,并且把你逼到門外!


          其實看門狗不是什么特殊的外設(shè),一般我們叫看門狗也叫做看門狗定時器,其實他就是一個計數(shù)器,在使用看門狗得時候給其一個值,然后計數(shù)器從0開始不斷的累計(根據(jù)計數(shù)方向),在計數(shù)器到達預(yù)設(shè)值的值之前我們可以重置看門狗,簡稱喂狗。那么如果我們程序沒有及時喂狗,當計數(shù)器到達預(yù)設(shè)值值時便會復(fù)位芯片。


          好了,看門狗知識就這么多!今天的文章就結(jié)束了嗎?不是的,大家也可以看到下面還有很多內(nèi)容,那我這里問大家一個問題:看門狗就是程序跑飛了沒及時喂狗就復(fù)位了,程序重新運行,這樣有什么意義?帶著這個問題繼續(xù)往下看。


          看門狗分類


          按照看門狗實現(xiàn)方式分為:硬件看門狗和軟件看門狗。



          硬件看門狗


          我們大部分單片機都會有看門狗這一個功能,不過有少數(shù)芯片沒有,那些個時候我們想使用該功能我們就需要外擴對應(yīng)的硬件看門狗芯片,比如MAX813等。


          大體工作方式:硬件看門狗芯片會有接收單片機的置位信號和控制單片機復(fù)位的引腳。單片機可以根據(jù)看門狗芯片信號需求,可以通過io口進行喂狗;如果程序異常,看門狗會由于收不到單片機給的信號而發(fā)出單片機復(fù)位信號給單片機,讓單片機進行復(fù)位。


          (如果我們單片機存在watchdog其實也是實現(xiàn)類似的原理都屬于硬件看門狗)




          軟件看門狗


          我們都知道看門狗其實就是一個定時器,不過當定時器到達系統(tǒng)就會復(fù)位,那么我們完全可以采用我們普通的定時器進行模擬。


          大體實現(xiàn)方式:定時器模擬,我們在主程序中喂狗,就可以對定時器進行計數(shù)器清零即可,當我們沒有及時喂狗,會進入定時器中斷,在中斷中我們可以觸發(fā)軟件復(fù)位,或者通過程序跳轉(zhuǎn)到程序入口處。


          軟件watchdog的缺點是其本質(zhì)上也是軟件,可能當遇到中斷無法觸發(fā)的異常,復(fù)位MCU就會失效。


          ?


          從依賴性角度:看門狗也可以分為獨立看門狗和窗口看門狗,獨立看門狗不受系統(tǒng)影響有自己內(nèi)部獨立的時鐘源等,監(jiān)控整個系統(tǒng)異常。而窗口看門狗主要是監(jiān)控軟件上的錯誤,且其時鐘來源于控制器的時鐘。下面重點講講窗口看門狗:



          窗口看門狗


          獨立看門狗在0-重載值之間都可以進行喂狗操作,這樣如果程序跑飛反復(fù)在喂狗,這樣程序無法復(fù)位。所以就有了窗口看門狗,窗口看門狗存在喂狗窗口上限和下限,喂狗只能在窗口里才能喂狗,其他時間喂狗都會復(fù)位。




          看門狗如何使用?


          1)一定要注意并不是所有的系統(tǒng)都適合使用看門狗,比如說在我們的比較精密的控制系統(tǒng),一旦我們程序除了一些小異常而導(dǎo)致芯片復(fù)位,可能會導(dǎo)致系統(tǒng)時續(xù)混亂而造成較大得設(shè)備損害!


          2)對于看門狗一般用在,比如溫控系統(tǒng),顯示系統(tǒng)等復(fù)位系統(tǒng)對整個系統(tǒng)影響不是很大的延時系統(tǒng)等!這樣能夠在系統(tǒng)異常后復(fù)位系統(tǒng)讓系統(tǒng)繼續(xù)運行。?


          3)對于部分MCU在看門狗復(fù)位之前會出發(fā)一個中斷服務(wù)函數(shù),給程序最后進行喂狗的機會。這個是系統(tǒng)給我們的機會,我們可以對當前MCU的狀態(tài)進行保存等日志信息記錄,供軟件研發(fā)人員進行系統(tǒng)的分析。


          4)同時對于喂狗每個人持有不同的態(tài)度,有些人認為需要在主程序中喂狗,有些則認為需要在中斷里面喂狗;不過在中斷里面喂狗存在一個問題是,對于MCU主程序處于死循環(huán)的時候,而我們的中斷服務(wù)函數(shù)可以正常運行,這樣無法出發(fā)看門狗復(fù)位。


          所以常用做法是,通過中斷置位相關(guān)標志位,然后主程序檢測標志位進行喂狗操作,至于更加強大的看門狗機制,我們需要在實際的項目中根據(jù)需求來制定相關(guān)策略。





          推薦閱讀:
          專輯|Linux文章匯總
          專輯|程序人生
          專輯|C語言
          我的知識小密圈

          關(guān)注公眾號,后臺回復(fù)「1024」獲取學習資料網(wǎng)盤鏈接。

          歡迎點贊,關(guān)注,轉(zhuǎn)發(fā),在看,您的每一次鼓勵,我都將銘記于心~






          瀏覽 103
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚州免费视频 | 午夜黄网| 一区二区三区成人电影 | 日韩视频专区 | 午夜欧美精品久久久久久久 |