有時(shí)候程序異常了,還不如死了算了
打個(gè)比方,一個(gè)自動(dòng)售貨機(jī),顧客給錢買東西,應(yīng)該找顧客零錢。程序上需要做A-B的減法。在沒有任何人購物的情況下,受到干擾而異常運(yùn)行到這個(gè)位置,而參與計(jì)算的寄存器保持在某個(gè)子程序中的數(shù)值,因此你啟動(dòng)找錢的程序,白白的吐出鋼崩……
我們來做個(gè)數(shù)值分析,假設(shè)確認(rèn)用戶輸入鈔票到找零錢之間的指令總共有200條指令(讓用戶選擇商品),總共的程序空間是10K,那么我把程序搞亂,從而白白的拿到鋼崩的概率就是2%。我肯定會(huì)拿著電子大伙器從早到晚不停的折騰這個(gè)售貨機(jī)。
當(dāng)然,你可以說你會(huì)對(duì)敏感數(shù)據(jù)進(jìn)行防護(hù),但是你的程序不會(huì)跑飛,仍然會(huì)繼續(xù)運(yùn)行。假設(shè)一個(gè)輸入密碼的程序,異常之后剛好落在密碼合法性檢查之后。那簡(jiǎn)直等于沒有密碼。你做的任何防護(hù)都是白搭。
這些問題在其他單片機(jī)中也可能存在,但是其他的單片機(jī)絕大部分情況下都會(huì)跑飛,從而最終被看門狗復(fù)位,雖然死了一次,但是沒造成什么損失,活過來以后照樣正常運(yùn)行。
總結(jié):聯(lián)想一下載人航天,我們的目的不是確保航天器絕對(duì)不死機(jī),而是確保即使航天器死機(jī)了,也能把人安全的送回來。