前言
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);
}