牟永康 浙江天煌科技實(shí)業(yè)有限公司
在工程實(shí)踐中通常都是幾種抗干擾方法并用,互相補(bǔ)充、完善,才能取得較好的抗干擾效果。從根本上來(lái)說(shuō),硬件抗干擾是主動(dòng)的,而軟件抗干擾是被動(dòng)的。細(xì)致周到地分析干擾源,硬件與軟件抗干擾相結(jié)合,完善系統(tǒng)監(jiān)控程序,設(shè)計(jì)一種穩(wěn)定可靠的單片機(jī)系統(tǒng)是完全可行的?!翱撮T狗技術(shù)”原理是運(yùn)用定時(shí)器對(duì)中斷方式工作進(jìn)行系統(tǒng)程序監(jiān)控,一旦系統(tǒng)受到外界主程序的干擾陷入死循環(huán)機(jī)后,就會(huì)觸碰到定時(shí)器然后啟用中斷程序,將系統(tǒng)復(fù)位到死循環(huán)之前進(jìn)入正常工作狀態(tài),這種技術(shù)主要是分為“養(yǎng)狗”和“喂狗”兩部分。
看門狗技術(shù)實(shí)際上就在是系統(tǒng)中“養(yǎng)條看門狗”,正常運(yùn)行時(shí)就定時(shí)進(jìn)行喂養(yǎng),一旦程序出現(xiàn)問(wèn)題后難以正常喂狗,則就會(huì)自動(dòng)將狗喚醒后實(shí)現(xiàn)復(fù)位引導(dǎo),將系統(tǒng)恢復(fù)到正常工作狀態(tài),將脫離主程序之外的系統(tǒng)復(fù)位到正常運(yùn)行軌道,解除死循環(huán)。因此喂狗主要是利用系統(tǒng)的正常程序的特點(diǎn),通過(guò)中斷方式以及定時(shí)器等進(jìn)行系統(tǒng)環(huán)境測(cè)試,定時(shí)監(jiān)控系統(tǒng)的工作狀態(tài),并以復(fù)位引導(dǎo)功能實(shí)現(xiàn)系統(tǒng)正常運(yùn)行。
“看門狗技術(shù)”雖能有效地幫助單片機(jī)軟件抵御外界的干擾,但是它也存在著一定的技術(shù)局限性。由于定時(shí)器的計(jì)數(shù)初值要定期重置,所以會(huì)增加編程的難度及工作量,且由于中斷程序執(zhí)行時(shí)間不能夠超過(guò)正常初始設(shè)定時(shí)間,必須要將單機(jī)片軟件狀態(tài)進(jìn)行定時(shí)監(jiān)控,確保外界干擾產(chǎn)生時(shí)能夠觸發(fā)“狗”,進(jìn)行中斷關(guān)閉。因此“看門狗技術(shù)”也不能抵御外界所有害信號(hào)破壞,使程序恢復(fù)至正常狀態(tài)。
系統(tǒng)跑飛主要是由于外界干擾導(dǎo)致系統(tǒng)脫離正常運(yùn)行軌道,這樣一來(lái)就會(huì)產(chǎn)生兩種狀態(tài):一是系統(tǒng)跳躍到主程序區(qū)域后,系統(tǒng)重要數(shù)據(jù)并沒(méi)有破壞,則一段時(shí)間后系統(tǒng)就會(huì)自動(dòng)進(jìn)入正常運(yùn)行軌道,這樣的跑飛主要是由于系統(tǒng)出現(xiàn)斷層以及調(diào)整不能正常,對(duì)系統(tǒng)本身的刪號(hào)不大,所以在跳轉(zhuǎn)后可以自主恢復(fù);二是大多數(shù)在外界干擾下,系統(tǒng)遭到破壞需要通過(guò)軟件抗干擾技術(shù)的抵御,修復(fù)系統(tǒng)的修復(fù)。主要有以下幾種軟件抗干擾方法。
指令冗余法,當(dāng)外界有害信號(hào)對(duì)計(jì)算機(jī)軟件系統(tǒng)進(jìn)行破壞時(shí),為了不讓系統(tǒng)的重要數(shù)據(jù)遭到破壞,單片機(jī)軟件可在程序中適當(dāng)安排一些冗余指令,在計(jì)算機(jī)正常運(yùn)行的指令下插入兩條NOP 指令,保證程序運(yùn)行到此的時(shí)候不會(huì)被打亂,程序則有可能恢復(fù)到正常的工作狀態(tài)。
軟件陷阱技術(shù),是根據(jù)軟件的運(yùn)行系統(tǒng)在程序儲(chǔ)存以及運(yùn)行狀態(tài)的每個(gè)區(qū)域內(nèi)安排個(gè)陷阱,當(dāng)陷阱啟動(dòng)后,軟件就會(huì)自動(dòng)進(jìn)行環(huán)境測(cè)試啟用重新復(fù)位引導(dǎo)系統(tǒng)功能,可以將干擾的計(jì)算機(jī)程序重新納入正確的運(yùn)行軌道上。一般而言,軟件陷阱的個(gè)數(shù)是根據(jù)計(jì)算機(jī)系統(tǒng)程序的儲(chǔ)存空間及疏密性決定的,通常1K 字節(jié)的程序放置幾個(gè)軟件陷阱就可以了,在其他的程序存儲(chǔ)位置上填充滿軟件陷阱即可。因此,當(dāng)跑飛的程序進(jìn)入此程序區(qū)域時(shí),就可以迅速?gòu)?fù)位到正常的運(yùn)行狀態(tài)。
多進(jìn)程相互看護(hù)技術(shù)。ucOS 是可以支持多任務(wù)的,易于實(shí)現(xiàn)多進(jìn)程和多線程獨(dú)立運(yùn)行,即使不用操作系統(tǒng)的,也可以用MCU 的中斷機(jī)制實(shí)現(xiàn)多個(gè)線程的相互校驗(yàn)與監(jiān)視,不同任務(wù)放在定時(shí)器中斷,然后將任務(wù)分步驟執(zhí)行,讓時(shí)間片輪轉(zhuǎn),各自標(biāo)志狀態(tài)字和PC 寄存器,從而得以發(fā)現(xiàn)異常,及時(shí)做出處理,通過(guò)校驗(yàn)數(shù)據(jù),判斷是總線還是輸入數(shù)據(jù)、R AM 數(shù)據(jù)等干擾類型,利用備份的數(shù)據(jù)恢復(fù)現(xiàn)場(chǎng)。
程序跑飛的原因及結(jié)果的可預(yù)測(cè)性較低,一旦出現(xiàn)跑飛必然是要進(jìn)行系統(tǒng)修復(fù),所以在系統(tǒng)運(yùn)行中為確保軟件的正常工作,需要采用抗干擾技術(shù),擯除外界干擾,但抑制干擾技術(shù)也并非百分百可靠,還需研究出更加完備的預(yù)防措施。雖然當(dāng)系統(tǒng)遭受到外界的干擾時(shí),運(yùn)用上述兩種防干擾技術(shù)可以有效的使計(jì)算機(jī)程序重新恢復(fù)到正常的運(yùn)行狀態(tài),只是相對(duì)地加強(qiáng)了單片機(jī)軟件的抵抗能力,消除一定的信號(hào)干擾。在進(jìn)行系統(tǒng)軟件開(kāi)發(fā)時(shí)根據(jù)系統(tǒng)的內(nèi)外環(huán)境靈活運(yùn)用以上兩種抗干擾技術(shù),提高單片機(jī)軟件的抗干擾能力。
在消息基器件中,數(shù)據(jù)的傳輸速率較低是由于命令和消息都是以字符的形式發(fā)送導(dǎo)致必須由本地的CPU 進(jìn)行翻譯。VXI 消息基接口的執(zhí)行靈活性高,比作計(jì)算機(jī)高級(jí)語(yǔ)言,以時(shí)間為代價(jià)提高其標(biāo)準(zhǔn)功能。寄存器基儀器則可比作匯編語(yǔ)言,雖然其執(zhí)行速度快,但是要直接和硬件底層打交道,相對(duì)要困難的多。消息基儀器的編程方便并且易于掌握,開(kāi)發(fā)者和使用者并不需要了解其模塊硬件組成及編程原理,極大的減少軟件開(kāi)發(fā)的時(shí)間和有效降低系統(tǒng)集成的難度。軟件開(kāi)發(fā)研究人員大膽猜想,如果將消息基傳輸方式和寄存器基傳輸方式兩者結(jié)合起來(lái),就有可能實(shí)現(xiàn)在不影響數(shù)據(jù)的傳輸速度情況下,仍使用消息基接口實(shí)現(xiàn)器件的智能化。
然而在單片機(jī)軟件實(shí)際操作過(guò)程中,消息基的命令都是以消息的形式傳輸出去的,因此一次只能傳輸一個(gè)數(shù)據(jù),造成傳輸速率的下降,所以在傳送大量數(shù)據(jù)的時(shí)候,消息基的這種數(shù)據(jù)傳送方式顯然是不合適的。所以研究人員為了提高消息基儀器的數(shù)據(jù)傳輸速度,在消息基器件中擴(kuò)展部分寄存器基接口的成分。數(shù)據(jù)傳輸率要求低的部分和命令(如器件初始化)以消息基方式進(jìn)行控制,這樣可以充分發(fā)揮消息基接口和寄存器基接口各自的長(zhǎng)處。
抗干擾技術(shù)是單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)過(guò)程中的重要部分,它的設(shè)計(jì)使得在系統(tǒng)遭受到外界的干擾時(shí)能使系統(tǒng)恢復(fù)正常工作,避免外界的干擾給單片機(jī)系統(tǒng)帶來(lái)嚴(yán)重的破壞,同樣也在很大程度上提高了系統(tǒng)的穩(wěn)定性。