国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

DSP編程技巧之12-揭開編譯器神秘面紗之代碼規(guī)范MISRA-C

發(fā)布時間:2014-9-29 10:40    發(fā)布者:看門狗
關(guān)鍵詞: C語言 , ISO , 嵌入式
作者:paradoxfx 來源:電子產(chǎn)品世界

  如果我們自己編寫了一個程序,程序能正常編譯,運(yùn)行起來也實(shí)現(xiàn)了我們期望的輸出,那是不是這個程序就很完善了呢?對于工業(yè)產(chǎn)品來說,“好”、“能用”和“完善”,或者說“標(biāo)準(zhǔn)”,甚至是代碼的“安全”,顯然不是一個層面的東西。因?yàn)?a href="http://www.qingdxww.cn/keyword/C語言" target="_blank" class="relatedlink">C語言雖然是我們開發(fā)嵌入式應(yīng)用的最主要工具之一,然而C語言并非是專門為嵌入式系統(tǒng)設(shè)計,相當(dāng)多的嵌入式系統(tǒng)較一般計算機(jī)系統(tǒng)對軟件安全性有更苛刻的要求;例如在那些對安全性要求很高的系統(tǒng)中,如飛行器、汽車和工業(yè)控制中,只要代碼的工作稍有偏差,就有可能造成重大的財產(chǎn)損失或者人員傷亡。

  那么如何衡量我們的代碼是否滿足某些標(biāo)準(zhǔn),是“安全的”、“健壯的”呢?此時我們就可以根據(jù)具體的應(yīng)用來查找相關(guān)的行業(yè)標(biāo)準(zhǔn)。舉個例子,在工業(yè)領(lǐng)域中,MISRA-C就是在的某些行業(yè)中要求遵守的行業(yè)標(biāo)準(zhǔn)。MISRA C是由汽車產(chǎn)業(yè)軟件可靠性協(xié)會(MISRA,motor industry software reliability association)提出的C語言開發(fā)標(biāo)準(zhǔn)。其目的是在增進(jìn)嵌入式系統(tǒng)的安全性及可移植性。針對C++語言也有對應(yīng)的標(biāo)準(zhǔn)MISRA C++。MISRA C一開始主要是針對汽車產(chǎn)業(yè):如果我們?nèi)⒓咏鼛啄甑挠嘘P(guān)汽車行業(yè)的基于自動代碼生成技術(shù)和基于模型的設(shè)計技術(shù)的講座、研討會等等,無一例外都會聽到有關(guān)MISRA-C 2004,甚至是MISRA-C 2008、MISRA-C 2012等更新版本的介紹。此外,其他產(chǎn)業(yè)也已經(jīng)逐漸開始使用MISRA C:包括航空航天、電信、國防、醫(yī)療設(shè)備、鐵路等領(lǐng)域中都已有廠商使用MISRA C:這些領(lǐng)域無一不對代碼的規(guī)范,特別是代碼的安全有非常高的要求。MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》是在1998年發(fā)行,一般稱為MISRA-C:1998.。MISRA-C:1998有127項(xiàng)規(guī)則,規(guī)則從1號編號到127號,其中有93項(xiàng)是強(qiáng)制要求,其余的34項(xiàng)是推薦使用的規(guī)則。在2004年時發(fā)行了第二版的MISRA C的第一版《Guidelines for the use of the C language in critical systems》(或稱作MISRA-C:2004),其中有許多重要建議事項(xiàng)的變更,其規(guī)則也重新編號。MISRA-C:2004有141項(xiàng)規(guī)則,其中121項(xiàng)是強(qiáng)制要求,其余的20項(xiàng)是推薦使用的規(guī)則。規(guī)則分為21類,從“開發(fā)環(huán)境”到“運(yùn)行期錯誤”。通常認(rèn)為,如果能夠完全遵守這些標(biāo)準(zhǔn),則你的C代碼是易讀、可靠、可移植和易于維護(hù)的。最近很多嵌入式開發(fā)者都以MISRA C來衡量自己的編碼風(fēng)格,比如著名的uC/OS-II就得意地宣稱自己99%遵守MISRA標(biāo)準(zhǔn)。目前有許多工具聲稱可以檢查代碼和MISRA規(guī)則相容性,不過MISRA沒有相關(guān)認(rèn)證的程序。相關(guān)工具可以幫助使用者評估和比較檢查的結(jié)果,也會提供一些可符合MISRA-C規(guī)定的指南,但是目前大部分的工具對靜態(tài)代碼分析的工具檢查基本能實(shí)現(xiàn),對動態(tài)代碼分析則還不能完美實(shí)現(xiàn)。

  考慮到MISRA-C:2004有141項(xiàng)規(guī)則,其中僅強(qiáng)制要求就有121項(xiàng),其余的20項(xiàng)是推薦使用的規(guī)則,顯然讓我們僅僅是把這么多規(guī)則瀏覽一遍就需要花費(fèi)大量的時間,更不用提手工對照規(guī)則來檢查我們的軟件了。幸好我們使用的DSP編程環(huán)境CCS提供了相應(yīng)的選項(xiàng),使得編譯器可以自動檢查我們的代碼是否違反了MISRA-C的相關(guān)規(guī)則,并提供給我們詳細(xì)的診斷與警告信息。

  在C語言的標(biāo)準(zhǔn)ANSI C 和 ISO C之后,又產(chǎn)生了更新的C99以及最新的C11 (ISO/IEC 9899:2011),但是因?yàn)樽钚掳姹镜囊?guī)范從推出到各大編譯器廠家支持以及開發(fā)者的適應(yīng)都需要一定的時間,所以目前最常用的仍然是ANSI C或者C99。與此類似, 雖然MISRA-C的標(biāo)準(zhǔn)最弱已經(jīng)有最新的2012,但是人們談?wù)摵褪褂米疃嗟娜匀皇?004版本,所以在CCS的編譯器選項(xiàng)里仍以MISRC-C:2004的規(guī)則為準(zhǔn)。



  啟用了--check_misra={all|required|advisory|none|rulespec}的選項(xiàng)使能MISRC-C:2004規(guī)則檢查之后,還可以在代碼中可以配合相關(guān)的預(yù)處理指令使能某些代碼的檢查/停止檢查功能,包括:

  #pragma CHECK_MISRA ("{all|required|advisory|none|rulespec}");

  #pragma RESET_MISRA ("{all|required|advisory|rulespec}");

  其中,CHECK_MISRA用來使能或者禁止對MISRC-C:2004規(guī)則的檢查,它的作用與--check_misra是一致的。RESET_MISRA則用來復(fù)位MISRC-C:2004規(guī)則檢查的狀態(tài)。

  rulespec參數(shù)則可以用來指定我們使用哪些MISRC-C:2004中的哪些規(guī)則來進(jìn)行特點(diǎn)的檢查,包括:

  [-]X 使能 (或者禁止) X主題下各個規(guī)則的檢查。(主題包括變量、字符、初始化等)

  [-]X-Z 使能 (或者禁止) 從X到Z主題下各個規(guī)則的檢查

  [-]X.A 使能 (或者禁止) X主題下規(guī)則A的檢查。

  [-]X.A-C 使能 (或者禁止) X主題下從規(guī)則A到規(guī)則C的檢查。

  舉例說明:--check_misra=1-5,-1.1,8.2-4的含義是:

  檢查從主題1到主題5的規(guī)則。(不清楚的網(wǎng)友可以去搜索MISRA規(guī)范,1.環(huán)境;2.語言擴(kuò)展;3.文檔;4.字符集;5.標(biāo)識符)

  禁止規(guī)則1中1.1條目的規(guī)則(規(guī)則1.1(強(qiáng)制): 所有代碼都必須遵照ISO 9899:1990 “Programming languages - C”,由ISO/IEC 9899/COR1:1995,ISO/IEC 9899/AMD1:1995,和ISO/IEC9899/COR2:1996 修訂),規(guī)則1中的其它規(guī)則保持有效。

  檢查主題8中的規(guī)則2到4.為了方便,我們可以列出這幾條規(guī)則的定義(其內(nèi)容較長,有興趣的網(wǎng)頁請在搜索引擎中檢索):

  主題8: 聲明與定義

  規(guī)則8.2(強(qiáng)制): 不論何時聲明或定義了一個對象或函數(shù),它的類型都應(yīng)顯式聲明。

  規(guī)則8.3(強(qiáng)制): 函數(shù)的每個參數(shù)類型在聲明和定義中必須是等同的,函數(shù)的返回類型也該是等同的。

  規(guī)則8.4(強(qiáng)制): 如果對象或函數(shù)被聲明了多次,那么它們的類型應(yīng)該是兼容的。


本文地址:http://www.qingdxww.cn/thread-133210-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 為何選擇集成電平轉(zhuǎn)換?
  • PIC18-Q71系列MCU概述
  • 基于CEC1712實(shí)現(xiàn)的處理器SPI FLASH固件安全彈性方案培訓(xùn)教程
  • 了解一下Microchip強(qiáng)大的PIC18-Q24 MCU系列
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产特级毛片aaaaaa高清 | 亚洲欧美91 | 毛片免费观看网站 | 综合五月天婷婷丁香 | 91精选视频 | 国产精选91热在线观看 | 成人欧美精品久久久久影院 | 欧美一区2区| 国产毛片高清 | 久热久| 成人在线免费视频观看 | 麻豆画精品传媒2021直接看 | www操com| 我不卡在线观看 | 亚洲va在线| 免费看一片 | 天天靠天天擦天天摸 | 久久人 | 日韩免费高清 | 一本大道香焦在线视频 | 欧美精品国产日韩综合在线 | 亚洲无吗在线视频 | 青青青激情视频在线最新 | 国产91中文剧情在线观看 | 国产精品一区二区三区免费视频 | 国产精品18久久久久久小说 | 一个色综合高清在线观看 | 亚洲一区二区三区久久久久 | 精品一区二区三区三区 | 久久亚洲国产午夜精品理论片 | 四虎在线免费 | 国产伦精品一区二区三区高清 | 欧美97色伦影院在线观看 | 中国国产成人精品久久 | 精品视频一区二区三区在线播放 | 欧美高清视频 | 岛国一区二区 | 亚洲精品高清视频 | 日本成人一区二区三区 | 亚洲日本一区二区三区在线不卡 | 最新在线防屏蔽国产一区 |