在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

帶你走近MISRA C:2012

北匯信息POLELINK ? 2022-10-13 14:37 ? 次閱讀

作者:給你小魚干小編:吃不飽

01

汽車軟件與C語言

隨著軟件定義汽車概念的興起,汽車軟件開發的工作量開始呈指數級增加,當前車載軟件代碼量已經達到1億-3億行。這是一個什么概念呢,相當于比Windows系統還高出一個數量級。據調查,大部分的車載軟件都是使用C語言進行開發,因為C執行效率高、代碼量小,因此在汽車的小型控制部件中被廣泛使用。盡管C語言在嵌入式系統中如此流行,但仍有很多缺陷:

1

C是弱類型語言

在下面代碼中,char類型和int類型是可以直接運算的,因為char類型會被提升為int,這就是C中的隱式類型轉換,將精度較小的轉換為大精度的,在這個意義上講,它并不符合強類型語言的定義。

#include

int main(void){

char a='a';

int b=10;

int c=a+b;

return 0;

}

2

C有更多操作符及優先級

C相較于其他的語言有更多的操作符,因此其也有更多不同的操作符優先級,其中的大多數都不是能直觀判斷的,所以通常會被程序員誤解。

3

C程序一般不為常見問題

提供運行時檢查

C程序一般不為常見問題提供運行時檢查,例如運算異常(如零除),溢出,指針的有效性或者數組越界。

02

MISRA C編碼規范

綜上所述,C語言對于安全性要求很高的汽車軟件而言是不安全的。汽車工業軟件可靠性協會(Motor Industry Software Reliability Association,MISRA)在1998年發布了第一版針對汽車工業軟件安全性的C語言編碼規范---MISRA C,讓程序員有規范可循。從1998年發布的MISRA C:1998,只針對汽車制造業的嵌入式開發,到MISRA C:2012,已經開始擴大覆蓋范圍到其他高安全性系統。下面我們就看一下具體的MISRA C:2012規則內容。

03

MISRA C:2012規則介紹

MISRA C:2012包含159條規則,其中Directives有16條,Rules有143條。

01

Dir 4.12:動態內存分配不應被使用。

a009cbba-4a6e-11ed-b116-dac502259ad0.png

圖1 Dir 4.12規則

原理:任何庫的動態內存分配和進程的釋放都可能導致未定義的行為。

02

Rule 10.3:表達式的值不應分配給具有較窄基本類型或不同基本類型類別的對象。

a03f348a-4a6e-11ed-b116-dac502259ad0.png

圖2 Rule 10.3規則

原理:C語言允許程序員有相當大的自由度,并允許自動形成不同算術類型之間的賦值。然而,使用這些隱式轉換可能會導致意外的結果,可能會丟失值、符號或精度。如MISRA基本類型模型所強制的,使用更強的類型可以降低這些問題發生的可能性。

看到這里,相信大家有許多疑問:為什么一個是Dir而另一個是Rule呢?Category、Analysis這些又是什么呢?下面就來介紹一下MISRA規則的分類和屬性。

04

MISRA C:2012規則分類

MISRA C:2012的規則按照性質分為兩類:指令(Directives)和規則(Rules)。規則有三種不同類別:”強制(Mandatory)”、”要求(Required)”和“建議(Advisory)”;其中具體結果如下圖所示。

a0506e6c-4a6e-11ed-b116-dac502259ad0.png

圖3 MISRA C:2012規則分類那么,在任何情況下都可以明確地說明該條代碼違反了規則嗎?出于此問題,MISRA C:2012規則的Rules具有可判定性Decidable/Undecidable,他們的區分標準為是否能在任何情況下明確回答“該代碼是否遵循了這條規則”?a08f1450-4a6e-11ed-b116-dac502259ad0.png圖4 MISRA C:2012規則的可判定性要注意的是,可判定性并不適用于Directives規則。Rules的分析范圍分為Single Translation Unit/System:a0a0ed56-4a6e-11ed-b116-dac502259ad0.png圖5 Rules的分析范圍

05

Helix QAC與MISRA C:2012

很明顯,MISRA C:2012規則就是為靜態測試而生的。Perforce公司的靜態分析工具Helix QAC,是汽車行業中主流的靜態分析器,其開發團隊是MISRA C&C++編碼委員會的創始會員,也是MISRA C&C++委員會最具影響力的會員。Helix QAC具有業界領先的編碼規范覆蓋度,目前MISRA C:2004的編碼規范覆蓋度達到了99%,而對MISRA C:2012的編碼規范覆蓋度已達到100%。是嵌入式靜態分析領域公認的行業領導及先驅。a0b7196e-4a6e-11ed-b116-dac502259ad0.png圖6 Helix QAC的編碼規范覆蓋度下面以開源工程wget為例,演示一下Helix QAC是如何定位違反MISRA C:2012規則的代碼。a0cafb00-4a6e-11ed-b116-dac502259ad0.png圖7 HelixQAC診斷消息0883診斷消息0883:“包含文件代碼不受重復包含的保護”正是MISRAC:2012規則Dir 4.10的映射,通過診斷消息開發人員就可以了解到代碼違反MISRA C:2012規則的情況,從而對代碼進行修改使其合規。a0fe16f2-4a6e-11ed-b116-dac502259ad0.png圖8 Rule 9.1規則的不同診斷消息Rule 9.1:對象在初始化前不能被使用。a134044c-4a6e-11ed-b116-dac502259ad0.png圖9 Rule 9.1規則這里大家或許會疑惑,為什么同一個規則下會產生兩種診斷消息呢?答案是:數據流分析。數據流分析是Helix QAC的高級分析,Helix QAC通過內置的數據流分析器分析運行時的行為。數據流分析可以識別各種問題,包括可能指示編碼錯誤的條件,以及可能導致程序崩潰的關鍵未定義行為。我們可以看到圖中的診斷消息2962和2963雖然都是Rule 9.1產生的,但是分成了Suspicious和Apparent兩種。我們在代碼中看一下這兩條診斷消息的不同。診斷消息2963的源碼如下:a13ec814-4a6e-11ed-b116-dac502259ad0.png
在226行聲明了數組saved_lengths,241行對saved_lengths進行賦值操作,在255行使用saved_lengths。但saved_lengths的賦值操作不一定會進行,因為該操作在for循環中進行,如果for循環沒有達到執行條件導致并未執行,那么此時saved_lengths就沒有初始化。所以此條診斷消息是Suspicious。診斷消息2962源碼如下:a163cf2e-4a6e-11ed-b116-dac502259ad0.png
可以看到,在824行聲明變量dt,但后面并未對dt進行初始化。所以此條診斷消息是Apparent。
由此可見Helix QAC數據流分析功能的強大。Helix QAC的數據流功能也在不斷地更新,在即將到來的新版本2022.4中,數據流計劃從Helix QAC引擎中分離出來,成為自己的組件。在近期發布的最新版本Helix QAC 2022.3中,引入了對微軟Visual Studio 2022的支持,提供更廣泛的編譯器支持,以及對C++20和C23的升級語言支持。此外,此版本具有使用“qainject”自動生成 CCT 的功能,可簡化構建理解和編譯器設置。作為Perforce公司的合作伙伴,北匯信息將為客戶提供優質的靜態代碼測試工具和服務。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 汽車軟件
    +關注

    關注

    0

    文章

    102

    瀏覽量

    3209
收藏 人收藏

    評論

    相關推薦

    EV2012、bq2012評估系統產品簡介

    電子發燒友網站提供《EV2012、bq2012評估系統產品簡介.pdf》資料免費下載
    發表于 12-21 11:17 ?0次下載
    EV<b class='flag-5'>2012</b>、bq<b class='flag-5'>2012</b>評估系統產品簡介

    杰和課堂|帶你認識算力

    杰和課堂|帶你認識算力人工智能浪潮洶涌的今天,算力一詞頻繁出現在各類科技新聞、產業發展報告中。了解過杰和科技產品的讀者們,也會在杰和各產品參數中發現算力這一概念,比如AI一體機主板CB4-411,該
    的頭像 發表于 12-06 10:24 ?367次閱讀
    杰和課堂|<b class='flag-5'>帶你</b>認識算力

    探知 FLC057WG C波段高功率 GaAs FET的神秘

    一篇文章帶你,探知 FLC057WG C波段高功率 GaAs FET的神秘
    的頭像 發表于 11-15 16:03 ?371次閱讀
    探知 FLC057WG <b class='flag-5'>C</b>波段高功率 GaAs FET的神秘

    智慧公交是什么?一文帶你詳解智慧公交的解決方案!

    智慧公交是什么?一文帶你詳解智慧公交的解決方案!
    的頭像 發表于 11-05 12:26 ?341次閱讀
    智慧公交是什么?一文<b class='flag-5'>帶你</b>詳解智慧公交的解決方案!

    C2000? MISRA-C策略

    電子發燒友網站提供《C2000? MISRA-C策略.pdf》資料免費下載
    發表于 10-11 11:43 ?0次下載
    <b class='flag-5'>C</b>2000? <b class='flag-5'>MISRA-C</b>策略

    embOS的MISRA-C:2012一致性

    MISRA C是汽車工業軟件可靠性協會(MISRA)開發的一套針對C編程語言的軟件開發指南,目的是提升嵌入式系統的安全性和可移植性。2012
    的頭像 發表于 08-20 11:35 ?544次閱讀

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式軟件的世界,您可能聽說過安全關鍵系統的MISRA編碼準則和合規性。最初為在汽車嵌入式軟件行業,MISRA C for CC
    發表于 08-08 15:54 ?0次下載

    Perforce靜態代碼分析專家解讀MISRA C++:2023?新標準:如何安全、高效地使用基于范圍的for循環,防范未定義行

    MISRA C++:2023——MISRA? C++ 標準的下一個版本來了!為了幫助您了解 MISRA
    的頭像 發表于 06-18 12:57 ?464次閱讀

    MISRA-C-:2004中文版

    MISRA-C-:2004 中文版
    發表于 06-04 11:52 ?1次下載

    Epson推出的FC2012AN晶體專為小尺寸、低ESR應用設計

    。 FC2012AN系列是一款32.768K頻率的晶體單元,頻率偏差為 +20x10-6(25°C±5°C工作溫度范圍內),低的頻率偏差保證了時間的準確性。封裝尺寸
    發表于 05-23 14:44 ?0次下載

    天線設計攻略簡要概述 帶你玩轉PCB和WIFI

    給大家分享干貨啦!天線設計全攻略,帶你玩轉PCB和WIFI
    的頭像 發表于 05-08 14:42 ?1553次閱讀
    天線設計攻略簡要概述 <b class='flag-5'>帶你</b>玩轉PCB和WIFI

    帶你走近MISRA C++:2023

    奉為汽車軟件工程師在開發實踐中的圭臬。MISRAC++的發展史MISRAC++的起源可以追溯到MISRAC標準的成功制定和廣泛應用。MISRAC是一套針對C語言的
    的頭像 發表于 04-30 08:24 ?1866次閱讀
    <b class='flag-5'>帶你</b>走近<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>++:2023

    使用 MISRA C++:2023? 避免基于范圍的 for 循環中的錯誤

    在前兩篇博客中,我們?向您介紹了新的 MISRA C++ 標準?和?C++ 的歷史?。在這篇博客中,我們將仔細研究以 C++ 中?for?循環為中心的特定規則。
    的頭像 發表于 03-28 13:53 ?834次閱讀
    使用 <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>++:2023? 避免基于范圍的 for 循環中的錯誤

    帶你探索穩壓器的優缺點和選擇技巧

    TOREX特瑞仕(KOYUELEC光與電子):帶你探索穩壓器的優缺點和選擇技巧
    的頭像 發表于 01-24 10:35 ?924次閱讀
    <b class='flag-5'>帶你</b>探索穩壓器的優缺點和選擇技巧

    汽車電子行業的MISRA C標準解讀

    之前分享了一些編程規范相關的文章,有位讀者提到了汽車電子行業的MISRA C標準,說這個很不錯。
    的頭像 發表于 01-17 11:03 ?1260次閱讀
    主站蜘蛛池模板: 综合网伊人| 四虎影院4hu| 黄色免费的视频| 伊人玖玖| 亚欧美综合| 国内一区二区三区精品视频| 国产精品午夜免费观看网站| 国产乱子伦| 五月激情啪啪| 8050午夜网| 狼色视频在线观免费观看| 精品视频一区在线观看| 天天干夜夜添| 久久精品影院永久网址| 成人激情综合网| 国产精品久久久久久久免费大片| 干一干操一操| 98色花堂国产第一页| 成人欧美网站| 亚洲一区二区三区高清视频| 欧美xxxx极品流血| 黄色网址网站在线观看| 日本免费不卡在线一区二区三区| 亚洲乱码卡一卡二卡三永久| 狠狠色噜噜狠狠狠狠97影音先锋 | 国产三级精品三级| 97av视频在线播放| 精品亚洲大全| 一区二区3区免费视频| 亚洲色图 在线视频| 人与牲动交xxxxbbbb高清| 国产色爽女| 97影院理论片手机在线观看| 手机看片福利永久| 黑人影院| 亚洲一区二区综合| 亚洲地址一地址二地址三| 五月婷婷激情五月| 无遮挡很爽很污很黄很色的网站| 人人干人人爱| 99久久综合精品免费|