C_and_CPP 板


LINE

※ [本文轉錄自 Programming 看板] 作者: JohnLinq (林約翰) 看板: Programming 標題: [心得] 如何強化嵌入式(系統)軟體可靠度 時間: Sun Apr 12 00:23:14 2009 我在KEIL的官方論壇,看到一篇關於「如何強化嵌入式(系統)軟體可靠度」的文章, 我個人覺得蠻有參考價值的,所以.希望能夠把這篇文章介紹給大家。 KEIL官方論壇的討論串在此: http://www.keil.com/forum/docs/thread14537.asp 這個討論串起源於其他雜七雜八的閒聊,而後由Per Westermark所發起, Per Westermark是一位來自瑞典的嵌入式系統專家, 也是KEIL官方論壇的主要貢獻者(解答問題的人)之一。 或許是有感於,從事嵌入式系統開發的人越來越多, 對於嵌入式系統「品質與可靠度」的關注,卻越來越少, 所以,Per Westermark才會公開發表以下這篇文章。 Some concepts for hardening embedded software Copyright (c) Per Westermark, 2009 http://iapetus.neab.net/download/8dc2ac48-635ac1a9/hardening.html Per Westermark表示,關於系統開發的流程、方法論、規範標準等等, 大家都可以找到各式各樣的豐富資料, 但是,在實際進行軟體開發的時候,應該注意哪些關鍵,卻很少有人提及; 所以,Per Westermark給大家提供了21項建議, 而這些建議,所著眼的,並不是如何寫出洗練的程式碼,也並不是如何減少Bug的出現, Per Westermark的建議,是實在地告訴我們, 當一個系統出錯的時候,軟體應該如何處理; 至少,對於鄙陋如我而言, Per Westermark的建議,讓我能夠以截然不同的角度,看到全新的視野。 uint16_t buf[BUF_SIZE]; unsigned idx; for (idx = 0; idx < BUF_SIZE; idx++) { ... if (idx >= BUF_SIZE) { do_something(); } else { buf[idx] = new_data; } } 在一個idx由0開始,直到小於BUF_SIZE為止的迴圈裡, 寫下if (idx >= BUF_SIZE) then do_something()的代碼,看來似乎是相當地外行? 其實不然。 uint16_t buf[BUF_SIZE]; unsigned idx; for (idx = 0; idx < BUF_SIZE; idx++) { ... if (idx >= BUF_SIZE) { // loop variable has for some reason been corrupted. Take proper // action. perform_corrective_action(); } else { buf[idx] = new_data; } } 嵌入式系統的應用領域非常廣泛, 從太空梭、彈道飛彈、戰鬥機、民航機、汽機車,到數位機上盒都有可能。 在以下這串雜七雜八的閒聊裡,提到了一些例子: http://www.keil.com/forum/docs/thread14479.asp (這個討論串很長,更糟的是很亂。) 姑且把所有的系統錯誤都稱為Bit Error/位元錯誤, 也就是說,原本為0的Bit突然變成了1,原本為1的Bit突然變成了0; Bit Error可能因為各式各樣的原因而發生, 或許是因為系統瑕疵,或許是因為旁邊有高壓電塔, 或許是因為被雷打到,或許是因為一隻黑貓剛好走過去。 也或許,因為這個嵌入式系統用在電子作戰, 它必須干擾敵方的系統,並且不被敵方干擾; 也或許,因為這個嵌入式系統用在吃角子老虎, 剛好有人想要作弊,剛好有人想要破台。 當Bit Error發生的時候,軟體應該怎麼做? 1. Duplicated data 重要的「設定值」與「狀態值」應該擁有一份能夠自我備援的副本。 2. Checksummed data 「設定值」與「很少變動的資料」,應該具備「自我偵錯/糾錯」的能力。 3. Recomputed variables 系統閒置時,重新計算「重要的變數」。 4. Refreshing of I/O configuration and state 系統閒置時,重新寫入重要的「設定值」。 5. Cross-correlation of time from multiple sources 系統應該具備偵測能力,以評估「時間/時鐘的來源」是否可靠。 6. Age-tracking of sensor data 系統應該具備偵測能力,以評估「感測器所傳回的數值」是否可靠。 7. Explicit range checking 對於「資料區域的位址上/下限」,應該明確的定義並且加以偵測, 以確保資料區域不被損毀。 8. Stack highwater marks Stack應該擁有清楚的識別Pattern,讓系統能夠對Stack進行保護, 以確保Stack不被損毀。 9. Corruption fingerprinting 資料儲存區應該填入Magic value,讓系統能夠進行資料損毀的偵測。 10. Magic values/hamming distance for states 以數值來表示狀態的時候,相鄰的兩個狀態值應該具備充分的區別性, 以防止錯誤。 所以,0表示FALSE、非0表示TRUE,有時候並不是一個好主意, 因為,0x00與0x01只相差一個Bit。 11. Trend analysis of repairs/resends/… 系統應該具備「故障傾向」的偵測能力,比如說: 電壓逐步下降,Error Rate逐步上升。 12. Interrupt lockup detection 對於可預期的系統事件,系統應該加以偵測, 一旦事件應產生而未產生,則表示故障。 13. Interrupt loop detection 對於可預期的系統事件,系統應該加以偵測, 一旦事件應結束而未結束,則表示故障。 14. Processor load supervision 15. Hardware watchdog 16. Inter-thread software watchdogs 17. Avoiding infinite loops 18. Checksummed firmware 19. Duplicated firmwares 20. Wear-leveling of flash and EEPROM 21. Static allocation Per Westermark期待能夠與有興趣於此的人士交流,有任何意見請到 KEIL官方論壇的相關討論串留言: http://www.keil.com/forum/docs/thread14537.asp (KEIL的官方論壇相當地自由開放,無須註冊就可以發表留言。) (雖然它希望你以Real Name署名,但是它並不強制。) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.210.60 JohnLinq:轉錄至看板 LinuxDev 04/12 00:28 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.210.60
1F:推 eljoven:sigh...做WM開發的,有多少人在注意這個? 04/12 00:56
2F:推 ykjiang:我會根據產品的定位,來決定要作到什麼程度 04/12 01:27
3F:推 sunneo:在效能允許下 我可能會把這類的工作交給OS/多層的ISR來檢查 04/12 02:16
4F:→ sunneo:現在晶片的效能蠻好的 而且有上述要求 配備應不會差到哪 04/12 02:17
5F:→ sunneo:除非產品本身相當差 卻又有以上要求 才會想要加入那些碼 04/12 02:19
6F:→ sunneo:話說這些地方都轉了 最主要的asm版怎不轉? 04/12 02:25
7F:→ tinlans:不要傻了,對 compiler 而言那叫 unreachable code, 04/12 07:20
8F:→ tinlans:最佳化開下去大都直接 bye bye。 04/12 07:20
9F:→ tinlans:這種東西靠硬體自我檢測和更正還比較有意義。 04/12 07:20
10F:→ dSnAil:如果是寫Assembly的話是感覺滿重要的,可是對C/C++的話... 04/12 09:16
11F:推 ykjiang:同意 t 大,硬體夠堅強的話,軟體可以省很多工 04/12 14:18
12F:→ sunneo:同意 我也想到最佳化應該會把那些贅碼去掉 04/12 14:30
13F:推 softwind:... 後面越寫越誇張... 還硬體watchdog... 04/12 23:11
14F:推 TroyLee:硬體watchdog有什麼問題嗎? 04/13 01:21







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP