最近随着项目上用户环境,遇到一些程序跑飞的情况,对底层代码的测试之前一直很不充分(主要做完模型仿真测试,除了一些如驱动、故障诊断、转速同步等重要功能会单独做验证,就直接上HiL了,自动化耐久也才刚开始做,发现的问题有限),准备先用Polyspace来分析下。但发生了一个意想不到的问题。
在我们的typedef.h文件里,第87行自定义了_Bool类型,为无符号8位。
在Polyspace(2016b)中配置的编译器与项目一致,为diab+PowerPC。
但是分析时发现会报如下编译错误:
经过查阅,发现从C99标准开始,C语言中新增了布尔类型,名字正好为“_Bool”,所以怀疑是因为与保留字冲突导致。
于是勾选了下面这个选项,按C90标准编译。
但是问题依旧存在,然后和集成工程师看了下项目上编译代码的指令,没有发现特别的关于这方面的配置。
更换Polyspace中其他编译器分析,结果如下:
- GUN,不勾选C90标准选项,也不会报错
- Keil,不勾选C90标准选项,会报同样的错;但勾选了C90后就不报错了
- Visual,不勾选C90标准选项,也不会报错
- Clang, 不勾选C90标准选项,也不会报错
- iar,不勾选C90标准选项,会报同样的错;但勾选了C90后就不报错了
- iso,不勾选C90标准选项,会报同样的错;但勾选了C90后就不报错了
同样用Polyspace2018b分析也是这个结果。
在Matlab Answers提交了该问题,尚处于Open状态。Matlab Answers问题链接