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