電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>嵌入式軟件設(shè)計確保可靠性的技巧

嵌入式軟件設(shè)計確??煽啃缘募记?/h1>

2017-10-13 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

  男人征服世界,女人通過征服男人來征服世界;硬件叱咤江湖,軟件通過控制硬件來統(tǒng)治江湖。當今世界,放眼江湖,有電子的地方就有嵌入式軟件,有電子故障的地方,也就有嵌入式軟件設(shè)計缺陷的影子。我們今天就把軟件所容易犯的錯誤和規(guī)避的方法一一羅列,并給出應對之法。
  嵌入式軟件的最大特點是以控制為主,軟硬結(jié)合的較多,功能性的操作較多,模塊相互間調(diào)用的較多,外部工作環(huán)境復雜容易受到干擾或干擾別的設(shè)備,且執(zhí)行錯誤的后果不僅僅是數(shù)據(jù)錯誤而是有可能導致不可估量的災難,所以總結(jié)起來,嵌入式軟件可靠性設(shè)計需注意的問題有四個方面:
  1、軟件接口
  先說軟件接口中容易出問題的地方和編程人員容易犯的錯誤。
  軟件接口調(diào)用一般會有數(shù)據(jù)的賦值,賦值變量的數(shù)據(jù)類型可能會存在強制的數(shù)據(jù)轉(zhuǎn)換;需加以檢查。如果為了防范出問題的話,可以添加對數(shù)據(jù)范圍和數(shù)據(jù)類型的檢查。
  賦值數(shù)據(jù)的數(shù)量不對路,多了少了的都不好,會出現(xiàn)意外的賦值結(jié)果,不過還好,這項錯誤比較好檢查。
  軟件編程中,會有對某一功能操作代碼的復用,比如對某個端口的數(shù)據(jù)檢查和控制,在整個程序中只會發(fā)生兩次,為了圖省事,可能就直接把該段代碼直接插入實際程序模塊中去了,這樣,在源程序代碼中,就出現(xiàn)了兩段完全相同,完成相同功能,只是服務于不同模塊的代碼,按道理來說,這樣設(shè)計其實也沒啥問題,是的,你沒錯,但你的行為會使別人無意中犯錯。就像青年男女相處,女孩子純粹是想和男孩子充分享受溫馨的氣氛和心情,并不想更深入的發(fā)生什么,但女孩子邀請男生去的是她的家,在家里換上了家居的睡衣,窗戶緊閉,放著的還是曖昧的音樂,然后無限哀怨地說“我沒想到結(jié)果會是這樣的”,那怪得誰來呢?在代碼方面,您的這種做法與貌似引誘男孩上鉤的少女無異。有人會說了,我這樣寫代碼怎么就算引誘呢?原因是程序可能會升級,您這幾行代碼在實際應用過程中也不能保證是盡善盡美的,發(fā)現(xiàn)不完善的地方后,勢必會修改,如果你還能想得起來,可能不會遺漏,如果修改此代碼的是別的人,改了一個地方,別的地方?jīng)]改,是不是還留著隱患?那如何做呢?方法不難,把這段功能單獨做成一個模塊即可,對此端口的讀取和控制賦值均由此獨立模塊完成,如果數(shù)據(jù)的正確性影響大的話,還需要對端口數(shù)據(jù)的正確性進行檢查和判斷。嵌入式軟件可靠性編程方法的四個目的是防錯、判錯、糾錯、容錯。對端口數(shù)據(jù)的判斷屬于判錯的內(nèi)容,如果數(shù)據(jù)有錯的話,糾錯和容錯的設(shè)計方法應該不用我深入講解了吧?
  2、軟硬件接
  硬件如男人,對外的執(zhí)行都靠它來實現(xiàn),一旦出現(xiàn)問題,執(zhí)行后的后果就不可控了,周總理說過“外交無小事”。但如何注意呢?
  對讀進來的硬件接口的數(shù)據(jù)要判斷其真?zhèn)危?br />   對輸出的數(shù)據(jù)的執(zhí)行效果要檢測;
  對輸出的數(shù)據(jù)的可能后果要進行預防性設(shè)計,數(shù)據(jù)輸出的過程,我們從設(shè)計上要做一個分析,分析的思路是一般容易局限在穩(wěn)態(tài)過程,忽視了過渡過程。舉例說明,比如我們控制一個支路的供電,從軟件控制來說,直接給繼電器一個啟動信號,讓開狀態(tài)的觸點閉合就可以了,非“關(guān)”即“開”,是受控繼電器的兩個穩(wěn)態(tài)狀態(tài),但事實上,在從開到閉合的過程中,支路供電的電壓并不是一個簡單0V—24V(24V為示例而已)的跳變狀態(tài),而是一個抖動,有沖擊信號的過程,這種情況在硬件上的防護是必不可少的,但在軟件上也不是可以事不關(guān)己、高高掛起的。另外在邏輯上,宜將容易被干擾和容易產(chǎn)生的干擾控制動作從時序上控制好,予以分開隔離。比如,控制繼電器的過程是容易產(chǎn)生抖動尖峰脈沖而干擾數(shù)據(jù)總線和控制信號總線的,這時候從控制上,不宜同時實施數(shù)據(jù)的發(fā)送和接收工作,不宜作出其他的控制動作,惹不起咱躲得起,躲過這一陣干擾的時候總可以了吧?
?
3、軟件代碼
軟件的可靠性是隨著時間的推移,可靠性逐漸增加的,這一點區(qū)別于電子可靠性、機械可靠性。電子可靠性服從指數(shù)分布,在整個生命周期內(nèi),其失效率為一個常數(shù);機械可靠性因為磨損、腐蝕、運動等因素的存在,隨時間推移可靠度會下降。因此也就有了軟件可靠性設(shè)計的一個特定規(guī)律和注意事項。
?
既然需要通過時間推移,通過不斷改進,軟件可靠性得到提升。那么軟件的可維護性就是一個大問題了。這也是為什么軟件工程管理方面特別關(guān)注軟件文檔、注釋的原因了。但做這些要求的人只是人云亦云,并不理解如此做法的真正動機。至于注釋如何去做、變量如何命名、軟件配置管理如何操作,這里面既有很常規(guī)的方法,也有一些我們司空見慣然而是錯誤的做法。信手舉上幾個值得注意的細節(jié)供參考。
?
變量定義時宜將變量類型的變量名程中體現(xiàn)于其中;如AD_result_int、Cal_result_float等。這樣為的好檢查,防止數(shù)據(jù)類型的強制轉(zhuǎn)換或強制賦值時出現(xiàn)數(shù)據(jù)類型的錯誤;
注釋要充分;
代碼的布局風格宜統(tǒng)一,便于閱讀查找;
不可出現(xiàn)非受控的default流程,所有數(shù)值和變量,不論是調(diào)用函數(shù)時賦予的、讀取接口讀進來的、還是中間變量計算出來的,在應用前都宜作數(shù)據(jù)有效性的判斷,并對判定的所有可能結(jié)果均做受控的對應處理。
?
關(guān)于軟件可維護性編程方法方面的文章資料在網(wǎng)上是鋪天蓋地,不予贅述,綜合采用之即可。很多文章把軟件可維護性編程規(guī)范推薦做成企業(yè)的嵌入式軟件可靠性設(shè)計規(guī)范,實在是有點以偏概全,有失偏頗的,用一句娛樂圈的話來說,“愛情是生活的重要內(nèi)容,但它不是生活的全部”,軟件可維護性編程方法亦然。

軟件代碼在執(zhí)行中容易出現(xiàn)的下一個問題是跑飛,程序指針受到干擾,跳轉(zhuǎn)到了一個非受控位置,執(zhí)行了不該執(zhí)行的代碼。如果執(zhí)行了不該執(zhí)行的代碼,如果在程序中加入了足夠的變量判斷、讀值判斷、狀態(tài)檢測判斷等,那倒還好了,后果也不會太嚴重,甚至最終還是可能自己跑回來的。但有一種跑飛是比較可怕的,一般我們在ROM中存放的程序目標代碼是1-3字節(jié)的指令,就是最多3條字段的目標碼組成了執(zhí)行動作,如果程序指針跑飛到了某個3字節(jié)指令的第2個字節(jié)上的時候,執(zhí)行的后果是什么,可就真的沒人知道了,即使在程序上作了足夠的數(shù)據(jù)判錯、邏輯跳轉(zhuǎn)的防范措施,結(jié)果也不會好。而且ROM一般是不可能全部都被程序代碼填滿的,總有富余空間,富余空間中的默認內(nèi)容是啥,這些默認字節(jié)是否也會導致一些操作呢?單片機中的默認空間是0FFH,DSP的我沒查過,大家有興趣查一下,跳到這些字段里,也是容易出麻煩的。
?
好了,不再羅嗦,直接給出解決方法吧,就是每隔一段程序代碼或控制區(qū)域,就人為放置上幾個NOP指令,在NOP指令后放置一個長跳轉(zhuǎn)的ERR處理程序。注意NOP最少放置3個,這樣任何的跑飛最多只能占用2個NOP,第三個NOP一樣還是能把程序代碼揪回來,揪回來后就執(zhí)行ERR處理程序。
?
如果碰到安全性、可靠性等級要求比較高的程序,推薦的處理方法可以采用熱備份的處理方法,即用兩段代碼同時執(zhí)行同一個功能,執(zhí)行的結(jié)果進行對比,如果一致則放行通過,如果結(jié)果不一致,咋處理就看您的嘍。但是… …國人有的是辦法,為了圖省事,你領(lǐng)導不是要求我編熱備份程序嗎,那好,我就把原來的代碼復制一遍,重新插入到某個地方,您這和明朝時代馮保太監(jiān)(還是嚴嵩、張居正阿?拿不準了,大家有興趣的翻看《明朝那些事兒》查閱下)玩的沒啥兩樣,自己寫奏章,自己給自己審批奏章。既然是備份就是為了防止一個人出問題,那最好的辦法自然是不同的人來編這段,如果原理計算方法上也不同,數(shù)據(jù)采集通道也不同,那就過年帶娶媳婦的,好上加好了。
?
安全性和可靠性的編程細節(jié)注意事項還有很多,窺一斑難見全豹呵,諸位仁兄一起努力鉆研了。
?
4、數(shù)據(jù)、變量
變量的定義是為的避免各種混淆,同一程序內(nèi)數(shù)據(jù)和數(shù)據(jù)的混淆、不同人讀程序時對變量理解上出現(xiàn)的二義性、視覺效果上容易出現(xiàn)的錯誤(字母的“o”和數(shù)字的“0”,字母的“l(fā)”和數(shù)字的“1”)。這里要遵循一個“要么相同,要么迥異”的基本規(guī)則,這條規(guī)則在很多的領(lǐng)域都有應用,用的最絕的是朱元璋,對待貪官,要么不理你,自覺點您貪差不多了就收手吧,您自己不收手的話,做的過了直接就殺,株連幾族,所以在明朝,朱元璋是殺人最多的皇帝;在結(jié)構(gòu)的防呆性設(shè)計上,接插件的選型也是如此,如果一個乳白色和一個淺灰色的同類接插件,最好的選擇是有很直觀的視覺差異或結(jié)構(gòu)的差異,或者干脆就是相同的,相同須基于一個前提,互換性要好。
?
用顯意的符號來命名變量和語句標號。標識符的命名有明確含義,且是完整單詞或易理解的縮寫。短單詞通過去掉“元音”形成縮寫;長單詞取頭幾個字母形成縮寫;一些單詞有公認的縮寫。如:
???????? Temp???? — tmp;
???????? Flag????? — flg;
???????? Statistic?? — stat;
???????? Increment —?? inc;
???????? Message? —? msg。
?
特殊約定或縮寫,要有注釋說明。在源文件開始處,對使用的縮寫或約定注釋說明。自己特有的命名風格,要自始至終保持一致。對于變量命名,禁止取單個字符(如i、j、k...);含義+變量類型、數(shù)據(jù)類型等,i、j、k作局部循環(huán)變量是允許的,但容易混淆的字母慎用。如int Liv_Width,L代表局部變量(Local)(g全局變量Global)、i代表數(shù)據(jù)類型(Interger)、 v代表 變量(Variable)(c常量Const)、Width代表變量的含義,這種命名方式可防止局部變量與全局變量重名。
???
禁用易混淆的標識符(R1和Rl,DO和D0等)來表示不同的變量、文件名和語句標號。
???
除了編譯開關(guān)/頭文件等特殊應用,避免使用_EXAMPLE_TEST_之類以下劃線開始和結(jié)尾的定義。
?
全局變量是戰(zhàn)略性資源,它決定了模塊和模塊間的耦合度,需在項目上提升到一個足夠高的高度,慎用全局變量,不得不用的時候,要單獨為每一個全局變量編寫獨立的操作模塊或函數(shù),在修改全局變量的時候,要檢查是否有別的函數(shù)在調(diào)用它并且需要此數(shù)值保持穩(wěn)定。

對變量代表某個特定含義的時候,盡量不要僅僅用位來代表什么,比如用某變量的第零位代表某個狀態(tài)(0000 0001,其中僅用1代表某個內(nèi)容,這樣01H、03H、05H… 會有很多個組合都能代表這個狀態(tài));位容易受干擾被修改,信息出現(xiàn)錯誤的幾率大很多。
?
也不要用00H、FFH等數(shù)據(jù)代表,就像我們面試一群人一樣,第一個被面試人和最后一個被面試人容易被記住,00H和FFH亦然,系統(tǒng)默認狀態(tài)是00和FF的時候較多,他們?nèi)菀妆粡臀换蛑梦怀蛇@類數(shù)值。推薦以四位的二進制碼的某個中間值為狀態(tài)變量,如1001。
?
變量數(shù)據(jù)在應用之前宜作數(shù)據(jù)類型和數(shù)值范圍的判斷;
數(shù)據(jù)在存儲過程中也容易出現(xiàn)問題,EEPROM、RAM等都有過類似的案例。數(shù)據(jù)出錯時避免不了的,解決的辦法是學花旗銀行等美國金融企業(yè),之所以在9.11后他們能很快恢復業(yè)務,基本沒有數(shù)據(jù)方面的損失,原因何在?因為他們有異地容災數(shù)據(jù)備份系統(tǒng),知里面有兩個關(guān)鍵詞,異地、備份。我們的信息也同樣,首先選擇存在不同的介質(zhì)中、或相同的介質(zhì)但迥異的存放環(huán)境和位置下,雙重備份的結(jié)局是兩邊不一致的時候,數(shù)據(jù)被懷疑并拒絕反映執(zhí)行,但嵌入式軟件很多時候是要靠數(shù)據(jù)來推動執(zhí)行機構(gòu)的,即使發(fā)現(xiàn)數(shù)據(jù)有問題也不允許行政不作為,這種情況下,作為我們也很難辦,2個不同的數(shù)據(jù),有明顯問題的還好排除,都在有限范圍內(nèi)可如何判定哈?這種時候沒辦法只好三備份,少數(shù)服從多數(shù)是唯一的選擇了。石頭剪刀布的方式不好用,葛優(yōu)的分歧終端機也不適用,就只好選擇這種最原始最有效的辦法了,唯一需要注意的是數(shù)據(jù)宜存放于三種不同的備份環(huán)境下,不然豈不成了你家哥倆兒,咋表決都占便宜阿。
?
以上僅就嵌入式軟件可靠性的關(guān)注方面分了幾大類,進行了基本的描述,實際應用中,需要關(guān)注的點還有很多很多,如果是準備自行制定設(shè)計規(guī)范的話,以上的思路應該也可以給與一些啟迪了。
?
?
?
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >
  • 7個技巧:提高嵌入式系統(tǒng)的可靠性
  • 嵌入式軟件開發(fā)的特點、設(shè)計流程、嵌入式軟件的結(jié)構(gòu)
  • 嵌入式軟件怎樣測試,如何對嵌入式軟件進行可靠性測試
  • 基于RTOS的嵌入式系統(tǒng)軟件設(shè)計 17次下載
  • 如何正確理解嵌入式軟件可靠性設(shè)計?資料下載
  • 嵌入式教程之高可靠嵌入式系統(tǒng)設(shè)計的詳細資料說明 11次下載
  • 嵌入式系統(tǒng)硬件可靠性分析 1次下載
  • 基于ARM的嵌入式系統(tǒng)軟件設(shè)計部分 15次下載
  • 嵌入式系統(tǒng)軟件可靠性設(shè)計
  • ARM嵌入式系統(tǒng)開發(fā)-軟件設(shè)計與優(yōu)化
  • 基于嵌入式Linux 的BACnet 控制器軟件設(shè)計
  • 嵌入式系統(tǒng)的系統(tǒng)測試和可靠性評估
  • 嵌入式軟件的安全可靠性控制
  • 嵌入式系統(tǒng)的系統(tǒng)測試和可靠性評估
  • 基于ARM的嵌入式系統(tǒng)軟件設(shè)計

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關(guān)電源基礎(chǔ)知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設(shè)計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統(tǒng)的設(shè)計與實現(xiàn)
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發(fā)板設(shè)計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調(diào)色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設(shè)計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設(shè)計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費