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