色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

嵌入式系統開發中的靜態分析

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Maxim Stefanov ? 2022-11-21 14:51 ? 次閱讀

由于嵌入式系統行業的快速增長,嵌入式設備的代碼質量成為主要關注點之一。考慮到嵌入式系統開發的特殊性(調試難度大、出錯成本高等),開發人員需要使用專用工具來提升代碼質量。

靜態代碼分析器是這些工具之一。本文介紹靜態分析及其在嵌入式系統中的優勢。

靜態代碼分析

首先,讓我們弄清楚什么是靜態代碼分析器以及它們可以執行哪些功能。

靜態代碼分析器是一種分析程序而不實際執行程序的軟件。靜態分析工具比編譯器對源代碼執行更深入的檢查。通常,編譯器只發現語法錯誤。

靜態分析工具的工作原理

分析器的輸入數據是源代碼(最好是可編譯的)

分析器將源代碼轉換為特殊模型以供進一步分析(AST、語義模型等);

分析器通過將一組診斷規則應用于模型來搜索缺陷。診斷規則基于各種方法;

分析器以您方便的格式保存所有發出的警告;

開發人員只需要研究報告并修復所有缺陷;

利潤!

靜態分析儀可以執行廣泛的任務。讓我們介紹分析器最常見的任務:

程序代碼中的錯誤檢測。在這種情況下,靜態分析極大地補充了代碼審查。它允許您在您和您的同事開始煩人的代碼審查之前找到并修復許多問題;

廣義上的代碼質量增強。代碼質量可以包括可讀性、可維護性、代碼復雜性、內聚級別以及可能直接或間接影響錯誤數的其他方面。因此,靜態分析儀有助于遵循編碼標準(公司內部接受和普遍接受);

代碼分析作為 CI/CD 中質量門機制的一部分。分析器不僅可以警告代碼中的潛在錯誤,還可以用作保護機制。如果代碼質量級別不符合指定的要求,它們將停止持續交付。此類代碼分析器擴展編譯器行為,并在檢測到不符合標準的錯誤或代碼片段時阻止生成;

收集項目指標,收集統計數據,反映項目“總體健康狀況”的圖形和圖表結構。

實施的好處

事實證明,靜態分析儀對于嵌入式軟件非常有用。讓我們來看看靜態分析最明顯的積極方面。

首先,靜態分析的使用降低了已經發布的設備“閃爍”的昂貴(如果不是不可能的話)的可能性。

嵌入式系統軟件中的錯誤非常麻煩。問題在于,一旦開始批量生產,錯誤就不可能或幾乎不可能糾正。假設一家公司已經生產并交付了數千臺洗衣機。但是,事實證明機器在特定模式下無法正常工作。公司應該怎么做?一般來說,這個問題是修辭性的,有兩種真正的選擇:

順其自然,在各種網站上收到負面的客戶反饋,并破壞聲譽。當然,公司可以發布并發送手冊添加說“不要這樣做”。然而,這是一個“弱”的選擇;

以停止銷售計算機并開始更新固件。這是一個昂貴的選擇。

發布多少設備并不重要。修復錯誤可能有問題,甚至為時已晚。火箭墜毀了——檢測到錯誤,但為時已晚。病人死了——錯誤被檢測到了,但它不會把人帶回來。導彈防御系統有瞄準精度損失 - 檢測到錯誤,但損害已經完成。汽車故障不起作用 - 檢測到錯誤,但這無助于車禍受害者。編程錯誤的代價是可怕的,不是嗎?

結論很簡單:嵌入式設備的代碼應該盡可能徹底地測試。特別是如果錯誤可能導致人員傷亡或巨大的經濟損失。

靜態代碼分析是檢測錯誤的過程,但它不能保證它會找到代碼中的所有錯誤。但是,開發人員應利用任何機會額外檢查代碼的正確性。靜態分析器可以指出即使在多次代碼審查后仍然存在的各種錯誤。

如果靜態分析可以幫助減少設備代碼中的錯誤數量,那就太棒了。也許發現這些特定錯誤將防止生命損失。或者也許這些公司不會浪費很多錢,也不會因為客戶投訴而失去良好的聲譽。

其次,靜態代碼分析器大大降低了軟件測試和調試過程的成本。

靜態分析允許您在編碼或夜間構建期間發現錯誤。因此,搜索和修復大多數錯誤可以便宜得多。

可能每個開發人員都嘗試“刷新”設備失敗。例如,在此過程中,設備未設置為適當的電壓或完全燒壞。發生了什么,你在哪里尋找問題?畢竟,不僅是軟件錯誤可能是問題的根源。這也可能是硬件本身或低質量布局中的錯誤。因此,查找錯誤的過程可能需要很長時間。

最可悲的情況:

開發人員 100% 確定他編寫的代碼正確;

電路工程師和其他負責硬件的同事參與該項目;

對問題的搜索緩慢而疲憊;

開發人員再次查看代碼,突然發現 - 一個錯別字;

超級低效浪費隊友的精力和時間;

這是尷尬和不愉快的。

由于以下原因,可能會彈出此類錯誤。在正在進行的項目中,開發人員使用了他的舊做法,他至少需要適應項目。例如,他可以編寫以下代碼片段:

uchar Arr[3];

。..。

for (uchar idx = 0; idx != 4; idx++)

avg += Arr[idx];

avg /= 3;

此錯誤的背景如下。開發人員以他以前的開發為基礎,代碼主要是使用復制粘貼方法編寫的。他沒有注意,忘了在一行中用 4 替換 3。結果,他在訪問數組邊界之外的索引時獲得了未定義的行為。這樣的代碼可能是陰險的。程序在調試期間可以正常工作。但是,在實際條件下,當客戶端多次運行它時,它可能會崩潰。如果靜態分析器發現此類錯誤,那就太好了。

因此,為了避免曲折而疲憊的調試過程,在刷新設備之前檢測盡可能多的缺陷位置非常重要。

第三,靜態分析的使用為沒有太多經驗的開發人員提供了保障。

程序錯誤可以形象地分為兩種類型。開發人員知道第一種類型的錯誤。由于疏忽,這些錯誤意外出現在代碼中。第二種錯誤出現在開發人員根本不知道以這種方式編寫代碼的情況下。換句話說,他們可以根據需要查看此類代碼,但仍然找不到錯誤。

靜態分析器包含有關各種代碼模式的知識庫。在某些情況下,這些模式會導致錯誤。因此,他們可以指出開發人員自己不會發現的錯誤。一個例子是使用 32 位 time_t 類型,這可能會導致2038 年之后設備不正確的工作。

另一個例子是程序的未定義行為,這是由于不正確使用班次運算符 《《/》》 而發生的。這些運算符在微控制器的代碼中應用非常廣泛。不幸的是,開發人員經常非常粗心地使用這些運算符。這使得程序不可靠,并且依賴于編譯器的特定版本和設置。同時,該程序可以工作,但這并不是因為它的代碼編寫正確,而是因為開發人員很幸運。

使用靜態分析器,開發人員可以對沖許多此類不愉快的情況。此外,還可以使用分析器來控制整體代碼質量。當項目團隊成長或變化時,這一點很重要。換句話說,分析器有助于跟蹤初學者是否開始編寫錯誤代碼。

第四,現代靜態分析儀不僅可以發現代碼錯誤和漏洞,還可以支持嵌入式系統的編碼標準。這些標準提高了程序的安全性、可移植性和可靠性級別。

C 和 C++ 被稱為嵌入式系統的流行編程語言。MISRA C、MISRA C++ 和 AUTOSAR C++ 等標準是為這些語言開發的。每個標準都有相當數量的規則和建議(MISRA C:143,MISRA C++:228,AUTOSAR C++:超過350)。在沒有靜態代碼分析器的情況下進行編碼時,根本不可能遵守這么多規則和建議。這些規則是開發人員需要避免的編碼模式,從而降低出錯的可能性。目前,靜態分析的所有主要參與者(Coverity,Klockwork,PVS-Studio等)都在努力盡可能增加標準的覆蓋范圍。

編碼標準

MISRA的歷史始于很久以前。早在 90 年代初,“安全 IT”英國政府計劃就為與電子系統安全相關的各種項目提供資金。MISRA(汽車行業軟件可靠性協會)項目本身的成立是為了創建陸地車輛(主要是汽車)微控制器軟件開發指南。

MISRA(作為一個組織)是一個由來自各個汽車和飛機行業的利益相關者組成的社區。

賓利汽車;

福特汽車公司;

捷豹路虎;

德爾福柴油系統;

堀場米拉;

千變萬化的電氣;

偉世通工程服務;

利茲大學;

里卡多·英國;

采埃孚天合。

非常強大的市場參與者,不是嗎?毫不奇怪,他們的第一個語言相關標準MISRA C在關鍵嵌入式系統的開發人員中得到了廣泛的認可。過了一會兒,米斯拉C++出現了。標準的版本已逐步更新和修訂,以涵蓋語言的新特征。目前,目前的版本是MISRA C:2012和MISRA C++:2008。

MISRA最顯著的特點是其對細節的令人難以置信的關注和在確保安全和保障方面的極其細致。作者不只是在一個地方收集所有C和C++缺陷(例如,CERT的作者)。他們還仔細制定了這些語言的國際標準,并寫出了所有可能犯錯的方法。之后,他們添加了有關代碼可讀性的規則和建議。畢竟,在簡單易讀的代碼中犯錯誤更難,并且在代碼審查期間更容易檢測到錯誤。

通常,第一次遇到MISRA的人會覺得該標準的目的是“禁止這個,禁止那個”。事實上,確實如此,但只是部分。

該標準確實有許多禁止某些操作的規則。但是,這并不意味著要全部禁止,而是列出可能以某種方式導致安全漏洞的所有可能方法。對于大多數規則,您可以自己選擇是否需要遵守它們。讓我更詳細地解釋一下。

MISRA C 規則分為三個主要類別:強制性、必需性和建議性。在任何情況下都不能違反強制性規則。例如,此部分包含規則:“不要使用未啟動變量的值”。所需的規則不太嚴格。它們允許偏差的可能性。但是開發人員需要以書面形式證明這些偏差的合理性,并詳細記錄它們。其余規則屬于咨詢類別——它們是非強制性的。

MISRA C++略有不同:沒有必填類別,大多數規則都屬于必需類別。因此,事實上,您有權違反任何規則——只是不要忘記記錄偏差。還有文檔類別。它包括與一般做法相關的強制性規則(不允許有偏差),例如“匯編程序的每次使用都必須記錄”或“包含的庫必須符合 MISRA C++”。

該標準既包含對問題問題的描述,也包含有關在承擔某項任務之前必須了解的提示:如何根據MISRA設置開發過程;如何使用靜態分析器檢查代碼的合規性;必須維護哪些文件,如何填寫等等。

目前,MISRA不斷發展。例如,MISRA在2019年初宣布了MISRA C:2012第三版(第一版)”。MISRA C:2012版已更新并擴展了新規則。同時,即將發布的“MISRA C:2012修正案2 - C11核心”,這是2012年的修訂標準。

MISRA C++也不會停滯不前。如您所知,MISRA C++的最后一個標準可以追溯到 2008 年,因此它涵蓋的語言的最新版本是 C++03。正因為如此,還有另一個類似于MISRA的標準,它的名字是AUTOSAR C++。它最初旨在作為MISRA C++的延續,旨在涵蓋該語言的更高版本。與其策劃者不同,AUTOSAR C++每年更新兩次,目前支持 C++14。新的 C++17 和 C++20 更新尚未到來。

結論

在本文中,我想說明使用靜態分析器對于任何嵌入式項目都非常有用。使用靜態分析將幫助您:

減少查找和修復錯誤所需的時間;

減少出現嚴重錯誤的可能性;

減少對固件更新的需求;

監控整體代碼質量;

監控新團隊成員的表現;

嚴格遵守一定的軟件開發標準;

監控第三方模塊/庫的代碼質量。

審核編輯:郭婷

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

    關注

    5082

    文章

    19115

    瀏覽量

    304914
  • 源代碼
    +關注

    關注

    96

    文章

    2945

    瀏覽量

    66735
  • 編譯器
    +關注

    關注

    1

    文章

    1629

    瀏覽量

    49115
收藏 人收藏

    評論

    相關推薦

    嵌入式系統開發的測試方法 嵌入式系統開發與AI結合應用

    嵌入式系統開發的測試方法 嵌入式系統開發是一個復雜的過程,涉及到硬件和軟件的緊密結合。測試是確保系統
    的頭像 發表于 12-09 10:22 ?324次閱讀

    嵌入式系統開發與硬件的關系 嵌入式系統開發常見問題解決

    嵌入式系統開發與硬件的關系 嵌入式系統是專為特定應用設計的計算機系統,它們通常嵌入在所控制的設備
    的頭像 發表于 12-09 09:38 ?240次閱讀

    mmc卡在嵌入式系統的使用

    。多媒體卡(MultiMediaCard,簡稱MMC)作為一種小型、高性能、低成本的存儲解決方案,被廣泛應用于嵌入式系統。 1. MMC卡的工作原理 MMC卡是一種基于閃存技術的存儲卡,最初由西門子和東芝共同
    的頭像 發表于 11-25 09:58 ?225次閱讀

    嵌入式linux開發的基本步驟有哪些?

    嵌入式Linux開發是一個復雜的過程,涉及到硬件選擇、操作系統移植、驅動開發、應用程序開發等多個方面。以下是
    的頭像 發表于 09-02 09:11 ?482次閱讀

    嵌入式linux開發板怎么操作

    嵌入式Linux開發板是一種基于Linux操作系統嵌入式系統開發平臺。它通常包括一個處理器、內存、存儲器、輸入/輸出接口等硬件組件,以及一
    的頭像 發表于 09-02 09:09 ?376次閱讀

    嵌入式linux開發板芯片的工作原理

    嵌入式Linux開發板是一種基于Linux操作系統嵌入式系統開發平臺,它廣泛應用于工業控制、智能家居、智能交通、醫療設備等領域。
    的頭像 發表于 09-02 09:07 ?384次閱讀

    恩智浦加速嵌入式AI創新應用開發

    在AI應用飛速發展的今天,如何能夠將AI與嵌入式系統開發有機結合起來,營造新的開發生態,打造與眾不同的創新用例,一直是嵌入式開發者追求的目標。
    的頭像 發表于 08-27 09:46 ?828次閱讀

    嵌入式系統的實時操作系統

    嵌入式RTOS是嵌入式應用程序運行、相互交互和與外界通信的底層軟件機制。在本節,您將了解嵌入式軟件開發人員使用哪些流行RTOS以及它們運行
    的頭像 發表于 08-20 11:28 ?487次閱讀

    嵌入式開發前景怎么樣?

    嵌入式開發前景非常廣闊,這主要得益于物聯網、人工智能、大數據等技術的快速發展,以及嵌入式系統在各個領域的廣泛應用。以下是對嵌入式開發前景的詳細分析
    的頭像 發表于 07-10 09:00 ?2689次閱讀
    <b class='flag-5'>嵌入式開發</b>前景怎么樣?

    嵌入式系統怎么學?

    、C++或者Python。這些語言在嵌入式系統開發中都被廣泛應用。 3、微處理器/微控制器架構:學習常見的微處理器和微控制器架構,如ARM、AVR、PIC等,了解其特性和應用場景。 4、嵌入式
    發表于 07-02 10:10

    嵌入式系統軟硬件基礎知識大全

    ,應用程序開發嵌入式系統開發的關鍵環節。我們還需要了解嵌入式系統的應用程序開發流程,包括需求
    發表于 05-09 14:12

    再談嵌入式實時操作系統

    程序的可移植性得到了增強,系統開發的工作量減輕的同時也提高了開發效率。對實時性和可靠性日益增長的要求正在塑造某些現代領域的嵌入式實時操作系統的發展方向,例如航空航天、工業控制、汽車電子
    的頭像 發表于 04-09 17:27 ?792次閱讀
    再談<b class='flag-5'>嵌入式</b>實時操作<b class='flag-5'>系統</b>

    ARM嵌入式Linux 系統開發從入門到精通

    ARM嵌入式Linux 系統開發從入門到精通
    發表于 03-10 18:44

    嵌入式工程師需要掌握哪些技術?

    一些必要的技術能力是至關重要的。在本篇,我們將討論入行嵌入式所必須的技術能力。 1.C/C++編程能力:C/C++是嵌入式系統開發中最常用的編程語言。熟練掌握C/C++語言將使你能
    發表于 03-04 16:38

    嵌入式軟件開發和軟件開發的區別

    嵌入式軟件開發和軟件開發是兩個不同的概念,它們在一些關鍵方面有著明顯的區別。嵌入式軟件開發是指開發
    的頭像 發表于 01-22 15:27 ?2278次閱讀
    主站蜘蛛池模板: 阿v天堂2017在无码| 偷窥wc美女毛茸茸视频| 噜噜噜狠狠夜夜躁精品| 好色女博士| 狠狠狠的在啪线香蕉| 两个客户一起吃我的奶| 久久久97人妻无码精品蜜桃 | 亚洲AV久久久噜噜噜久久| 日日夜夜操操操| 日韩中文字幕欧美在线视频| 全黄h全肉细节文在线观看| 秋霞电影院午夜伦高清 | 国产真实夫妇交换视频| 国产色无码精品视频国产| 国产日韩成人内射视频| 国产免费阿v精品视频网址| 国产伦精品一区二区免费| 国产亚洲精品a在线观看app| 韩国女主播内部vip自带氏巾| 九九久久国产精品免费热6| 久久久久久电影| 麻豆国产原创中文AV网站| 欧美精品高清在线观看| 日韩精品亚洲专区在线电影不卡| 特级做A爰片毛片免费69| 小草影院免费| 一个人免费完整观看日本| 607080老太太AW| 扒开女人下面使劲桶视频| 国产精品久久久久久久久久影院| 国产无线乱码一区二三区| 精品国产美女AV久久久久| 美女裸露100%奶头视频| 青草伊人久久| 校花在公车上被内射好舒| 在线播放一区二区精品产| 99热免费精品店| 国产成人免费在线观看| 娇妻让壮男弄的流白浆| 男人的天堂黄色| 婷婷五月久久丁香国产综合|