看門狗能夠及時(shí)檢測(cè)并采取相應(yīng)措施,從而避免系統(tǒng)長(zhǎng)時(shí)間處于故障狀態(tài)。本文將詳細(xì)介紹看門狗的工作原理及其正確使用方法。
同時(shí)通過具體示例解析,教你如何在一個(gè)簡(jiǎn)單的LuatOS項(xiàng)目中集成看門狗定時(shí)器,設(shè)置適當(dāng)?shù)膮?shù)來確保系統(tǒng)在正常運(yùn)行和故障場(chǎng)景下都能自動(dòng)恢復(fù)。?
▼ 看門狗簡(jiǎn)介 ▼
看門狗(Watch Dog Timer,WDT)——是一種監(jiān)控電路,主要應(yīng)用于嵌入式系統(tǒng),目的是為了提高系統(tǒng)的可靠性和穩(wěn)定性。在看門狗電路的幫助下,當(dāng)系統(tǒng)出現(xiàn)異常,如程序跑飛或死循環(huán)時(shí),能夠自動(dòng)復(fù)位并重新啟動(dòng)系統(tǒng)。
工作原理:
看門狗電路通常包括一個(gè)定時(shí)器、一個(gè)喂狗信號(hào)和一個(gè)復(fù)位(Reset)輸出。在正常的系統(tǒng)運(yùn)行過程中,主控制器(MCU)會(huì)定期向喂狗信號(hào)發(fā)送一個(gè)脈沖,以“喂”看門狗,防止其計(jì)時(shí)到達(dá)預(yù)設(shè)值。如果MCU由于某種原因未能在規(guī)定時(shí)間內(nèi)喂狗,看門狗定時(shí)器將會(huì)計(jì)滿并輸出一個(gè)復(fù)位信號(hào),將MCU復(fù)位。
應(yīng)用架構(gòu):
在實(shí)際應(yīng)用中,看門狗芯片通常連接到MCU的一個(gè)GPIO端口。MCU在其正常運(yùn)行期間會(huì)定期向該端口寫入一個(gè)高電平或低電平信號(hào),以此告訴看門狗它仍然正常工作。如果MCU未能按時(shí)發(fā)出信號(hào),看門狗將觸發(fā)復(fù)位操作。
芯片引腳功能:
某些看門狗芯片,如TPV6823具有多個(gè)引腳:包括供電引腳(VCC)、喂狗信號(hào)引腳(WDI)、復(fù)位輸出引腳(RESETn)和手動(dòng)復(fù)位輸入引腳(MRn)。這些引腳提供了多種復(fù)位方式和時(shí)間設(shè)置,以適應(yīng)不同的應(yīng)用需求。
定時(shí)時(shí)間:
看門狗的定時(shí)時(shí)間通常需要保持在一個(gè)相對(duì)較長(zhǎng)的周期,例如200毫秒左右。這樣的設(shè)置是為了確保在正常運(yùn)行中,即使MCU由于干擾而未能及時(shí)喂狗,看門狗也不會(huì)立即復(fù)位系統(tǒng),從而給MCU足夠的時(shí)間來響應(yīng)和處理問題。
軟硬件看門狗的區(qū)別:
硬件看門狗利用獨(dú)立的定時(shí)器電路來實(shí)現(xiàn)監(jiān)控功能,具有較高的可靠性。軟件看門狗則使用處理器內(nèi)部的定時(shí)器或其他機(jī)制來實(shí)現(xiàn),雖然在一定程度上可以簡(jiǎn)化硬件設(shè)計(jì),但在可靠性方面通常不如硬件看門狗。
WDT庫提供了一系列用于管理和操作看門狗定時(shí)器的API函數(shù),開發(fā)者可以通過Air201方便地在LuatOS系統(tǒng)中管理看門狗定時(shí)器,從而提高設(shè)備的穩(wěn)定性。
軟硬件相關(guān)準(zhǔn)備工作及最新示例源碼下載詳見:
??https://docs.openluat.com/air201/luatos/app/service/wdt/??
一、看門狗示例解析
本文示例分為兩個(gè)部分:
正常運(yùn)行情況和故障場(chǎng)景模擬。
在正常運(yùn)行情況下,示例代碼會(huì)初始化看門狗庫,并設(shè)置超時(shí)時(shí)間和喂狗周期。然后,創(chuàng)建一個(gè)任務(wù),該任務(wù)會(huì)定期喂狗,以防止看門狗定時(shí)器超時(shí)。如果看門狗定時(shí)器超時(shí),系統(tǒng)將自動(dòng)重啟。
在故障場(chǎng)景模擬部分,我們添加了一個(gè)新的任務(wù)fault_task,該任務(wù)進(jìn)入一個(gè)死循環(huán),不進(jìn)行喂狗操作。這樣,當(dāng)看門狗定時(shí)器超時(shí)后,系統(tǒng)將自動(dòng)重啟,模擬了設(shè)備在故障場(chǎng)景下的自動(dòng)恢復(fù)能力。
1.1 程序正常運(yùn)行
1.1.1 示例代碼介紹
項(xiàng)目信息:
在開頭定義了項(xiàng)目名稱(PROJECT)和版本(VERSION),并通過日志輸出這些信息。
引入系統(tǒng)庫:
通過require("sys") 引入了sys庫,這是LuatOS中常用的系統(tǒng)庫。
任務(wù)初始化:
使用sys.taskInit函數(shù)創(chuàng)建一個(gè)新的任務(wù)。在任務(wù)中檢查wdt庫是否可用,如果不可用,則進(jìn)入一個(gè)無限循環(huán),每秒鐘輸出一次提示信息。
WDT配置:
初始化wdt庫,設(shè)置超時(shí)時(shí)間為9秒。設(shè)置一個(gè)定時(shí)器每3秒喂一次看門狗,確保設(shè)備在正常運(yùn)行的情況下不會(huì)重啟;若發(fā)生軟件崩潰或硬件故障,最多18秒后將自動(dòng)重啟設(shè)備。
運(yùn)行系統(tǒng):
最后通過sys.run() 啟動(dòng)系統(tǒng),后面不應(yīng)添加任何其他語句。
1.1.2 完整代碼展示
1.1.3 運(yùn)行結(jié)果展示
通過Luatools工具查看日志:
1.2 添加死循環(huán)模擬故障場(chǎng)景
1.2.1 示例代碼介紹
我們?cè)谠惺纠a中創(chuàng)建了一個(gè)新的任務(wù),命名為fault_task,它將進(jìn)入一個(gè)死循環(huán)。由于這個(gè)新任務(wù)不會(huì)喂看門狗,設(shè)備將在超時(shí)后自動(dòng)重啟。這樣,我們就可以有效地模擬看門狗的超時(shí)情況。
1.2.2 完整代碼展示
1.2.3 運(yùn)行結(jié)果展示
二、看門狗的擴(kuò)展
2.1 看門狗定時(shí)器的應(yīng)用場(chǎng)景
看門狗定時(shí)器廣泛應(yīng)用于各種嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備中,特別是在需要高可靠性的應(yīng)用場(chǎng)景中。
一些典型的應(yīng)用場(chǎng)景包括:
工業(yè)控制系統(tǒng):
在工業(yè)生產(chǎn)過程中,控制系統(tǒng)需要高度穩(wěn)定和可靠,看門狗定時(shí)器可以確保系統(tǒng)在受到干擾或異常情況時(shí)能夠迅速恢復(fù)。
車載電子系統(tǒng):
車載電子系統(tǒng)面臨著復(fù)雜的電磁環(huán)境和振動(dòng),看門狗定時(shí)器可以幫助系統(tǒng)在上電復(fù)位后保持穩(wěn)定運(yùn)行,防止因軟件或硬件故障導(dǎo)致的系統(tǒng)死機(jī)。
醫(yī)療設(shè)備:
醫(yī)療設(shè)備對(duì)穩(wěn)定性和可靠性有很高的要求,看門狗定時(shí)器可以確保設(shè)備在長(zhǎng)時(shí)間運(yùn)行過程中不會(huì)因?yàn)楣收隙V构ぷ鳎瑥亩U匣颊叩陌踩驮O(shè)備的連續(xù)性。
通信設(shè)備:
在通信系統(tǒng)中,看門狗定時(shí)器可以用于監(jiān)控和保護(hù)網(wǎng)絡(luò)設(shè)備,確保數(shù)據(jù)傳輸?shù)姆€(wěn)定性和可靠性。
2.2 看門狗定時(shí)器的設(shè)計(jì)考慮因素
在設(shè)計(jì)和實(shí)現(xiàn)看門狗定時(shí)器時(shí),需要考慮以下幾個(gè)關(guān)鍵因素:
超時(shí)時(shí)間:
超時(shí)時(shí)間是指看門狗定時(shí)器從開始計(jì)時(shí)到觸發(fā)復(fù)位信號(hào)的時(shí)間間隔。這個(gè)時(shí)間需要根據(jù)具體應(yīng)用的需求來設(shè)定,通常需要平衡系統(tǒng)的穩(wěn)定性和響應(yīng)速度。
喂狗周期:
喂狗周期是指主控制器向看門狗芯片發(fā)送脈沖的時(shí)間間隔。喂狗周期應(yīng)該設(shè)置得足夠短,以防止看門狗定時(shí)器在正常運(yùn)行中誤觸發(fā)復(fù)位。
看門狗復(fù)位輸出:
看門狗定時(shí)器通常具有一個(gè)復(fù)位輸出引腳,用于向主控制器提供復(fù)位信號(hào)。在設(shè)計(jì)時(shí),需要確保復(fù)位輸出引腳的電平和主控制器的復(fù)位輸入引腳兼容。
看門狗功耗:
在設(shè)計(jì)看門狗定時(shí)器時(shí),需要考慮其功耗,特別是在低功耗應(yīng)用中。選擇低功耗的看門狗芯片和合理的電源設(shè)計(jì)對(duì)于系統(tǒng)的整體功耗至關(guān)重要。
兼容性和可擴(kuò)展性:
在設(shè)計(jì)看門狗定時(shí)器時(shí),需要考慮其與其他系統(tǒng)的兼容性和可擴(kuò)展性。確保看門狗定時(shí)器能夠與其他硬件和軟件組件無縫集成,并在未來需要時(shí)能夠輕松擴(kuò)展或升級(jí)。
通過綜合考慮這些因素,開發(fā)者可以設(shè)計(jì)和實(shí)現(xiàn)一個(gè)穩(wěn)定、可靠且高效的看門狗定時(shí)器解決方案,以確保嵌入式系統(tǒng)的正常運(yùn)行和數(shù)據(jù)傳輸?shù)姆€(wěn)定性。
三、看門狗的常見問題
3.1 看門狗定時(shí)器是如何工作的?
看門狗定時(shí)器通過主控制器定期向其發(fā)送脈沖信號(hào)來保持計(jì)時(shí)。如果主控制器在規(guī)定時(shí)間內(nèi)未能發(fā)送脈沖,看門狗定時(shí)器將觸發(fā)復(fù)位信號(hào),將主控制器復(fù)位。
3.2 如何配置看門狗定時(shí)器的超時(shí)時(shí)間和喂狗周期?
在LuatOS等嵌入式操作系統(tǒng)中,看門狗定時(shí)器的超時(shí)時(shí)間和喂狗周期通常通過API函數(shù)進(jìn)行配置。可以根據(jù)具體應(yīng)用的需求來設(shè)置合適的時(shí)間間隔。
若使用本文中所提到的watchdog操作庫,可按照以下步驟進(jìn)行配置:
1)初始化看門狗:
使用wdt.init(timeout) 函數(shù)來初始化看門狗定時(shí)器,timeout參數(shù)是超時(shí)時(shí)長(zhǎng),單位為毫秒。
例如,如果你希望看門狗的超時(shí)時(shí)間為9000毫秒,可以這樣調(diào)用:
2)設(shè)置看門狗超時(shí)時(shí)間(可選):
如果設(shè)備支持,可以調(diào)用:
wdt.setTimeout(timeout)
重新設(shè)置看門狗的超時(shí)時(shí)長(zhǎng),單位同樣為毫秒。
例如:
3)定期喂狗:
使用wdt.feed() 函數(shù)來喂狗,以重置超時(shí)計(jì)時(shí)。建議使用定時(shí)器定期調(diào)用這個(gè)函數(shù)。
例如,使用系統(tǒng)定時(shí)器每3000毫秒喂一次狗,可以這樣設(shè)置:
通過以上步驟,你可以成功配置看門狗定時(shí)器的超時(shí)時(shí)間和喂狗周期,確保設(shè)備不會(huì)因?yàn)槲次构范貑ⅰ?/p>
今天的內(nèi)容就分享到這里了~
審核編輯 黃宇
-
看門狗
+關(guān)注
關(guān)注
10文章
581瀏覽量
71671 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2930文章
46094瀏覽量
390240
發(fā)布評(píng)論請(qǐng)先 登錄
獨(dú)立看門狗(IWDG)的基礎(chǔ)知識(shí)

STM32中的獨(dú)立看門狗和窗口看門狗是什么

獨(dú)立看門狗( IWDG)和窗口看門狗( WWDG)
什么是看門狗電路
stm32看門狗時(shí)間計(jì)算 獨(dú)立看門狗和窗口看門狗的特性是什么
什么是stm32看門狗?獨(dú)立看門狗和窗口看門狗工作原理解析

STM32看門狗配置(獨(dú)立看門狗IWDG和窗口看門狗WWDG)

avr看門狗原理知識(shí)資料下載

單片機(jī)看門狗有兩種:分別為獨(dú)立看門狗和窗口看門狗,它們有什么區(qū)別?資料下載

MCU獨(dú)立看門狗與窗口看門狗的區(qū)別

STM32:獨(dú)立看門狗、窗口看門狗的配置

STM32中的獨(dú)立看門狗和窗口看門狗
詳解獨(dú)立看門狗的實(shí)現(xiàn)原理
STM32中的獨(dú)立看門狗和窗口看門狗

窗口看門狗的基礎(chǔ)知識(shí)

評(píng)論