專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享
從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!
提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力
提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)
對(duì)于那些人類無(wú)法持續(xù)監(jiān)視的嵌入式系統(tǒng),看門狗芯片可能是個(gè)很好的解決方案。英銳恩單片機(jī)開發(fā)工程師表示,大多數(shù)嵌入式系統(tǒng)需要自主處理異常,如果運(yùn)算跑偏了,通常不可能等人們重新引導(dǎo)他們。這種情況下需要一個(gè)復(fù)位芯片,以引導(dǎo)嵌入式系統(tǒng)的重啟。
看門狗芯片是一種硬件,可以用來(lái)自動(dòng)檢測(cè)軟件異常,并在發(fā)生任何異常時(shí)重置處理器。一般來(lái)說(shuō),看門狗芯片基于一個(gè)從某個(gè)初始值遞減到零的計(jì)數(shù)器。嵌入式軟件選擇計(jì)數(shù)器的初始值并定期重新啟動(dòng)它。如果計(jì)數(shù)器在軟件重新啟動(dòng)之前達(dá)到零,則認(rèn)為軟件發(fā)生故障,并且處理器的復(fù)位信號(hào)有效。處理器(及其運(yùn)行的嵌入式軟件)將重新啟動(dòng),就像人工操作員已關(guān)閉電源再打開一樣。
如下圖所示,看門狗芯片是處理器外部的芯片。但是,它也可以與CPU包含在同一芯片中。這是在許多單片機(jī)中完成的。無(wú)論哪種情況,看門狗芯片的輸出都直接與處理器的復(fù)位信號(hào)相關(guān)。
一、什么是踢狗(也叫:喂狗)
重新啟動(dòng)看門狗芯片計(jì)數(shù)器的過(guò)程有時(shí)稱為“踢狗(喂狗)”。踢狗的作用作用主要是起到復(fù)位重啟的作用,確保機(jī)器能夠一直運(yùn)行。
如下面的案例1中,做了一個(gè)簡(jiǎn)單的示例。這里,我們有一個(gè)無(wú)限循環(huán)來(lái)控制系統(tǒng)的整個(gè)行為。這種軟件體系結(jié)構(gòu)在許多具有低端處理器和基于單個(gè)工作頻率的行為的嵌入式系統(tǒng)中很常見。該看門狗的硬件實(shí)現(xiàn)允許通過(guò)內(nèi)存映射寄存器設(shè)置計(jì)數(shù)器值。
uint16 volatile * pWatchdog =
(uint16 volatile *) 0xFF0000;
main(void)
{
hwinit();
for (;;)
{
*pWatchdog = 10000;
read_sensors();
control_motor();
display_status();
}
}
案例1:踢狗
假設(shè)循環(huán)必須每五毫秒至少執(zhí)行一次。(假設(shè)必須至少經(jīng)常向電動(dòng)機(jī)提供新的控制參數(shù)。)如果看門狗芯片的計(jì)數(shù)器初始化為與經(jīng)過(guò)的時(shí)間(即10000毫秒)對(duì)應(yīng)的五毫秒的值,并且軟件沒(méi)有錯(cuò)誤,看門狗芯片將永遠(yuǎn)不會(huì)到期,軟件將始終在達(dá)到零之前重新啟動(dòng)計(jì)數(shù)器。
二、軟件異常
看門狗芯片可以使系統(tǒng)擺脫許多危險(xiǎn)情況。但是,如果要有效,必須在整個(gè)軟件設(shè)計(jì)中考慮復(fù)位看門狗芯片。設(shè)計(jì)人員必須知道其軟件可能出什么問(wèn)題,并確保看門狗芯片能夠檢測(cè)到它們(如果有的話)。
系統(tǒng)掛起有多種原因。導(dǎo)致執(zhí)行無(wú)限循環(huán)的邏輯謬誤是最簡(jiǎn)單的。假設(shè)這種情況發(fā)生在案例1的read_sensors()調(diào)用中。其他任何軟件(ISR除外,如果仍然啟用中斷)都不會(huì)再次運(yùn)行。
另一種可能性是,在循環(huán)的一次通過(guò)期間,異常數(shù)量的中斷到達(dá)。在ISR中花費(fèi)的任何額外時(shí)間就是沒(méi)有花費(fèi)在執(zhí)行主循環(huán)上的時(shí)間??赡軙?huì)給電機(jī)新的控制指令帶來(lái)危險(xiǎn)的延遲。
使用多任務(wù)內(nèi)核時(shí),可能會(huì)發(fā)生死鎖。例如,一組任務(wù)可能會(huì)卡在彼此之間等待,并且其中一個(gè)需要一些外部信號(hào),從而使整個(gè)任務(wù)組無(wú)限期地掛起。
如果此類故障是瞬態(tài)的,則每次看門狗引起的復(fù)位后,系統(tǒng)可能會(huì)在一段時(shí)間內(nèi)正常運(yùn)行。但是,發(fā)生故障的硬件可能會(huì)導(dǎo)致系統(tǒng)不斷重置。因此,計(jì)算看門狗引起的復(fù)位次數(shù)并在固定次數(shù)的故障后放棄嘗試可能是明智的。
三、Karate框架接口測(cè)試
實(shí)際的看門狗實(shí)現(xiàn)通常會(huì)具有一個(gè)與案例1中的軟件相比更為復(fù)雜的軟件接口。當(dāng)重置看門狗所需的指令集非常簡(jiǎn)單時(shí),有漏洞的軟件可能會(huì)偶然執(zhí)行此操作??紤]一個(gè)錯(cuò)誤,該錯(cuò)誤導(dǎo)致將值10000一次又一次地寫入內(nèi)存中的每個(gè)位置。此代碼將定期重新啟動(dòng)看門狗計(jì)數(shù)器,并且看門狗可能永遠(yuǎn)不會(huì)咬人。為防止這種情況,許多看門狗實(shí)現(xiàn)要求使用兩個(gè)或多個(gè)連續(xù)寫入的復(fù)雜序列來(lái)重新啟動(dòng)看門狗芯片。
如果看門狗內(nèi)置在你的單片機(jī)中,則在設(shè)備復(fù)位時(shí)可能不會(huì)自動(dòng)啟用它。你必須確保在硬件初始化期間啟用它。為了提供保護(hù)以防止意外禁用看門狗的錯(cuò)誤,硬件設(shè)計(jì)通常使得一旦啟用看門狗芯片就無(wú)法禁用它。
如果你的軟件可以比看門狗周期更快地完成一個(gè)完整的循環(huán),那么案例1中的結(jié)構(gòu)可能對(duì)你來(lái)說(shuō)很好。如果你的軟件的某些部分需要很長(zhǎng)時(shí)間才能完成,那么挑戰(zhàn)就更大了。假設(shè)你有一個(gè)循環(huán),等待元素加熱到一定溫度再返回。許多看門狗芯片的最長(zhǎng)持續(xù)時(shí)間約為兩秒鐘。如果你要延遲的時(shí)間超過(guò)該時(shí)間長(zhǎng)度,則可能必須在等待循環(huán)中踢狗。如果你的軟件中有很多這樣的地方,看門狗的控制可能會(huì)出現(xiàn)問(wèn)題。
系統(tǒng)初始化是代碼的一部分,通常需要比看門狗芯片的最大時(shí)間更長(zhǎng)的時(shí)間。也許進(jìn)行內(nèi)存測(cè)試或從ROM到RAM的數(shù)據(jù)傳輸會(huì)減慢此速度。因此,某些看門狗可以比其后繼踢等待更長(zhǎng)的時(shí)間來(lái)等待他們的第一個(gè)踢。
隨著將控制線程添加到軟件中(以ISR和軟件任務(wù)的形式),在代碼中僅放置一處看門狗變得無(wú)效。所以,選擇合適的踢腳間隔也是一個(gè)重要問(wèn)題,這只能以系統(tǒng)特定的方式解決。
以上就是英銳恩單片機(jī)開發(fā)工程師分享的有關(guān)看門狗芯片的介紹與應(yīng)用場(chǎng)景。英銳恩專注單片機(jī)應(yīng)用方案設(shè)計(jì)與開發(fā),提供8位單片機(jī)、16位單片機(jī)、32位單片機(jī)、運(yùn)算放大器和模擬開關(guān)。