




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、作者: Anders Lindgren, 高級研發(fā)工程師 , 瑞典 IAR 公司 沒人能否認嵌入式應(yīng)用正變得越來越普遍。但是,當系統(tǒng)越來越復(fù)雜,而我們賦予系統(tǒng)越來越多的責任的時候,我們將必須面對一些重要問題。其中最重要的問題是:我們?nèi)绾尾拍艽_保嵌入式系統(tǒng)是安全可靠的?C 編程語言為用戶提供了許多強大的功能,幾乎與匯編語言一樣強大。此外, C 語言還包含了一些在標準中未明確定義的區(qū)域和不用定義就能實現(xiàn)的條款。用 C 來編寫一個安全可靠的程序并不僅僅意味著該程序能完全按照編程者的預(yù)期來運行。它被移植到一個不同的環(huán)境下也需要正確運行。更重要的是,當其他人員閱讀這些
2、源代碼時,它們必須像水晶一樣清晰明了:一方面簡化了不必要的猜測和詮釋,另一方面當基于這些代碼來做進一步開發(fā)時,能規(guī)避誘發(fā)新錯誤的風險。汽車工業(yè)軟件可靠性協(xié)會 (MISRA) 采取的措施是定義一套 C 編程語言的子集。如果在應(yīng)用開發(fā)中僅使用這個子集,那么許多 C 編程語言中存在的缺陷就能被規(guī)避了。這個子集名稱為 "MISRA C" ,在一本名為“ Guides For The Use Of The C Language In Vehicle Based Software ”的手冊中有具體定義。該指南共包括 127 條規(guī)則,分為“必選”和“建議”兩類。 IAR Embedded
3、 Workbench 中幾款產(chǎn)品(參見以下列表),內(nèi)建了一個能檢查絕大多數(shù) MISRA C 規(guī)則的檢查器,但是某些規(guī)則是無法被自動檢測的。 如果在編寫應(yīng)用時忘了使用這些規(guī)則,以后再去修改應(yīng)用以符合這些規(guī)范將非常困難。比如, MISRA C 第 118 條規(guī)則禁止使用動態(tài)分配內(nèi)存,第 101 條規(guī)則規(guī)定禁止使用 指針運算 ,第 102 條規(guī)則表示不可以使用 超過兩級的間接指針 。 另一方面,有幾條規(guī)則是非常簡單明了和成熟,即使你沒有想過讓你的應(yīng)用做到 100% 的 MISRA C 兼容,如果能支持其中幾條也至少能讓應(yīng)用更可靠一些。 在這篇文章里,我將推薦一些應(yīng)該適用于所有項目的規(guī)則,即便你沒想做
4、到 100% 的 MISRA C 兼容。這些被挑選出來的規(guī)則通常是編譯器不會去檢查的。 在 IAR Embedded Workbench 中使用 MISRA C 在 IAR Embedded Workbench 中, MISRA C 的界面非常簡單易用,你可以直接選擇你所希望檢查的規(guī)則,也可以在 "MISRA C" 標簽下的 " 通用選項 " 部分的 "Options" 菜單列表中進行選擇 。如果你使用命令行方式,你可以使用 -misrac 和 -misrac_verbose 命令選項。 大多數(shù)規(guī)則都由編譯器自身來檢查。然而,一些規(guī)則
5、考察進入到整個應(yīng)用才能檢查,在這種情況下,鏈接器將執(zhí)行檢查。你可以分別通過列表文件和映射文件來察看被允許使用的規(guī)則和檢查過的規(guī)則列表。請注意,有些規(guī)則是不能被自動檢查到的。 規(guī)則 13 ( 建議使用 ) 該條規(guī)則聲明: 應(yīng)用程序不應(yīng)直接使用 char, int, float, 等基本數(shù)據(jù)類型,而應(yīng)在特定的編譯器中專門 typedef 自己定義特定長度的類型名稱,并將 typedef 所定義的類型使 用到代碼當中去。 原因是不同的編譯器對基本類型會使用不同的底層表達方式。最常見的例子是 int 類型在某個編譯器中被當作 16 位處理,而在另一個編譯器中被當作 32
6、 位處理。 根據(jù)個人經(jīng)驗,我一般會仔細選擇定長類型的大小和符號。當我需要表示一個不可能為負數(shù)的東西時,我會選擇使用 uint16_t ,而不是簡單的用 int 表示。這樣寫代碼的好處之一是代碼很容易被讀懂和理解,讀者無須考慮該表達式為負數(shù)的情況。 1999 年版本的 C 標準包含的頭文件 stdint.h 中,提供了 int8_t 和 uint32_t 形式的類型名稱。 IAR Embedded Workbench 在 DLib 標準庫中支持這一頭文件。 規(guī)則 23 ( 建議使用 ): 具有文件范圍作用域的所有對象聲明都盡量定義成靜態(tài)的。 正如你可能知道的那樣,在應(yīng)用程序中定義的靜態(tài)變量和函數(shù)
7、是無法被其他模塊直接使用的。 該規(guī)則: 防止你無意間誤用內(nèi)部幫助函數(shù)和文件內(nèi)部的變量 促使你認真設(shè)計新模塊之間的接口 使程序接口更加清晰明了是一件很重要的事情,因為當時間久了之后,當初寫代碼的人未必能夠繼續(xù)留在那里維護應(yīng)用程序。 使用 IAR Embedded Workbench 時,鏈接器會在整個應(yīng)用范圍內(nèi)檢測這條規(guī)則。 規(guī)則 33 ( 必需使用 ): 操作符 "&&" 和 "|" 的右側(cè)表達式不得包含副作用 你可以用 C 語言寫出如下代碼: if (x = y) | (*p+ = z) /*
8、do something */ 在這個例子中,僅當 | 操作符左邊的表達式為假 - 即 x 和 y 不相等時,才對右邊的表達式進行求值(副作用就此產(chǎn)生)。在上述例子中,所謂的副作用就是增加了指針 p 的值。 雖然在標準中已經(jīng)詳細說明了該種行為,但在寫代碼的過程中還是容易犯下這種錯誤。即使寫代碼的人設(shè)法正確了解了這種行為,然而每個試圖閱讀代碼或維護代碼的人員也仍必須理解這些規(guī)則和程序員的意圖。 以上代碼可以按照另一種更為簡潔明了的順序重新編寫: int doSomething = 0; if (x = y) doSomething = 1; else if (*p+ = z) doSomethi
9、ng = 1; if (doSomething) /* do something */ 規(guī)則 59 ( 必需使用 ): "if", "else if", "else", "while", "do . while" 和 "for" 語句塊必須用 括起來 基本上來說,你必須整理好思路,不要隨便的寫出如下例中所示的 else 子句。 if (x = 0) y = 10; z = 0; else y = 20; 這條規(guī)則意在避免一個經(jīng)典錯誤。在下面的例子中,另外增加了一行“ z =
10、1 ; ”。這行語句看上去是屬于 else 子句的一部分,但其實并不是這樣。事實上,這句語句緊接在全部的 if 語句塊之后,這意味著該賦值將總是發(fā)生。 如果一開始就能夠?qū)?else 子句用大括號括起來,就不會產(chǎn)生這樣的問題了。 if (x = 0) y = 10; z = 0; else y = 20; z = 1; 產(chǎn)品支持 IAR 在以下的編譯器產(chǎn)品中已經(jīng)支持了 MISRA C 的兼容性檢查。請注意只有在標準版本中(而不是評估版或代碼限制版)該功能才能啟用。 IAR Embedded Workbench for 78K0 IAR Embedded Workbench for 8051 IA
11、R Embedded Workbench for ARM IAR Embedded Workbench for AVR IAR Embedded Workbench for AVR32 IAR Embedded Workbench for CR16C IAR Embedded Workbench for H8 IAR Embedded Workbench for M16C IAR Embedded Workbench for M32C IAR Embedded Workbench for MAXQ IAR Embedded Workbench for MSP430 IAR Embedded W
12、orkbench for PIC18 IAR Embedded Workbench for R8C IAR Embedded Workbench for S12 IAR Embedded Workbench for V850 參考文檔 Guides For The Use Of The C Language In Vehicle Based Software 汽車工業(yè)軟件可靠性協(xié)會, 1998 年 4 月 集成 Misra C 的 IAR Embedded Workbench IAR Embedded Workbench是一套用于編譯和調(diào)試嵌入式系統(tǒng)應(yīng)用程序的開發(fā)工具,支持匯編、C和C+語言。
13、它提供完整的集成開發(fā)環(huán)境,包括編譯器、匯編器、工程管理器、編輯器、編譯鏈接工具和C-SPY調(diào)試器。 廣泛的芯片內(nèi)核支持 - HCS12, M16C, M32C , R32C , V850, 78K, S08 - ARM, AVR32 , ColdFire - 8051, AVR, PIC, SAM8, R8C , MSP430 等 編譯產(chǎn)生的代碼尺寸小、實時性強 IAR Systems 是全球第一家做 C 編譯器的公司,先進的技術(shù)保證了編譯器能產(chǎn)生可靠、緊湊的代碼 集成多種內(nèi)核識別調(diào)試插件,包括 OSEK Run-Time Interface (ORT
14、I) 通過它可以在調(diào)試器中顯示 RTOS 內(nèi)部數(shù)據(jù)結(jié)構(gòu)窗口,從而了解每一個項目應(yīng)用中運行任務(wù)的信息,每一個信號燈、互斥量、郵箱、隊列、事件標志信息,以及等待上述內(nèi)核對象的所有任務(wù)列表信息 集成 MISRA C 校驗?zāi)K, 對代碼進行可靠性檢驗 支持多種仿真器,如 IAR J-Link/J-Trace、ROM-Monitor、MK-II、E8、Minicube2、P&E等; 狀態(tài)機建模工具:設(shè)計階段可靠性保證 visualSTATE 是一套精致、易用的開發(fā)工具, 包含圖形設(shè)計器、測試工具包,代碼生成器和文檔生成器, 用于設(shè)計、測試和實現(xiàn)基于狀態(tài)圖設(shè)計的嵌入式應(yīng)用。該款工具提
15、供了先進的驗證和測試模塊,可以產(chǎn)生 100% 與 您系統(tǒng)設(shè)計一致的緊湊 C/C+ 代碼 ,并 可以在任何 8 位、 16 位、 32 位架構(gòu)上運行。此外,它革命性地與 IAR Embedded Workbench C/C+ 編譯調(diào)試環(huán)境無縫集成 ,能夠真正做到基于硬件去調(diào)試狀態(tài)機模型,并以直觀的圖形方式反饋出各個設(shè)計層面的詳細信息 基于統(tǒng)一建模語言 (UML) 狀態(tài)機理論的圖形化模型設(shè)計; 對設(shè)計模型進行規(guī)范性驗證,檢查系統(tǒng)的邏輯一致性,鑒別出系統(tǒng)設(shè)計漏洞或錯誤; 設(shè)計過程的早期階段,甚至在硬件設(shè)計尚未完成之前,就可以使用測試工具來確保應(yīng)用能按照預(yù)想方式運行; 自動
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鉆井操作考試試題大全及答案
- 中班健康教案:鞋帶蝴蝶結(jié)
- 物業(yè)秩序安全培訓(xùn)
- 文科理論培訓(xùn)講解
- 2025年 車險理賠考試卷庫五附答案
- 腫瘤藥學(xué)服務(wù)案例實踐路徑
- 應(yīng)急預(yù)案教育培訓(xùn)
- 培訓(xùn)班月總結(jié)報告
- 重癥皮膚護理常規(guī)
- 中醫(yī)護理健康宣教流程
- RB/T 228-2023食品微生物定量檢測的測量不確定度評估指南
- 2023年北京海淀社區(qū)工作者考試真題
- 2024年國開電大 高級財務(wù)會計 形考任務(wù)4答案
- 幼兒園中班數(shù)學(xué)活動課件:有趣的排序
- 2024年廣東省惠州一中學(xué)英語七下期末達標檢測試題含答案
- 2023-2024學(xué)年廣西壯族自治區(qū)桂林市高二下學(xué)期期末質(zhì)量檢測數(shù)學(xué)試卷(含答案)
- 化妝品行業(yè)聯(lián)合研發(fā)合同樣本
- 畜禽生產(chǎn)概論-形考作業(yè)4-國開(HB)-參考資料
- 工業(yè)園區(qū)智慧能源管理平臺建設(shè)方案 產(chǎn)業(yè)園區(qū)智慧能源管理平臺建設(shè)方案
- 化工生產(chǎn)仿真綜合實訓(xùn)報告
- 中華民族共同體概論課件專家版8第八講 共奉中國與中華民族聚力發(fā)展
評論
0/150
提交評論