單片機(jī)死機(jī)問題
2、"死機(jī)"是指PC進(jìn)入了"死循環(huán)",或者是MCLK等于近似為零的值。此時(shí),要想救活MCU,非外狗不可。
*程序運(yùn)行過程中,如果MCU電源出現(xiàn)問題(電源供電問題,或其它外部電路引起的電源擾動),比較容易出現(xiàn)"跑飛"現(xiàn)象
程序跑飛應(yīng)該是PC出錯(cuò);軟件和硬件都可能出這樣的問題.
死機(jī)應(yīng)該是CPU根本沒有運(yùn)行,多是硬件方面的問題造成的,比如POR復(fù)位不成功,430比較容易出現(xiàn)掉電不完全后重新上電.
有了看門狗就不會死機(jī)
死機(jī)是指CPU的程序指針進(jìn)入一個(gè)死循環(huán),無法執(zhí)行正常的程序流程。其外在表現(xiàn)常常是:正常功能喪失,按鍵無響應(yīng),顯示凝固。單片機(jī)死機(jī)后,只有復(fù)全才能走出死循環(huán),執(zhí)行正常的程序流程。眾所屬知,克服死機(jī)的最有效手段是加看門狗(WatchDog)。
目前用得最廣泛的看門狗實(shí)際上是一個(gè)特殊的定時(shí)器DogTimer。DogTimer按固定速率計(jì)時(shí),計(jì)滿預(yù)定時(shí)間就發(fā)出溢出脈沖使單片機(jī)復(fù)位。如果每次在DogTimer溢出前強(qiáng)行讓DogTimer清零,就不會發(fā)出溢出脈沖。清零脈沖由CPU發(fā)出,在單片機(jī)程序中每隔一段語句放一個(gè)清DogTimer的語句--FeedDog語句,以保證程序正常運(yùn)行時(shí)DogTimer不會溢出。一旦程序進(jìn)入一個(gè)不含F(xiàn)eedDog語句的死循環(huán),DogTimer將溢出,導(dǎo)致單片機(jī)復(fù)位,跳出這個(gè)死循環(huán)。本文稱這種看門狗為典型看門狗,典型看門狗已被集成比,如MAX706、MAX791等[1];還有許多單片機(jī)本身集成了這種看門狗,如PIC16C57、MC68HC705等,
有一個(gè)錯(cuò)誤觀點(diǎn):加了看門狗,單片機(jī)就不會死機(jī)。實(shí)際上,看門狗有時(shí)間會完全失效。當(dāng)程序進(jìn)入某個(gè)死循環(huán),而這個(gè)死循環(huán)中又包含F(xiàn)eedDog語句,這時(shí)DogTimer始終不會溢出,單片機(jī)始終得不到復(fù)位信號,程序也就始終跳不出這個(gè)死循環(huán)。針對這一弊端,筆者設(shè)計(jì)了雙對限看門狗和定時(shí)復(fù)位看門狗。
雙時(shí)限看門狗有兩個(gè)定時(shí)器;一個(gè)為短定時(shí)器,一個(gè)為長定時(shí)器。短定時(shí)器定時(shí)為T1,長定時(shí)器定時(shí)為T2,0
這樣,當(dāng)程序進(jìn)入某個(gè)死循環(huán),如果這個(gè)死循環(huán)包含短定時(shí)器FeedDog語句而不包含長定時(shí)器FeedDog語句,那么長定時(shí)順終將溢出,使單片機(jī)復(fù)位。巧妙安排長定時(shí)器FeedDog語句的位置,可保證出現(xiàn)死機(jī)的概率根低。在水輪發(fā)電機(jī)組微機(jī)控制裝置中的對比應(yīng)用證明了這一點(diǎn)[3]。
目前幾乎所有的看門狗都是依賴于CPU(依賴于CPU FeedDog)。這可以比作:一個(gè)保險(xiǎn)設(shè)備能否起到保險(xiǎn)作用還依賴于被它保護(hù)的對象的行為。顯然,依賴于CPU的看門狗是不能保證單片機(jī)在分之百不死機(jī)的。
在絕對不允許死機(jī)的裝置中,筆者設(shè)計(jì)了一種完全不依賴于CPU的看門狗--定時(shí)復(fù)位看門狗。定時(shí)復(fù)位看門狗的主體也是一個(gè)定時(shí)器,到預(yù)定時(shí)間就發(fā)出溢出脈沖,此溢出脈沖使單片機(jī)強(qiáng)行復(fù)位。定時(shí)復(fù)位看門狗不需要CPU FeedDog。
簡言之,定時(shí)復(fù)位看門狗就是定時(shí)地讓單片機(jī)強(qiáng)行復(fù)位。這樣,即使裝置死機(jī),其最大死機(jī)時(shí)間也不會大于定時(shí)器定時(shí)時(shí)間。顯然,只要硬件完好,這種看門狗百分之百地保證了單片機(jī)不會長時(shí)間死機(jī)。在智能電表(包括IC卡電能表、復(fù)費(fèi)率電能表、多功能電能表[4])中采用了定時(shí)復(fù)位看門狗,每1秒讓CPU強(qiáng)行復(fù)位,迄今數(shù)十萬電表運(yùn)行了近五年,無一例死機(jī)報(bào)告。
評論