欧洲航天局考虑使用Frama-C;需要帮助

时间:2018-10-29 13:27:13

标签: c frama-c

Frama-C社区。我叫Maurizio Martignano(www.spazioit.com)。

我为ESA任务执行独立的软件验证和验证,并且目前参与欧洲航天局的一个项目,该项目试图收集一组静态分析工具,并以预​​包装的即用形式提供它们以供使用。在“盲”分析中-即按原样查看代码(没有任何特定于分析器的注释)。

我不确定Frama-C是否适合此模型-开放源代码库的初步结果似乎证实了该工具不能与“按原样”代码库一起使用。

这就是我所做的...

我以Crazyflie系统https://github.com/bitcraze/crazyflie-firmware作为测试平台。

此处提供了构建工具集:https://launchpad.net/gcc-arm-embedded/+download

我从Makefile中构造了以下脚本(frama-c-abalyze.sh),该脚本应该从“ src”文件夹中调用。

    #frama-c -c11 -kernel-msg-key pp -kernel-warn-error=-annot-error  -cpp-extra-args="-DUSE_RADIOLINK_CRTP -DENABLE_UART -DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__TARGET_FPU_VFP -DBOARD_REV_D -DESTIMATOR_NAME=anyEstimator -DCONTROLLER_NAME=ControllerTypeAny -DPOWER_DISTRIBUTION_TYPE_stock -Ilib/FreeRTOS/include -Ilib/FreeRTOS/portable/GCC/ARM_CM4F -Isrc -Iconfig -Ihal/interface -Imodules/interface -Iutils/interface -Idrivers/interface -Iplatform -I../vendor/CMSIS/CMSIS/Include -Idrivers/bosch/interface -Ilib/STM32F4xx_StdPeriph_Driver/inc -Ilib/CMSIS/STM32F4xx/Include -Ilib/STM32_USB_Device_Library/Core/inc -Ilib/STM32_USB_OTG_Driver/inc -Ideck/interface -Ideck/drivers/interface -Iutils/interface/clockCorrection -Iutils/interface/tdoa -Iutils/interface/lighthouse -I../vendor/libdw1000/inc -Ilib/FatFS -Ilib/vl53l1 -Ilib/vl53l1/core/inc -DSTM32F4XX -DSTM32F40_41xxx -DHSE_VALUE=8000000 -DUSE_STDPERIPH_DRIVER" $*
    frama-c -c11 -kernel-msg-key pp -kernel-warn-error=-annot-error  -no-cpp-frama-c-compliant -no-frama-c-stdlib -cpp-command="arm-none-eabi-gcc -E -DUSE_RADIOLINK_CRTP -DENABLE_UART -DARM_MATH_CM4 -D__FPU_PRESENT=1 -D__TARGET_FPU_VFP -DBOARD_REV_D -DESTIMATOR_NAME=anyEstimator -DCONTROLLER_NAME=ControllerTypeAny -DPOWER_DISTRIBUTION_TYPE_stock -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Ilib/FreeRTOS/include -Ilib/FreeRTOS/portable/GCC/ARM_CM4F -Isrc -Iconfig -Ihal/interface -Imodules/interface -Iutils/interface -Idrivers/interface -Iplatform -I../vendor/CMSIS/CMSIS/Include -Idrivers/bosch/interface -Ilib/STM32F4xx_StdPeriph_Driver/inc -Ilib/CMSIS/STM32F4xx/Include -Ilib/STM32_USB_Device_Library/Core/inc -Ilib/STM32_USB_OTG_Driver/inc -Ideck/interface -Ideck/drivers/interface -Iutils/interface/clockCorrection -Iutils/interface/tdoa -Iutils/interface/lighthouse -I../vendor/libdw1000/inc -Ilib/FatFS -Ilib/vl53l1 -Ilib/vl53l1/core/inc -DSTM32F4XX -DSTM32F40_41xxx -DHSE_VALUE=8000000 -DUSE_STDPERIPH_DRIVER %1 > %2" $*

第一行使用自己的包含文件和预处理器调用Frama-C。 构建系统的第二行调用Frama-C包括文件和预处理器。

使用第二行并将其应用于也出现在Makefile中的“ src”文件夹中的所有* .c文件中,我遇到了许多Frama-C“编译错误”,例如“语法错误”,“无效的用户输入”,“用户错误”。

最重要的是,我试图在没有显示任何“编译”错误的文件上调用“ val”插件,例如“ ../modules/src/log.c”。我使用了以下命令:

    ./frama-c-analyze.sh -rte -val -main logTask modules/src/log.c
    ./frama-c-analyze.sh -rte -val -main logTOCProcess modules/src/log.c
    ./frama-c-analyze.sh -rte -val -main logControlProcess modules/src/log.c

将此类型的命令应用于文件中的所有功能。

我设法获得的输出内容如下:

    [value:alarm] modules/src/log.c:771: Warning: 
      assertion 'rte,mem_access' got status unknown.
    [value:alarm] modules/src/log.c:771: Warning: 
      out of bounds read. assert \valid_read(&ops->variable);
    [value:alarm] modules/src/log.c:772: Warning: 

我发现这种类型的输出内容不是很丰富,有些误报。

我做错了吗?我想念什么吗?我是否需要使用Frama-C include并使用ACLS注释“丰富”代码?

非常感谢您, 毛里齐奥

0 个答案:

没有答案