嵌入式軟件設計處處是坑,確保可靠性有這些絕招
發布時間:2017-03-28 責任編輯:susan
【導讀】硬(ying)件(jian)叱(chi)吒(zha)江(jiang)湖(hu),軟(ruan)件(jian)通(tong)過(guo)控(kong)製(zhi)硬(ying)件(jian)來(lai)統(tong)治(zhi)江(jiang)湖(hu)。如(ru)今(jin),有(you)電(dian)子(zi)的(de)地(di)方(fang)就(jiu)有(you)嵌(qian)入(ru)式(shi)軟(ruan)件(jian),有(you)電(dian)子(zi)故(gu)障(zhang)的(de)地(di)方(fang),也(ye)就(jiu)有(you)嵌(qian)入(ru)式(shi)軟(ruan)件(jian)設(she)計(ji)缺(que)陷(xian)的(de)影(ying)子(zi)。我(wo)們(men)今(jin)天(tian)就(jiu)把(ba)軟(ruan)件(jian)所(suo)容(rong)易(yi)犯(fan)的(de)錯(cuo)誤(wu)和(he)規(gui)避(bi)的(de)方(fang)法(fa)一(yi)一(yi)羅(luo)列(lie),並(bing)給(gei)出(chu)應(ying)對(dui)之(zhi)法(fa)。
嵌(qian)入(ru)式(shi)軟(ruan)件(jian)的(de)最(zui)大(da)特(te)點(dian)是(shi)以(yi)控(kong)製(zhi)為(wei)主(zhu),軟(ruan)硬(ying)結(jie)合(he)的(de)較(jiao)多(duo),功(gong)能(neng)性(xing)的(de)操(cao)作(zuo)較(jiao)多(duo),模(mo)塊(kuai)相(xiang)互(hu)間(jian)調(tiao)用(yong)的(de)較(jiao)多(duo),外(wai)部(bu)工(gong)作(zuo)環(huan)境(jing)複(fu)雜(za)容(rong)易(yi)受(shou)到(dao)幹(gan)擾(rao)或(huo)幹(gan)擾(rao)別(bie)的(de)設(she)備(bei),且(qie)執(zhi)行(xing)錯(cuo)誤(wu)的(de)後(hou)果(guo)不(bu)僅(jin)僅(jin)是(shi)數(shu)據(ju)錯(cuo)誤(wu)而(er)是(shi)有(you)可(ke)能(neng)導(dao)致(zhi)不(bu)可(ke)估(gu)量(liang)的(de)災(zai)難(nan),所(suo)以(yi)總(zong)結(jie)起(qi)來(lai),嵌(qian)入(ru)式(shi)軟(ruan)件(jian)可(ke)靠(kao)性(xing)設(she)計(ji)需(xu)注(zhu)意(yi)的(de)問(wen)題(ti)有(you)四(si)個(ge)方(fang)麵(mian):
1、軟件接口
先說軟件接口中容易出問題的地方和編程人員容易犯的錯誤。
軟件接口調用一般會有數據的賦值,賦值變量的數據類型可能會存在強製的數據轉換;需加以檢查。如果為了防範出問題的話,可以添加對數據範圍和數據類型的檢查。
賦值數據的數量不對路,多了少了的都不好,會出現意外的賦值結果,不過還好,這項錯誤比較好檢查。
軟ruan件jian編bian程cheng中zhong,會hui有you對dui某mou一yi功gong能neng操cao作zuo代dai碼ma的de複fu用yong,比bi如ru對dui某mou個ge端duan口kou的de數shu據ju檢jian查zha和he控kong製zhi,在zai整zheng個ge程cheng序xu中zhong隻zhi會hui發fa生sheng兩liang次ci,為wei了le圖tu省sheng事shi,可ke能neng就jiu直zhi接jie把ba該gai段duan代dai碼ma直zhi接jie插cha入ru實shi際ji程cheng序xu模mo塊kuai中zhong去qu了le,這zhe樣yang,在zai源yuan程cheng序xu代dai碼ma中zhong,就jiu出chu現xian了le兩liang段duan完wan全quan相xiang同tong,完wan成cheng相xiang同tong功gong能neng,隻zhi是shi服fu務wu於yu不bu同tong模mo塊kuai的de代dai碼ma,按an道dao理li來lai說shuo,這zhe樣yang設she計ji其qi實shi也ye沒mei啥sha問wen題ti,是shi的de,你ni沒mei錯cuo,但dan你ni的de行xing為wei會hui使shi別bie人ren無wu意yi中zhong犯fan錯cuo。有you人ren會hui說shuo了le,我wo這zhe樣yang寫xie代dai碼ma怎zen麼me就jiu算suan引yin誘you呢ne?原yuan因yin是shi程cheng序xu可ke能neng會hui升sheng級ji,你ni這zhe幾ji行xing代dai碼ma在zai實shi際ji應ying用yong過guo程cheng中zhong也ye不bu能neng保bao證zheng是shi盡jin善shan盡jin美mei的de,發fa現xian不bu完wan善shan的de地di方fang後hou,勢shi必bi會hui修xiu改gai,如ru果guo你ni還hai能neng想xiang得de起qi來lai,可ke能neng不bu會hui遺yi漏lou,如ru果guo修xiu改gai此ci代dai碼ma的de是shi別bie的de人ren,改gai了le一yi個ge地di方fang,別bie的de地di方fang沒mei改gai,是shi不bu是shi還hai留liu著zhe隱yin患huan?那na如ru何he做zuo呢ne?方fang法fa不bu難nan,把ba這zhe段duan功gong能neng單dan獨du做zuo成cheng一yi個ge模mo塊kuai即ji可ke,對dui此ci端duan口kou的de讀du取qu和he控kong製zhi賦fu值zhi均jun由you此ci獨du立li模mo塊kuai完wan成cheng,如ru果guo數shu據ju的de正zheng確que性xing影ying響xiang大da的de話hua,還hai需xu要yao對dui端duan口kou數shu據ju的de正zheng確que性xing進jin行xing檢jian查zha和he判pan斷duan。嵌qian入ru式shi軟ruan件jian可ke靠kao性xing編bian程cheng方fang法fa的de四si個ge目mu的de是shi防fang錯cuo、判錯、糾錯、容錯。對端口數據的判斷屬於判錯的內容。
2、軟硬件接
硬件,對外的執行都靠它來實現,一旦出現問題,執行後的後果就不可控了,但如何注意呢?
對讀進來的硬件接口的數據要判斷其真偽;
對輸出的數據的執行效果要檢測;
對dui輸shu出chu的de數shu據ju的de可ke能neng後hou果guo要yao進jin行xing預yu防fang性xing設she計ji,數shu據ju輸shu出chu的de過guo程cheng,我wo們men從cong設she計ji上shang要yao做zuo一yi個ge分fen析xi,分fen析xi的de思si路lu是shi一yi般ban容rong易yi局ju限xian在zai穩wen態tai過guo程cheng,忽hu視shi了le過guo渡du過guo程cheng。舉ju例li說shuo明ming,比bi如ru我wo們men控kong製zhi一yi個ge支zhi路lu的de供gong電dian,從cong軟ruan件jian控kong製zhi來lai說shuo,直zhi接jie給gei繼電器一個啟動信號,讓開狀態的觸點閉合就可以了,非“關”即“開”,是受控繼電器的兩個穩態狀態,但事實上,在從開到閉合的過程中,支路供電的電壓並不是一個簡單0V—24V(24V為示例而已)的跳變狀態,而是一個抖動,有衝擊信號的過程,這種情況在硬件上的防護是必不可少的,但在軟件上也不是可以事不關己、高高掛起的。
另ling外wai在zai邏luo輯ji上shang,宜yi將jiang容rong易yi被bei幹gan擾rao和he容rong易yi產chan生sheng的de幹gan擾rao控kong製zhi動dong作zuo從cong時shi序xu上shang控kong製zhi好hao,予yu以yi分fen開kai隔ge離li。比bi如ru,控kong製zhi繼ji電dian器qi的de過guo程cheng是shi容rong易yi產chan生sheng抖dou動dong尖jian峰feng脈mai衝chong而er幹gan擾rao數shu據ju總zong線xian和he控kong製zhi信xin號hao總zong線xian的de,這zhe時shi候hou從cong控kong製zhi上shang,不bu宜yi同tong時shi實shi施shi數shu據ju的de發fa送song和he接jie收shou工gong作zuo,不bu宜yi作zuo出chu其qi他ta的de控kong製zhi動dong作zuo,惹re不bu起qi咱zan躲duo得de起qi,躲duo過guo這zhe一yi陣zhen幹gan擾rao的de時shi候hou總zong可ke以yi了le吧ba?
3、軟件代碼
軟件的可靠性是隨著時間的推移,可靠性逐漸增加的,這一點區別於電子可靠性、機械可靠性。電子可靠性服從指數分布,在整個生命周期內,其失效率為一個常數;機械可靠性因為磨損、腐蝕、運動等因素的存在,隨時間推移可靠度會下降。因此也就有了軟件可靠性設計的一個特定規律和注意事項。
既ji然ran需xu要yao通tong過guo時shi間jian推tui移yi,通tong過guo不bu斷duan改gai進jin,軟ruan件jian可ke靠kao性xing得de到dao提ti升sheng。那na麼me軟ruan件jian的de可ke維wei護hu性xing就jiu是shi一yi個ge大da問wen題ti了le。這zhe也ye是shi為wei什shen麼me軟ruan件jian工gong程cheng管guan理li方fang麵mian特te別bie關guan注zhu軟ruan件jian文wen檔dang、注釋的原因了。但做這些要求的人隻是人雲亦雲,並不理解如此做法的真正動機。至於注釋如何去做、變量如何命名、軟件配置管理如何操作,這裏麵既有很常規的方法,也有一些我們司空見慣然而是錯誤的做法。信手舉上幾個值得注意的細節供參考。
變量定義時宜將變量類型的變量名程中體現於其中;如AD_result_int、Cal_result_float等。這樣為的好檢查,防止數據類型的強製轉換或強製賦值時出現數據類型的錯誤;
注釋要充分;
代碼的布局風格宜統一,便於閱讀查找;
不可出現非受控的default流程,所有數值和變量,不論是調用函數時賦予的、讀取接口讀進來的、還是中間變量計算出來的,在應用前都宜作數據有效性的判斷,並對判定的所有可能結果均做受控的對應處理。
guanyuruanjiankeweihuxingbianchengfangfafangmiandewenzhangziliaozaiwangshangshiputiangaidi,buyuzhuishu,zonghecaiyongzhijike。henduowenzhangbaruanjiankeweihuxingbianchengguifantuijianzuochengqiyedeqianrushiruanjiankekaoxingshejiguifan,shizaishiyoudianyipiangaiquan,youshipianpode。
ruanjiandaimazaizhixingzhongrongyichuxiandexiayigewentishipaofei,chengxuzhizhenshoudaoganrao,tiaozhuandaoleyigefeishoukongweizhi,zhixinglebugaizhixingdedaima。ruguozhixinglebugaizhixingdedaima,ruguozaichengxuzhongjiarulezugoudebianliangpanduan、讀值判斷、狀態檢測判斷等,那倒還好了,後果也不會太嚴重,甚至最終還是可能自己跑回來的。但有一種跑飛是比較可怕的,一般我們在ROM中存放的程序目標代碼是1-3字節的指令,就是最多3條字段的目標碼組成了執行動作,如果程序指針跑飛到了某個3字節指令的第2個字節上的時候,執行的後果是什麼,可就真的沒人知道了,即使在程序上作了足夠的數據判錯、邏輯跳轉的防範措施,結果也不會好。而且ROM一(yi)般(ban)是(shi)不(bu)可(ke)能(neng)全(quan)部(bu)都(dou)被(bei)程(cheng)序(xu)代(dai)碼(ma)填(tian)滿(man)的(de),總(zong)有(you)富(fu)餘(yu)空(kong)間(jian),富(fu)餘(yu)空(kong)間(jian)中(zhong)的(de)默(mo)認(ren)內(nei)容(rong)是(shi)啥(sha),這(zhe)些(xie)默(mo)認(ren)字(zi)節(jie)是(shi)否(fou)也(ye)會(hui)導(dao)致(zhi)一(yi)些(xie)操(cao)作(zuo)呢(ne)?單(dan)片(pian)機(ji)中(zhong)的(de)默(mo)認(ren)空(kong)間(jian)是(shi)0FFH,DSP的我沒查過,大家有興趣查一下,跳到這些字段裏,也是容易出麻煩的。
好了,不再羅嗦,直接給出解決方法吧,就是每隔一段程序代碼或控製區域,就人為放置上幾個NOP指令,在NOP指令後放置一個長跳轉的ERR處理程序。注意NOP最少放置3個,這樣任何的跑飛最多隻能占用2個NOP,第三個NOP一樣還是能把程序代碼揪回來,揪回來後就執行ERR處理程序。
如果碰到安全性、kekaoxingdengjiyaoqiubijiaogaodechengxu,tuijiandechulifangfakeyicaiyongrebeifendechulifangfa,jiyongliangduandaimatongshizhixingtongyigegongneng,zhixingdejieguojinxingduibi,ruguoyizhizefangxingtongguo,ruguojieguobuyizhi,zenmechulijiukangeren。
安全性和可靠性的編程細節注意事項還有很多,窺一斑難見全豹。
4、數據、變量
變量的定義是為的避免各種混淆,同一程序內數據和數據的混淆、不同人讀程序時對變量理解上出現的二義性、視覺效果上容易出現的錯誤(字母的“o”和數字的“0”,字母的“l”和數字的“1”)。這裏要遵循一個“要麼相同,要麼迥異”的de基ji本ben規gui則ze,這zhe條tiao規gui則ze在zai很hen多duo的de領ling域yu都dou有you應ying用yong。在zai結jie構gou的de防fang呆dai性xing設she計ji上shang,接jie插cha件jian的de選xuan型xing也ye是shi如ru此ci,如ru果guo一yi個ge乳ru白bai色se和he一yi個ge淺qian灰hui色se的de同tong類lei接jie插cha件jian,最zui好hao的de選xuan擇ze是shi有you很hen直zhi觀guan的de視shi覺jiao差cha異yi或huo結jie構gou的de差cha異yi,或huo者zhe幹gan脆cui就jiu是shi相xiang同tong的de,相xiang同tong須xu基ji於yu一yi個ge前qian提ti,互hu換huan性xing要yao好hao。
用顯意的符號來命名變量和語句標號。標識符的命名有明確含義,且是完整單詞或易理解的縮寫。短單詞通過去掉“元音”形成縮寫;長單詞取頭幾個字母形成縮寫;一些單詞有公認的縮寫。如:
Temp — tmp;
Flag — flg;
Statistic — stat;
Increment — inc;
Message — msg。
特(te)殊(shu)約(yue)定(ding)或(huo)縮(suo)寫(xie),要(yao)有(you)注(zhu)釋(shi)說(shuo)明(ming)。在(zai)源(yuan)文(wen)件(jian)開(kai)始(shi)處(chu),對(dui)使(shi)用(yong)的(de)縮(suo)寫(xie)或(huo)約(yue)定(ding)注(zhu)釋(shi)說(shuo)明(ming)。自(zi)己(ji)特(te)有(you)的(de)命(ming)名(ming)風(feng)格(ge),要(yao)自(zi)始(shi)至(zhi)終(zhong)保(bao)持(chi)一(yi)致(zhi)。對(dui)於(yu)變(bian)量(liang)命(ming)名(ming),禁(jin)止(zhi)取(qu)單(dan)個(ge)字(zi)符(fu)(如i、j、k...);含義+變量類型、數據類型等,i、j、k作局部循環變量是允許的,但容易混淆的字母慎用。如int Liv_Width,L代表局部變量(Local)(g全局變量Global)、i代表數據類型(Interger)、 v代表 變量(Variable)(c常量Const)、Width代表變量的含義,這種命名方式可防止局部變量與全局變量重名。
禁用易混淆的標識符(R1和Rl,DO和D0等)來表示不同的變量、文件名和語句標號。
除了編譯開關/頭文件等特殊應用,避免使用_EXAMPLE_TEST_之類以下劃線開始和結尾的定義。
quanjubianliangshizhanlvexingziyuan,tajuedinglemokuaihemokuaijiandeouhedu,xuzaixiangmushangtishengdaoyigezugougaodegaodu,shenyongquanjubianliang,budebuyongdeshihou,yaodanduweimeiyigequanjubianliangbianxiedulidecaozuomokuaihuohanshu,zaixiugaiquanjubianliangdeshihou,yaojianzhashifouyoubiedehanshuzaitiaoyongtabingqiexuyaocishuzhibaochiwending。
對變量代表某個特定含義的時候,盡量不要僅僅用位來代表什麼,比如用某變量的第零位代表某個狀態(0000 0001,其中僅用1代表某個內容,這樣01H、03H、05H… 會有很多個組合都能代表這個狀態);位容易受幹擾被修改,信息出現錯誤的幾率大很多。
也不要用00H、FFH等數據代表,就像我們麵試一群人一樣,第一個被麵試人和最後一個被麵試人容易被記住,00H和FFH亦然,係統默認狀態是00和FF的時候較多,他們容易被複位或置位成這類數值。推薦以四位的二進製碼的某個中間值為狀態變量,如1001。
變量數據在應用之前宜作數據類型和數值範圍的判斷;
數據在存儲過程中也容易出現問題,EEPROM、RAM等都有過類似的案例。數據出錯時避免不了的,解決的辦法是學花旗銀行等美國金融企業,之所以在9.11後他們能很快恢複業務,基本沒有數據方麵的損失,原因何在?因為他們有異地容災數據備份係統,知裏麵有兩個關鍵詞,異地、備份。我們的信息也同樣,首先選擇存在不同的介質中、或(huo)相(xiang)同(tong)的(de)介(jie)質(zhi)但(dan)迥(jiong)異(yi)的(de)存(cun)放(fang)環(huan)境(jing)和(he)位(wei)置(zhi)下(xia),雙(shuang)重(zhong)備(bei)份(fen)的(de)結(jie)局(ju)是(shi)兩(liang)邊(bian)不(bu)一(yi)致(zhi)的(de)時(shi)候(hou),數(shu)據(ju)被(bei)懷(huai)疑(yi)並(bing)拒(ju)絕(jue)反(fan)映(ying)執(zhi)行(xing),但(dan)嵌(qian)入(ru)式(shi)軟(ruan)件(jian)很(hen)多(duo)時(shi)候(hou)是(shi)要(yao)靠(kao)數(shu)據(ju)來(lai)推(tui)動(dong)執(zhi)行(xing)機(ji)構(gou)的(de),即(ji)使(shi)發(fa)現(xian)數(shu)據(ju)有(you)問(wen)題(ti)也(ye)不(bu)允(yun)許(xu)行(xing)政(zheng)不(bu)作(zuo)為(wei),這(zhe)種(zhong)情(qing)況(kuang)下(xia),作(zuo)為(wei)我(wo)們(men)也(ye)很(hen)難(nan)辦(ban),2gebutongdeshuju,youmingxianwentidehaihaopaichu,douzaiyouxianfanweineikeruhepandingha?zhezhongshihoumeibanfazhihaosanbeifen,shaoshufucongduoshushiweiyidexuanzele。shitoujiandaobudefangshibuhaoyong,geyoudefenqizhongduanjiyebushiyong,jiuzhihaoxuanzezhezhongzuiyuanshizuiyouxiaodebanfale,weiyixuyaozhuyideshishujuyicunfangyusanzhongbutongdebeifenhuanjingxia。
以yi上shang僅jin就jiu嵌qian入ru式shi軟ruan件jian可ke靠kao性xing的de關guan注zhu方fang麵mian分fen了le幾ji大da類lei,進jin行xing了le基ji本ben的de描miao述shu,實shi際ji應ying用yong中zhong,需xu要yao關guan注zhu的de點dian還hai有you很hen多duo很hen多duo,如ru果guo是shi準zhun備bei自zi行xing製zhi定ding設she計ji規gui範fan的de話hua,以yi上shang的de思si路lu應ying該gai也ye可ke以yi給gei與yu一yi些xie啟qi迪di了le。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 三星上演罕見對峙:工會集會討薪,股東隔街抗議
- 摩爾線程實現DeepSeek-V4“Day-0”支持,國產GPU適配再提速
- 築牢安全防線:智能駕駛邁向規模化應用的關鍵挑戰與破局之道
- GPT-Image 2:99%文字準確率,AI生圖告別“鬼畫符”
- 機器人馬拉鬆的勝負手:藏在主板角落裏的“時鍾戰爭”
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
NFC
NFC芯片
NOR
ntc熱敏電阻
OGS
OLED
OLED麵板
OmniVision
Omron
OnSemi
PI
PLC
Premier Farnell
Recom
RF
RF/微波IC
RFID
rfid
RF連接器
RF模塊
RS
Rubycon
SATA連接器
SD連接器
SII
SIM卡連接器
SMT設備
SMU
SOC
SPANSION

