【问题标题】:IAR Embedded Workbench "va_list_ is undefinedIAR Embedded Workbench "va_list_ 未定义
【发布时间】:2021-06-30 21:06:36
【问题描述】:

我在 IAR Embedded Workbench 项目中使用 Coverity Analysis。

当我使用 IAR Embedded Workbench IDE 进行构建时,出现了零错误和零警告。 当我使用批处理文件(Windows 命令窗口)时,出现零错误和零警告:

    "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\common\bin\IarBuild.exe" .\EWARM\Voyant3.ewp -build Voyant3

When I have Coverity use IAR EW command line, I'm getting the error:
 "c:\program files (x86)\iar systems\embedded workbench 8.4\arm\inc\c\yvals.h",
           line 321: error #20: identifier "va_list" is undefined
     typedef _VA_LIST __Va_list;
             ^
 
 Emit for file 'C:/sandboxes/git/voyant-3/Voyant3/Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c' complete.  
 [ERROR] 1 error detected in the compilation of "Middlewares/ST/STM32_USB_Host_Library/Class/MSC/Src/usbh_msc_scsi.c".
 WARNING: cov-emit returned with code 1

这是我的问题:

  1. va_list 在哪里定义?
  2. 如何让 Coverity 定义它?
  3. 我还有什么遗漏的吗?

我正在使用: IAR 电子战:8.42
覆盖范围:2019

编辑 1:Coverity 配置命令
下面是我使用 IAR 配置 Coverity 的命令:

"C:\Program Files\Coverity\Coverity Static Analysis\bin" ^
-co "C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\bin\iccarm.exe" ^
--xml-option=add_arg:"--unsigned_chars" ^
--xml-option=add_arg:"--enable_user_sections" ^
--xml-option=add_arg:"--ppp_translator" ^
--xml-option=add_arg:"replace/\bchar\b/unsigned char" ^
--xml-option=add_arg:"--ppp_translator" ^
--xml-option=add_arg:"replace/signed\s+unsigned\s+char/signed char" ^
-- -e --endian=little --cpu="ST STM32H743ZI" ^
--dlib_config "c:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\inc\c\DLib_Config_Full.h"

【问题讨论】:

    标签: c iar coverity


    【解决方案1】:

    编号问题的答案:

    1. va_list 通常通过#include <stdarg.h> 定义。

    2. 您不必告诉 Coverity。 Coverity 应该自动处理低级编译器的兼容性。有时可以使用 ppp_translator 将解决方案组合在一起,但我不知道如何针对这种情况提出这样的解决方法。

    3. IAR 8.42 was released on 2019-12-19IAR 8.40 was released on 2019-05-27。 Coverity 编译器支持通常比编译器本身的版本晚至少 6 个月,而且很容易比这更长。我认为最可能的解释是 Coverity 2019 版本不包含对 IAR 8.4 的支持,introduced some significant changes around how varargs work

    如果我的猜测是正确的,您要么需要获取更高版本的 Coverity 并查看其发行说明以查看它是否支持 IAR 8.4,要么使用旧版本的 IAR,即 Coverity 2019 支持的版本。再次检查它的发行说明(似乎并未公开)以了解它支持哪些版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 2013-10-20
      • 2021-01-10
      • 2016-06-05
      • 1970-01-01
      • 2015-10-18
      • 2011-02-25
      • 2012-08-18
      相关资源
      最近更新 更多