為了使工業(yè)路由器、DTU、串口服務(wù)器等聯(lián)網(wǎng)設(shè)備傳輸更穩(wěn)定,這些設(shè)備中會(huì)帶有防浪涌、防靜電、防脈沖以及看門(mén)狗保護(hù)。這些硬件保護(hù)中,有一種是可以保持設(shè)備內(nèi)部進(jìn)程24小時(shí)不宕機(jī)的——看門(mén)狗技術(shù)??撮T(mén)狗是如何工作和計(jì)算的呢?
看門(mén)狗芯片,又叫看門(mén)狗定時(shí)器。它是微控制器中的一塊硬件。如果系統(tǒng)卡在某個(gè)地方, 則看門(mén)狗定時(shí)器用于生成系統(tǒng)復(fù)位,如果系統(tǒng)進(jìn)入執(zhí)行的無(wú)窮循環(huán),則看門(mén)狗定時(shí)器會(huì)將系統(tǒng)復(fù)位以擺脫無(wú)窮循環(huán)??撮T(mén)狗是嵌入式系統(tǒng)中的安全機(jī)制,可使您的系統(tǒng)可靠,但是它取決于看門(mén)狗定時(shí)器的使用方式。
看門(mén)狗基本上是一個(gè)計(jì)數(shù)器,它從計(jì)數(shù)零開(kāi)始并達(dá)到某個(gè)值。 如果計(jì)數(shù)器達(dá)到某個(gè)值,則看門(mén)狗硬件將生成看門(mén)狗復(fù)位。為了避免系統(tǒng)重置,軟件需要啟動(dòng)看門(mén)狗, 即需要將計(jì)數(shù)器重置為零。萬(wàn)一軟件陷入無(wú)休止的循環(huán),系統(tǒng)將無(wú)法踢看門(mén)狗,因此計(jì)數(shù)器達(dá)到一定值并復(fù)位系統(tǒng)。
看門(mén)狗最初加載了某些值。該值是根據(jù)看門(mén)狗的超時(shí)時(shí)間計(jì)算的(進(jìn)一步說(shuō)明了如何根據(jù)超時(shí)值計(jì)算計(jì)數(shù)器值)。在超時(shí)之前,系統(tǒng)應(yīng)重置計(jì)數(shù)器。
例如,如果您的系統(tǒng)定期執(zhí)行3個(gè)任務(wù)并執(zhí)行3個(gè)任務(wù)需要500毫秒。然后將超時(shí)時(shí)間視為600 ms(考慮最壞的情況),針對(duì)600 ms計(jì)算計(jì)數(shù)器值并將其加載到看門(mén)狗中。
考慮看門(mén)狗中的系統(tǒng)正在以4 kHz時(shí)鐘工作。系統(tǒng)在450毫秒內(nèi)完成工作,最壞情況下,完成工作的時(shí)間為500毫秒。讓我們將500毫秒作為超時(shí)時(shí)間。
1/4 kHz = 0.25毫秒
1個(gè)時(shí)鐘節(jié)拍= 0.25毫秒。
500毫秒= 2000個(gè)滴答聲。
當(dāng)時(shí)鐘滴答2000次時(shí),完成500毫秒。與超時(shí)相關(guān)的技術(shù)器值為2000.
如果看門(mén)狗計(jì)數(shù)器達(dá)到2000,它將生成一個(gè)復(fù)位信號(hào)。在達(dá)到2000之前,系統(tǒng)需要將計(jì)數(shù)器復(fù)位為0。
在操作系統(tǒng)(多任務(wù)系統(tǒng))的情況下,看門(mén)狗起著重要的作用。看門(mén)狗可以監(jiān)視程序流,監(jiān)視任務(wù)執(zhí)行的頻率(活動(dòng)監(jiān)督)。如果看門(mén)狗發(fā)現(xiàn)程序流沖突或任務(wù)執(zhí)行得太頻繁或不那么頻繁,則會(huì)生成看門(mén)狗復(fù)位。在進(jìn)行在線監(jiān)督的情況下,每個(gè)任務(wù)都會(huì)設(shè)置一個(gè)標(biāo)志,以指示任務(wù)處于在線狀態(tài),即已執(zhí)行??撮T(mén)狗監(jiān)控器功能將檢查每個(gè)任務(wù)是否都報(bào)告了活動(dòng)指示。如果任務(wù)未設(shè)置為激活指示,則看門(mén)狗監(jiān)視器功能將永遠(yuǎn)不會(huì)踢看門(mén)狗,最后看門(mén)狗將重置系統(tǒng)。