Page 47 - MCU大廠分享10億級出貨秘訣
P. 47
DESIGN CORNER
另一個很好的例子就是rule 14,它規定if或while的陳述句必 須加上大括弧(curly braces)。圖 3顯示範例程式碼片段。
就是使用程式碼分析工具。事實 上,如果程式曾執行功能安全認 證,就必須執行靜態分析,這類工 具除了幫你找出程式碼中最常見 的缺陷來源,還能找到開發者往 往沒料想到的問題,或在寫程式時 沒有考量到的問題。尤其是在套用 程式碼產生器(scaffold)的狀況, 這類工具真的能幫你開發出更好 的程式,因為它們能強制執行相關 的編碼標準。
MISRA C 2004與2012版;MISRA C++2008規則集;MITRE的通用缺 陷列表(CWE),以及SEI CERT C。圖 4顯示使用這些編碼標準能啟用或 強制遵守的規則。
這很難判斷z = 1語句是否打 算成為else區塊的一部分,這是因 為這裡的縮排(indented)和前面的 陳述式一樣,如果刻意寫成這樣, 這裡就會出現一項bug,因為顯然 並不依循程式所寫的邏輯走到程 式碼區段,這條規則協助避免這類 的程式編碼錯誤,這只是MISRA C 200多條規則的一個小範例,讓程 式碼更加可靠與可移植,進而使設 計案符合未來發展需要。
依據所用靜態分析解決方案 的品質,在還在開發階段檢查程 式碼時,它們就會檢查許多其他 潛在問題。為瞭解其運作方式,來 看看C-STAT靜態分析工具(內建在 IAR Embedded Workbench for RISC-V)的工作狀況。C-STAT延用
這裡還可以打開分類目錄,僅 選取我們覺得自己專案適用的規 則。此外,還可以針對群組、檔案、 函數、或每行程式碼客製化這些選 項設定,選取套用的標的有極高粒 度(granularity)選擇性。完成工具 的設定後,專案(或群組、個別程式 檔案)就可進行分析(或多個檔案), 在完成分析後,可對每個檔案逐一 檢查問題。
寫出好程式的捷徑
圖5顯示偵測到問題CERT- ERR33-C_c屬於CERT C規則界定 的問題,這些規則大多解釋相當明 確,也可參考使用者指南以及說明 檔(F1),如圖6所示。
改進程式碼品質的最快途徑
43
圖4:選取標準與規則。
在說明視窗中,可看到問題的 完整敘述,這種bug的明確性,以 及出現這類bug時問題的嚴重性, 以及列出違反的所有編碼標準。 最重要的是如圖7所示,可以看到 1~3個範例,顯示犯錯的錯誤實例, 以及如何修正,藉以透過檢查並讓 程式碼更強固,藉此協助你快速消 弭靜態分析工具在程式碼中找到的 缺陷。
圖5:程式碼分析訊息。
2022年6月 | www.eettaiwan.com