本文介紹看門狗定時器,通??s寫為 WDT,也稱為計算機正常運行定時器或 COP。有外部看門狗設備和內部看門狗功能。本文僅介紹內部看門狗。
什么是看門狗定時器?(一個非常規的類比)
看門狗定時器是一種專門的定時器模塊,可幫助微處理器從故障中恢復。如果看門狗定時器到達其計數周期的末尾,它將重置整個處理器系統。為了防止這種情況,處理器必須執行某種類型的特定操作來重置看門狗。因此,可以配置看門狗定時器,使其僅在發生處理器故障時到達其計數周期的末尾,并且通過強制系統復位,看門狗定時器幫助處理器從故障模式中逃脫并繼續正常運行。
為了可視化 WDT 的功能,我有一個非常規的類比供您考慮。
《迷失》是一部廣受歡迎的電視劇,講述了飛機失事后一群幸存者被困在一個神秘的島嶼上。其中一個子情節涉及的角色認為他們必須在屏幕上的計數器變為 0 之前輸入一串簡短的數字,否則世界將結束。
當輸入系列時,計數器重置并再次開始倒計時。輸入這一系列數字只是心理實驗的一部分,還是世界的命運岌岌可危,這永遠不清楚。找出答案的唯一方法是不輸入數字。角色們可以自由外出、尋找食物、游泳——但他們必須及時返回以重置計數器。從計算機的角度來看,接收到正確的輸入意味著外面有一個人在正常操作并為柜臺服務。沒有收到正確的輸入表明有問題。
看門狗定時器的運行方式與Lost中的計算機系統類似。微控制器的其余部分是壓力過大的角色,他們可以自由地做任何事情,但必須定期為計數器提供服務,否則微控制器會復位(又名世界末日)。正確操作的軟件和硬件將在固定的時間內為看門狗提供服務,而有故障的軟件或硬件可能不會。
內部看門狗定時器的類型
有兩種類型的看門狗,非窗口和窗口。如果服務計數器延遲,這兩種類型都會導致復位。
如果服務發生得太快,窗口看門狗也會導致復位。此圖顯示了使用遞增計數器的看門狗的時序。一些看門狗使用遞減計數器,但原理是一樣的。
看門狗定時器的時序
對于非窗口或窗口看門狗,在計數器達到上限值之前的任何服務都會重置計數器并且一切正常。窗口式看門狗會添加一個下限并創建一個計數窗口。下限和上限之間的任何服務都可以。這里是圖表的詳細描述。
A - 啟動后不久,程序使用計數器的上限初始化看門狗并啟用計數。對于窗口式看門狗,還設置了下限。
B和C - 軟件在計數器達到上限之前成功地為計數器提供服務,對于窗口式看門狗,在下限之后。服務后,計數器復位為 0 并再次開始向上計數。一切都好。
D - 程序不服務計數器并且計數達到上限??撮T狗復位微控制器。
D 到 E - 微控制器啟動并初始化并啟用看門狗。
E - 看門狗開始計數。
F - 程序在計數器達到上限之前為計數器提供服務,對于窗口看門狗,在下限之后提供服務。計數器重置為 0 并重新開始計數。一切都好。
G - 程序在計數達到窗口看門狗的下限之前為計數器提供服務。對于沒有下限的非窗口看門狗,沒有復位,計數器變為 0 并重新開始計數。對于窗口看門狗,微控制器被復位。
看門狗的細節差異很大。他們可以向上或向下計數。他們使用不同的時鐘。他們有不同的上限和下限選擇。以下部分介紹了許多特性,但只是一個概述。
看門狗初始化
初始化看門狗可能很棘手。例如,一些看門狗會在微控制器啟動時自動啟用。
如果您不使用看門狗,則必須在啟動時包含代碼以禁用它。我目前使用的看門狗就是這種情況。如果我的程序需要運行超過一秒,我必須禁用看門狗或更改窗口設置!
一些看門狗只允許對控制寄存器進行一次寫入作為安全功能。此功能可防止失控軟件在初始化后更改設置。如果您在具有此功能的看門狗中使用默認設置,請確保覆蓋默認設置,即使位值相同。這“鎖定”了價值觀并保持了安全性。
如果您使用 C 編程,請注意在啟動代碼中可能會初始化看門狗,它在您的 main() 函數之前運行。開發環境有時會自動包含此代碼,作為運行標準 C 程序的一部分。此代碼設置內存和中斷向量表。在您的啟動代碼中查看看門狗的操作并根據您的系統要求進行修改。
窗口設置
看門狗可以是非窗口的和窗口的。單個計時器通過將窗口的下限作為選項來提供兩種類型是很常見的。窗口的大小隨看門狗的不同而不同。
我目前使用的看門狗的下限固定在上限的75%。另一個看門狗可以選擇上限的 75%、50%、37.5% 或 25%。還有一個看門狗獨立設置上限和下限。關于如何選擇上限也存在很大差異。
服務 AKA 看門狗定時器復位
定期重置看門狗計數器稱為“服務”定時器。不同的看門狗定時器將有不同的服務要求。所有服務要求都使用在失控軟件執行期間不太可能發生的操作。
我目前使用的看門狗需要兩次寫入“服務寄存器”,其值為 0x55,后跟 0xAA。如果將 0x55 或 0xAA 以外的任何值寫入服務寄存器,則任何時候微控制器都會立即復位。
另一個看門狗需要對值為 0xAAAA 的服務寄存器進行單次寫入。似乎對數字 0xA 和 0x5 以及它們交替的 1010 和 0101 位模式很著迷。一個計時器通過使用具有幻數 0x5743 的單次寫入來對抗這種趨勢。
睡眠模式
睡眠和其他低功耗模式使事情復雜化。如果處理器進入睡眠狀態并停止執行,看門狗應該怎么做?看門狗時間應該靜止嗎?
當處理器進入和退出深度睡眠時,我當前使用的看門狗會在初始計數處停止并重新啟動。這個話題很復雜,當微控制器使用低功耗模式時,您需要研究看門狗的操作。
漸進式反應
微控制器的完全復位可能過于苛刻。一些看門狗具有允許漸進式響應的功能。
例如,看門狗可能在復位之前的某個時間有一個中斷請求選項。此功能允許中斷服務程序在看門狗繼續計數時修復或記錄問題。如果中斷程序不能讓事情回到正軌,就會發生復位。
看門狗戰略
我使用術語“策略”來確定在哪里設置看門狗的時間限制。最簡單的策略是使用非窗口看門狗,其超時時間遠長于服務看門狗之間程序的任何可能執行時間。我將其稱為“重置按鈕”策略,因為它取代了按下重置按鈕的人。醫療設備或制造機器人等關鍵系統的策略需要更快的響應。
看門狗策略可以考慮許多因素:
系統是否使用可預測的主循環或基于實時操作系統的復雜多任務結構?
看門狗重置是否應該啟動一系列自動系統檢查?
看門狗是診斷和解決問題的一系列嘗試的最后階段嗎?
您想在系統啟動時測試看門狗以及其他檢查嗎?
看門狗策略是一個復雜的話題,并且非常依賴于應用程序。
在復位微控制器之前,看門狗在復位后的狀態寄存器中設置一個位。通常該位與其他復位狀態(例如掉電復位位)一起存儲。測試看門狗復位位應該是策略的一部分。
至少,在啟動期間測試該位并做一些事情來指示問題。否則,故障可能會被忽視,尤其是不常見的故障。例如,在顯示屏上輸出消息或點亮 LED。
-
看門狗
+關注
關注
10文章
560瀏覽量
70790 -
定時器
+關注
關注
23文章
3246瀏覽量
114720 -
WDT
+關注
關注
0文章
19瀏覽量
17683
發布評論請先 登錄
相關推薦
評論