前言
IAR集成了C-STAT靜態分析工具,主要通過對源代碼等級進行分析來發現代碼中的潛在問題,除了提高代碼質量外,還有助於提高代碼的規範
如有異議,請指正
主要特點
- C/C++代碼分析
- 檢查是否符合MISRA C:2004,MISRA C++:2008和MISRA C:2012定義的規則
- 大約有250個檢查映射到CWE和CERT C/C++涵蓋的數百個問題
- 可靈活的設置規則,與詳細的錯誤信息
規則配置
1. 右鍵工程option
2. 選擇Static Analysis配置欄,工具自身的需求進行設置,一般使用默認即可
執行分析
右鍵工程選擇工程分析
-
編譯欄會彈出C-STAT Messages顯示代碼分析的結果
-
根據上圖顯示,提示指針completion存在爲空的風險,雙擊跳轉,查看下源碼
void rt_completion_init(struct rt_completion *completion)
{
rt_base_t level;
level = rt_hw_interrupt_disable();
completion->flag = RT_UNCOMPLETED;
rt_list_init(&completion->suspended_list);
rt_hw_interrupt_enable(level);
}
- 源碼中,形參completion如果傳遞進來的是空指針,那麼調用completion->flag將會引起系統非法訪問
優化方案:增加指針的非空判斷
void rt_completion_init(struct rt_completion *completion)
{
rt_base_t level;
if(completion == NULL)return;//判斷指針是否爲空
level = rt_hw_interrupt_disable();
completion->flag = RT_UNCOMPLETED;
rt_list_init(&completion->suspended_list);
rt_hw_interrupt_enable(level);
}