嵌入式系統/看門狗定時器
在嵌入式環境中,遠離實驗室,遠離程式設計師、工程師和技術人員,各種問題都可能發生,嵌入式系統需要能夠自行修復。請記住,一旦你關閉盒子並收縮包裝你的產品,就很難再進入並修復你的錯誤。
在典型的計算機系統中,宇宙射線大約每月翻轉一次RAM位[需要引用]。如果這種情況發生在錯誤的位上,程式可能會“掛起”,陷入一個短暫的無限迴圈。
關閉電源然後重新開啟可以解決問題。但是,當你在巴黎,而你的嵌入式系統在南極洲時,如何擺弄電源開關呢?或者你在地球上,而你的嵌入式系統在海王星附近呢?
嵌入式系統工程師最重要的工具之一是看門狗定時器(WDT)。WDT是一個具有很長時間保險絲(通常為幾秒鐘)的定時器。
WDT 像電影中炸彈上的紅色大數字一樣倒計時到零(*)。如果任其自行執行,最終計數器將達到零。當計數器達到零時,WDT 將重置微控制器(就像電源關閉然後重新開啟一樣)。
當系統正常執行時,你不想讓它隨機重置自身,因此你需要確保你的程式始終在時間用完之前“餵狗”。良好的做法是在倒計時過半之前重置 WDT。例如,如果 WDT 的定時器為 20 秒,那麼你將希望至少每 10 秒餵狗一次。
與我們的英雄在電影中處理炸彈不同,餵狗不會停止倒計時。當代碼使用“重置”或“清除”命令餵狗時,它僅僅將 WDT 重置為某個較大的數字——然後看門狗定時器立即從那裡開始倒計時。
如果程式設計師未能及時餵狗——或者程式因任何原因掛起——那麼遲早 WDT 會超時,程式將重置,希望能夠使你的系統恢復正常。
一些“多級”看門狗有一個第一級會中斷 CPU。相應的中斷處理程式記錄有關當前狀態資訊(崩潰轉儲)的除錯資訊,並嘗試“軟”恢復。如果某些故障導致軟恢復超時,看門狗的最後階段將重置整個系統。 [1]
(*) 一些看門狗向上計數。對於這種型別的看門狗,“餵狗”將它重置為零。如果它達到某個上限,它將重置系統。
- ↑ Jim Lamberson. "使用單級和多級看門狗定時器". 設計世界. 2013.
- Massmind: 看門狗定時器
- 嵌入式控制系統設計/設計模式#看門狗定時器
- "手榴彈定時器:抵禦惡意移動程式碼的看門狗定時器" 由 Frank Stajano 和 Ross Anderson (2000) 撰寫——透過使用“非常節儉的硬體資源”,為“沒有保護模式硬體的非常低成本的微控制器”提供了“保護模式”硬體的大部分優勢。