0
点赞
收藏
分享

微信扫一扫

使用 splint 给嵌入式软件做静态分析


安装 splint:

sudo apt-get install splint

使用 splint 做静态分析:

splint -f lint/splint.rc app/*.c

  • -f lint/splint.rc 指定从 lint/splint.rc 文件中读取命令参数,如果命令参数文件命名为 .splintrc ,那么不需要显式指定。
  • app/*.c 对 app 目录下的所有源文件进行静态分析。

命令参数文件:

# splint.rc
-systemdirs /home/user/tools/gcc/gcc-arm-none-eabi-5_4-2016q3/arm-none-eabi/include:hal/STM32L0xx/CMSIS/Include:hal/STM32L0xx/CMSIS/Device/ST/STM32L0xx/Include:hal/STM32L0xx/STM32L0xx_HAL_Driver/Inc

-D__GNUC__
-DUSE_FULL_LL_DRIVER
-DSTM32L051xx
-Ilib
-Ihal/MyBoard/Inc
-Ihal/STM32L0xx/STM32L0xx_HAL_Driver/Inc
-Ihal/STM32L0xx/CMSIS/Include
-Ihal/STM32L0xx/CMSIS/Device/ST/STM32L0xx/Include
-I/home/user/tools/gcc/gcc-arm-none-eabi-5_4-2016q3/arm-none-eabi/include
-preproc

将命令行参数放到命令参数文件中,每行一个命令,# 开头的是注释行。splint 有一个示例文件:/usr/share/doc/splint/examples/splint.splintrc 。

  • -systemdirs 将指定的目录作为系统头文件路径,默认不分析系统头文件,多个路径用冒号分隔。如果不希望分析某个目录下的头文件,那么可以将这个目录添加到这里。
  • -Ihal/MyBoard/Inc 指定头文件搜索路径,这应该和编译时传给编译器的头文件搜索路径一致。搜索路径可以指定多个,就像给编译器指定多个搜索路径一样,特别要注意的是:最后要将编译器的头文件路径添加进去,就是​​-I/home/user/tools/gcc/gcc-arm-none-eabi-5_4-2016q3/arm-none-eabi/include​​这一行,这是将 splint 用在嵌入式软件上的最特别之处。默认情况下,splint 认为编译器的头文件文件路径是 /usr/include ,嵌入式软件的系统头文件并不在这里,而是在编译器的相关目录下。
  • -DUSE_FULL_LL_DRIVER 定义宏,应该和编译时传给编译器的参数一致,除此之外还要添加编译器预定义的宏,比如​​__GNUC__​​,要获取编译器预定义的宏,参考​​打印GCC预定义宏​​。

参考资料:

  • ​​splint manual​​
  • ​​splint简要手册​​
  • ​​Splint介绍​​

rc: run command


举报

相关推荐

0 条评论