探秘嵌入式工程師的百寶箱!高可靠性嵌入式係統的7大技巧
發布時間:2015-03-25 責任編輯:echolady
【導讀】高gao可ke靠kao性xing代dai碼ma並bing非fei一yi蹴cu而er就jiu的de,這zhe是shi每mei個ge嵌qian入ru式shi開kai發fa工gong程cheng師shi都dou需xu要yao經jing曆li的de艱jian難nan過guo程cheng。設she計ji過guo程cheng中zhong,開kai發fa人ren員yuan需xu要yao維wei護hu並bing管guan理li係xi統tong的de每mei個ge比bi特te和he字zi節jie。本ben文wen就jiu探tan秘mi嵌qian入ru式shi工gong程cheng師shi的de百bai寶bao箱xiang,揭jie秘mi嵌qian入ru式shi係xi統tong設she計ji的de7大技巧。
從規範完善的開發周期到嚴格執行和係統檢查,開發高可靠性嵌入式係統的技術有許多種。本文介紹了7個易操作且可以長久使用的技巧,它們對於確保係統更加可靠地運行並捕獲異常行為大有幫助。
技巧#1——用已知值填充ROM
軟件開發人員往往都是非常樂觀的一群人,隻要讓他們的代碼忠實地長時間地運行就可以了,僅此而已。微控製器tiaochuyingyongchengxukongjianbingzaifeiyuxiangdedaimakongjianzhongzhixingzhezhongqingkuangsihushixiangdangshaoyoude。raner,zhezhongqingkuangfashengdejihuibingbubihuancunyichuhuocuowuzhizhenshiquyinyongshao。taqueshihuifasheng!發生這種情況後的係統行為將是不確定的,因為默認情況下內存空間都是0xFF,或者由於內存區通常沒有寫過,其中的值可能隻有上帝才知道。
不過有相當完備的linker或IDE技巧可以用來幫助識別這樣的事件並從中恢複係統。技巧就是使用FILL命令對未用ROMtianchongyizhideweimoshi。yaotianchongweishiyongdeneicun,youhenduobutongdekenengzuhekeyishiyong,danruguoshixiangjianligengjiakekaodexitong,zuimingxiandexuanzeshizaizhexieweizhifangzhiISR fault handler。如果係統出了某些差錯,處理器開始執行程序空間以外的代碼,就會觸發ISR,並在決定校正行動之前提供儲存處理器、寄存器和係統狀態的機會。
技巧#2——檢查應用程序的CRC
對嵌入式工程師來說一個很大的好處是,我們的IDE和工具鏈可以自動產生應用程序或內存空間校驗和(Checksum),從而根據這個校驗和驗證應用程序是否完好。有趣的是,在許多這些案例中,隻有在將程序代碼加載到設備時,才會用到校驗和。
然而,如果CRC或校驗和保持在內存中,那麼驗證應用程序在啟動時(或甚至對長時間運行的係統定期驗證)是shi否fou仍reng然ran完wan好hao是shi確que保bao意yi外wai之zhi事shi不bu會hui發fa生sheng的de極ji好hao途tu徑jing。現xian在zai一yi個ge編bian程cheng過guo的de應ying用yong程cheng序xu發fa生sheng改gai變bian的de概gai率lv是shi很hen小xiao的de,但dan考kao慮lv每mei年nian交jiao付fu的de數shu十shi億yi個ge微wei控kong製zhi器qi以yi及ji可ke能neng惡e劣lie的de工gong作zuo環huan境jing,應ying用yong程cheng序xu崩beng潰kui的de機ji會hui並bing不bu是shi零ling。更geng有you可ke能neng的de是shi,係xi統tong中zhong的de一yi個ge缺que陷xian可ke能neng導dao致zhi某mou一yi扇shan區qu發fa生sheng閃shan存cun寫xie入ru或huo閃shan存cun擦ca除chu,從cong而er破po壞huai應ying用yong程cheng序xu的de完wan整zheng性xing。
技巧#3——在啟動時執行RAM檢查
為了建立一個更加可靠和紮實的係統,確保係統硬件正常工作非常重要。畢竟硬件會發生故障。(幸運的是軟件永遠不會發生故障,軟件隻會做代碼要它做的事,不管是正確的還是錯誤的)。在啟動時驗證RAM的內部或外部沒有問題,是確保硬件可以如預期般運作的一個好方法。
有許多不同的方法可用於執行RAM檢查,但常用的方法是寫入一個已知的模式,然後等上一小段時間再回讀。結果應該是所讀就是所寫。真相是,在大多數情況下RAM檢查是通過的,這也是我們想要的結果。但也有極小的可能性檢查不通過,這時就為係統標示出硬件問題提供了極好的機會。
技巧#4——使用堆棧監視器
對dui許xu多duo的de嵌qian入ru式shi開kai發fa者zhe而er言yan,堆dui棧zhan似si乎hu是shi一yi股gu相xiang當dang神shen秘mi的de力li量liang。當dang奇qi怪guai的de事shi情qing開kai始shi發fa生sheng,工gong程cheng師shi終zhong於yu被bei難nan倒dao了le,他ta們men開kai始shi思si考kao,也ye許xu堆dui棧zhan中zhong發fa生sheng了le什shen麼me事shi。結jie果guo是shi盲mang目mu地di調tiao整zheng堆dui棧zhan的de大da小xiao和he位wei置zhi等deng等deng。但dan該gai錯cuo誤wu往wang往wang是shi與yu堆dui棧zhan無wu關guan的de,但dan怎zen能neng如ru此ci確que定ding?畢bi竟jing,有you多duo少shao工gong程cheng師shi真zhen的de實shi際ji執zhi行xing過guo最zui壞huai情qing況kuang下xia的de堆dui棧zhan大da小xiao分fen析xi?
堆棧大小是在編譯時就靜態分配好的,但堆棧是以動態的方式使用的。隨著代碼的執行,應用程序需要的變量、返fan回hui的de地di址zhi和he其qi它ta信xin息xi被bei不bu斷duan存cun儲chu在zai堆dui棧zhan中zhong。這zhe種zhong機ji製zhi導dao致zhi堆dui棧zhan在zai其qi分fen配pei的de內nei存cun中zhong不bu斷duan增zeng長chang。然ran而er,這zhe種zhong增zeng長chang有you時shi會hui超chao出chu編bian譯yi時shi確que定ding的de容rong量liang極ji限xian,導dao致zhi堆dui棧zhan破po壞huai相xiang鄰lin內nei存cun區qu域yu的de數shu據ju。
絕對確保堆棧正常工作的一種方法是實現堆棧監視器,將它作為係統“保健”代碼的一部分(有多少工程師會這樣做?)。堆棧監視器會在堆棧和“其它”neicunquyuzhijianchuangjianyigehuanchongquyu,bingtianchongyizhideweimoshi。ranhoujianshiqihuibuduandejianshituanshifouyourenhebianhua。ruguogaiweimoshifashenglegaibian,najiuyiweizheduizhanzengchangdetaidale,jijiangyaobaxitongtuixiangheiandiyu!此時監視器可以記錄事件的發生、係統狀態以及任何其它有用的數據,供日後用於問題的診斷。
大多數實時操作係統(RTOS)或實現了內存保護單元(MPU)deweikongzhiqixitongzhongdoutigongyouduizhanjianshiqi。kepadeshi,zhexiegongnengmorendoushiguanbizhuangtai,huozhejingchangbeikaifarenyuanyouyiguanbi。zaiwangluoshangkuaisusouxunyixiakeyifaxian,henduorenjianyiguanbishishicaozuoxitongzhongdeduizhanjianshiqiyijiesheng56字節的閃存空間。等等,這可是得不償失的做法!
技巧#5 - 使用MPU
在過去,是很難在一個小而廉價的微控製器中找到內存保護單元(MPU)的,但這種情況已經開始改變。現在從高端到低端的微控製器都已經有MPU,而這些MPU為嵌入式軟件開發人員提供了一個可以大幅提高其固件(firmware)魯棒性(robustness)的機會。
MPU 已逐漸與操作係統耦合,以便建立內存空間,其中的處理都分開,或任務可執行其代碼,而不用擔心被stomped on。tangruozhenyoushiqingfasheng,bushoukongzhidechulihuibeiquxiao,yehuizhixingqitadebaohucuoshi。qingliuyidaiyouzhezhongzujiandeweikongzhiqi,ruguoyou,qingduojialiyongtadezhezhongtexing。
技巧#6 - 建立一個強大的看門狗係統
你經常會發現的一種總是最受喜愛的看門狗(watchdog)實現是,在看門狗被啟用之處(這是一個很好的開始),但也是可以用周期性定時器將該看門狗清零之處;定ding時shi器qi的de啟qi用yong是shi完wan全quan與yu程cheng序xu中zhong出chu現xian的de任ren何he情qing況kuang隔ge離li的de。使shi用yong看kan門men狗gou的de目mu的de是shi協xie助zhu確que保bao如ru果guo出chu現xian錯cuo誤wu,看kan門men狗gou不bu會hui被bei清qing零ling,即ji當dang工gong作zuo暫zan停ting,係xi統tong會hui被bei迫po去qu執zhi行xing硬ying件jian重zhong設she定ding(hardware reset),以便恢複。使用與係統活動獨立的定時器可以讓看門狗保持清零,即使係統已失效。
對dui應ying用yong任ren務wu如ru何he整zheng合he到dao看kan門men狗gou係xi統tong中zhong,嵌qian入ru式shi開kai發fa人ren員yuan需xu要yao仔zai細xi考kao慮lv和he設she計ji。例li如ru,有you種zhong技ji術shu可ke能neng可ke以yi讓rang每mei個ge在zai一yi定ding時shi期qi內nei運yun行xing的de任ren務wu標biao示shi它ta們men可ke以yi成cheng功gong地di完wan成cheng其qi任ren 務wu。在zai此ci事shi件jian中zhong,看kan門men狗gou不bu被bei清qing零ling,強qiang製zhi被bei複fu位wei。還hai有you一yi些xie比bi較jiao先xian進jin的de技ji術shu,像xiang是shi使shi用yong外wai部bu看kan門men狗gou處chu理li器qi,它ta可ke用yong來lai監jian視shi主zhu處chu理li器qi如ru何he表biao現xian,反fan之zhi亦yi然ran。
duiyigekekaodexitongeryan,jianliyigeqiangdadekanmengouxitongshihenzhongyaode。youyuyoutaiduodejishu,nanyizaizhejigeduanluozhongwanquanhangai,danzhenduiciyiyiti,bizheweilaihaihuifabiaoxiangguandewenzhang。
技巧#7 - 避免易失存儲器分配
不(bu)習(xi)慣(guan)在(zai)資(zi)源(yuan)有(you)限(xian)環(huan)境(jing)下(xia)工(gong)作(zuo)的(de)工(gong)程(cheng)師(shi),可(ke)能(neng)會(hui)試(shi)圖(tu)使(shi)用(yong)其(qi)編(bian)程(cheng)語(yu)言(yan)的(de)特(te)性(xing),這(zhe)種(zhong)語(yu)言(yan)讓(rang)他(ta)們(men)可(ke)以(yi)使(shi)用(yong)易(yi)失(shi)存(cun)儲(chu)器(qi)分(fen)配(pei)。畢(bi)竟(jing),這(zhe)是(shi)一(yi)種(zhong)常(chang)在(zai)計(ji)算(suan)器(qi)係(xi)統(tong)中(zhong)使(shi)用(yong)的(de)技(ji)術(shu),在(zai)計(ji)算(suan)器(qi)係(xi)統(tong)中(zhong),隻(zhi)有(you)在(zai)有(you)必(bi)要(yao)時(shi),內(nei)存(cun)才(cai)會(hui)被(bei)分(fen)配(pei)。例(li)如(ru),以(yi)C開發時,工程師可能傾向於使用malloc來分配在堆(heap)上的空間。有一個操 作會執行,一旦完成,可以使用free將被分配的內存返回,以便堆的使用。
在資源受限的係統,這可能是一場災難!使shi用yong易yi失shi存cun儲chu器qi分fen配pei的de其qi中zhong一yi個ge問wen題ti是shi,錯cuo誤wu或huo不bu當dang的de技ji術shu可ke能neng會hui導dao致zhi內nei存cun泄xie漏lou或huo內nei存cun碎sui片pian。如ru果guo出chu現xian這zhe些xie問wen題ti時shi,大da多duo數shu的de嵌qian入ru式shi係xi統tong並bing沒mei有you ziyuanhuozhishilaijianshiduihuotuoshandichulita。erdangtamenfashengshi,ruguoyingyongchengxutichuduikongjiandeyaoqiu,danquemeiyousuoqingqiudekongjiankeyishiyong,huifashengshenmeshine?
使用易失存儲器分配所產生的問題是很複雜的,要妥善處理這些問題,可以說是一個噩夢!一種替代的方法是,直接以靜態的方式,簡化內存的分配。例如,隻要在 程序中簡單地建立一個大小為256字節長的緩衝區,而不是經由malloc請求這樣大小的內存緩衝區。此一分配的內存可在整個應用程序的生命周期期 間保持,且不會有堆或內存碎片問題方麵的顧慮。
結語
這些都隻是一些可以讓開發人員開始建立更可靠嵌入式係統的方法。另外還有很多其他技術,例如利用良好的編碼標準、位翻轉的監測、執行數組和指針邊界檢查,及使用斷言等。所有這些技術都是讓設計者可以開發出可靠性更高嵌入式係統的秘訣。
相關閱讀:
QNX無線架構為嵌入式係統帶來智能手機的連接性
選型必備:嵌入式應用中存儲器的選型秘籍
電路天天讀:CAN總線與以太網的嵌入式網關電路的設計與實現
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 邊緣AI的發展為更智能、更可持續的技術鋪平道路
- 每台智能體PC,都是AI時代的新入口
- IAR作為Qt Group獨立BU攜兩項重磅汽車電子應用開發方案首秀北京車展
- 構建具有網絡彈性的嵌入式係統:來自行業領袖的洞見
- 數字化的線性穩壓器
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
SATA連接器
SD連接器
SII
SIM卡連接器
SMT設備
SMU
SOC
SPANSION
SRAM
SSD
ST
ST-ERICSSON
Sunlord
SynQor
s端子線
Taiyo Yuden
TDK-EPC
TD-SCDMA功放
TD-SCDMA基帶
TE
Tektronix
Thunderbolt
TI
TOREX
TTI
TVS
UPS電源
USB3.0
USB 3.0主控芯片
USB傳輸速度



