• 正文
  • 推薦器件
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

一行代碼引發(fā)的慘案!

2023/09/28
1947
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一行代碼引發(fā)慘案,這似乎有點兒夸張,但看完文章后你可能就會改變看法。

災難降臨

時間回到1991年2月25號,在一個月黑風高的夜晚,一枚飛毛腿導彈,悄無聲息地飛臨沙特的達蘭美軍軍營上空,而已經(jīng)連續(xù)作戰(zhàn)4天的美軍愛國者導彈防御系統(tǒng),沒能識別出這一危險的目標。這個大殺器直撲美軍營地,造成了28名士兵死亡,100多人受傷,可謂慘烈!要知道整個海灣戰(zhàn)爭美軍一共才戰(zhàn)死了148人啊。

墨菲定律

在戰(zhàn)爭中大放異彩,被吹噓的神乎其神的愛國者防御系統(tǒng),是如何犯下這個致命的錯誤的呢?這個起因倒是不復雜,其實在2月11號,以色列軍方就已經(jīng)發(fā)現(xiàn),系統(tǒng)存在隱患。他們發(fā)現(xiàn)在愛國者系統(tǒng)連續(xù)工作8小時后,目標捕獲精度會下降20%,在連續(xù)工作20小時以后,系統(tǒng)看起來似乎失效了。

在接到這一上報后,美國軍方大意了,他們覺得反導系統(tǒng)不會連續(xù)工作這么長時間,雖然開始給軟件打補丁,但由于是在戰(zhàn)時狀態(tài),進度比較慢,于是軍方發(fā)出命令,讓系統(tǒng)不要工作太長時間。但是這個太長時間是多久?并沒有說個明白。于是墨菲定律又起作用了:如果事情有變壞的可能,不管這種可能性有多小,它總會發(fā)生。于是就發(fā)生了文章開頭的一幕。那么問題出在哪兒了呢?

水落石出

隨后的調(diào)查顯示,問題的根源,在軟件中一個隱藏很深的Bug。愛國者系統(tǒng)軟件,使用了一個3字節(jié),也就是24bit的變量存儲一個0.1秒的單位時間,存儲時間值和真實時間之間,有一個微小的差值,這個時間差值在系統(tǒng)運行時逐漸累積,在系統(tǒng)不間斷長時間運行后,積累的時間差值過大,最終導致了嚴重問題。

原來不像我們平常計算使用10進制,計算機系統(tǒng)用2進制存儲數(shù)據(jù),0.1秒變成2進制是0.0001100110011001100110011001100....,這是一個無限循環(huán)小數(shù),當用24bit 的變量存儲它時,精度只保留到前24bit,后面的都被舍棄掉了,那這個誤差有多少呢?換算成10進制是0.000000095秒,這看起來是一個很微不足道的誤差,但是工作100小時后,這個誤差會積累到0.000000095×100(小時)×60(分鐘)×60(秒)×10(次/秒)=0.34秒。這似乎仍然是一個非常非常短的時間,然而,這足以讓以1676米/秒高速飛行的飛毛腿導彈,飛過569.84米,輕松突破本以為堅不可摧的防線了。

給我們的警示

我們在編寫代碼時,一定要注意每一個變量的位數(shù),而且需要注意的是,在不同的操作系統(tǒng),或者使用不同的編譯器時,同一個類型的變量長度可能都是不同的。這在移植代碼時尤其要注意,原來工作正常的代碼,換個平臺,換個編譯器可能就不同了。

需要注意計算過程有沒有造成結果精度的下降,有沒有產(chǎn)生累積誤差。計算過程有沒有可能造成結果溢出,即結果小于0,或大于變量所允許最大值的可能。

整型,無符號型,浮點型等變量類型,不要混用,否則強制類型轉(zhuǎn)換可能導致不可預知的結果。

掃碼加入嵌入式交流群:

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
0955012881 1 Molex Telecom and Datacom Connector, 8 Contact(s), Right Angle, Solder Terminal, Locking, Jack,
$1.2 查看
HK100522NJ-TV 1 TAIYO YUDEN General Purpose Inductor, 0.022uH, 5%, 1 Element, SMD, 0402, CHIP, 0402, HALOGEN FREE AND ROHS COMPLIANT
$0.07 查看
SI2319DS-T1-GE3 1 Vishay Intertechnologies TRANSISTOR 2300 mA, 40 V, P-CHANNEL, Si, SMALL SIGNAL, MOSFET, TO-236, HALOGEN FREE AND ROHS COMPLIANT PACKAGE-3, FET General Purpose Small Signal

ECAD模型

下載ECAD模型
$0.81 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄