2017-04-24 107 views
3

我通常是木工,而不是開發人員。我正在爲嵌入式系統學習C/C++,同時試圖使我的一些工具自動化,以節省我幾個小時的重複性工作。個人使用程序的MISRA-C編碼指南?

現在,它的樂趣和順利,我花了大概數百小時的編碼/學習,並已經節省了更多的時間*。

因爲我想繼續購買和遵循MISRA編碼規則的「強制性好主意」? MISRA包含什麼?只有編碼規則或一些提示才能使它更安全?

那些工具可能是危險的(畢竟他們砍木頭,而人體抵抗力差得多......)。

注:我明明做我的4個步驟測試:

  1. 只是一個OSD & SD卡記錄器運行PIC(有一天我會做一個anylze工具,並停止閱讀的)。

  2. 我插上沒事就可以了

  3. 工具我用泡沫

  4. 軟鑽/刀我在開展好距離真正的考驗用手擋上的急停按鈕。

此外,我是唯一的員工,沒有其他人可以訪問我的工作場所。 *現在我已經把鑽頭變成了一種3D打印機(做不精確的部分工作),並將一個「切割板」變成了自動化的打印機。注意2:我不是母語的人,所以工具的名字很可能不在。

+0

MISRA可以給你的不良代碼的警告,並且它可以幫助,但它不是一個魔杖。您需要開始成爲木工**和**開發人員,並瞭解您的代碼。 C有一個* undefined behavior *的概念,這意味着如果存在這樣的缺陷,代碼可以以任何方式行事。所以不要相信看起來可以工作的代碼;只有信任你認識的代碼才能工作。 – user694733

+0

@ user694733它可能很奇怪,但我真的不相信電腦,畢竟代碼是我的,所以...我只使用我的代碼,如果在30小時的日誌我沒有一個單一的輸出+ 5%的期望值。我的問題更多:威斯米拉的規則會幫助我做更好的代碼,還是更多地給公司作爲他們可以向他們的消費者展示的旗幟? –

+0

MISRA是一套編碼規則,而是更好地閱讀每條規則的解釋,並以此作爲建議。即知道什麼時候跟隨他們,什麼時候他們是廢話。一些規則使得代碼比沒有它們更不安全,例如要求施放。 – Olaf

回答

4

MISRA最初設計用於汽車行業,雖然在現階段它已經成長壯大。該MISRA guidlines既定目標是:

  • 確保安全
  • 帶來的穩定性,可靠性的軟件。
  • 與財產安全相沖突時,人身安全必須優先。
  • 考慮系統設計中的隨機和系統故障。
  • 展現穩健性,不僅僅依賴於失敗的缺失。
  • 安全考慮在產品的設計,製造,操作,維修和處理中的應用。

這些文檔主要包含基於規則的試圖實現這些目標的代碼的諮詢信息。 MISRA文件價格多年來有所下降,有些文件可以從MISRA在線購買,只需10英鎊+增值稅。但是,作爲初學者和業餘編碼者,我會建議您首先提高您對C和C++的認識。雖然行業大部分地區往往是很好的遵循相關的標準,如果適用文檔編寫的,讀者的語言,並在關注和流程管理全面商用型非常堅實的基礎假設寫在他們的應用程序。如果您的車間僅供個人使用,並根據關於管轄的工作場所安全在你的管轄規則,我可以說,具有語言,語言工具和硬件有很好的理解將允許你開始做正確的選擇,關於如何代碼的東西比讀MISRA可以在這樣一個階段英寸

如上所述,值得重申的是,MISRA不是某種魔術棒或具體的方式來保證你的代碼是好,工作和安全。好的和不好的代碼都可以達到標準。在完全掌握自己在做什麼之前,遵循MISRA可能與確保您的工作車間中的每根電纜都被整齊地固定在位,但隨後用鑿子刺傷自己一樣。

+0

所以,現在它不是「強制性的」,但在某個時候,它可能是一個不錯的主意,尋找它。此外,我檢查了價格和它肯定不是一個問題。 –

+0

絕對不是強制性的。雖然它後面的任何程序就不會受到傷害,它的,我知道主要使用的是與該公司有必要證明他們的代碼符合SAFET該級別的應用程序。以現實生活中的例子,這可能意味着一個編碼錯誤函數希望*不應*造成汽車1000的制動變得無效 – Toby

+0

一些規則實際上導致糟糕的代碼和抑制編譯器檢查。 – Olaf

2

MISRA-C是一組的,將強制你從C程序淘汰衆所周知的問題,並沒有準確定義的行爲規則。它是C語言的一個「安全子集」,通過針對衆所周知的錯誤(例如依賴於定義不明確的行爲或隱式類型轉換)的規則來禁止各種形式的危險練習。 C的優勢在於它是一種非常古老的語言,這意味着所有的語言缺陷都是衆所周知的。

MISRA-C有一個沉重的重點放在靜態代碼分析,發現在編譯時錯誤。這是要記住的,據我所知,目前還沒有開源的靜態代碼分析工具可以檢查MISRA-C的合規性。商業工具往往非常昂貴,並且往往也充滿了錯誤/誤報。儘管如此,它們大多數都很有用。 MISRA-C只針對C語言編程,並沒有解決CPU或微控制器問題等問題,雖然它確實執行了一些形式的防禦性編程,這是對抗EMI,失控代碼和其他形式的反制意外的程序行爲。 (對於一般的提示列表&技巧超越C,見this。不是所有的這些都將必然適用於特定的機器雖然)。

爲了證明MISRA合規性,您創建一個「合規矩陣」這說明你是如何捕獲在MISRA-C文檔的每個指令/規則:通過編譯器的消息,同行評審,靜態代碼分析等

文檔中的大多數規則作出了很大的意義,但有些卻沒有。然而,MISRA-C確實允許偏離大多數規則,排名他們作爲一個:

  • 強制性。不允許有任何偏差。
  • 建議。如果不遵守規則,必須引用正式的偏離程序。
  • 諮詢。沒有正式的偏差就可以偏離規則。

通常情況下,創建MISRA-C達標因此通過建立一個公司的編碼標準,它解決所有規則進行。實施它的最簡單方法是在本文檔中記錄在公司層面遵循哪些規則以及跳過哪些規則。然後相應設置靜態代碼分析過濾器。