汽车异构硬件平台开发如何进行静态代码分析

描述

随着汽车软件开发的复杂程度不断提升,尤其是智能网联汽车和自动驾驶技术的进步,汽车软件开发的复杂程度不断攀升。为了满足日益增长的功能需求和技术挑战,异构硬件平台被越来越多地采用,不同的工具链也不可避免地被引入到实际的开发流程中。这一趋势不仅增加了开发过程的技术多样性,也使得单个项目的编译过程中会涉及到多种编译器。

 

本文主要讲解基于静态代码分析工具Helix QAC,我们该如何对多编译器工程进行静态分析。

新版本Helix QAC(2024.1+)的分析方式

为了适应这一趋势,Helix QAC在2024年发布的版本中引入了多CCT的功能。CCT(Compiler Compatibility Template),是Helix QAC软件中存储编译器环境配置的文件。根据CCT文件生成的方式,Helix QAC把CCT分为了两种:

  1. 自动CCT(Auto CCT):在工程同步时,自动生成的CCT;
  2. 静态CCT(Static CCT):基于CCT生产工具提前生成的CCT;

自动CCT

针对自动CCT方式,多编译器的配置也是自动的,无需我们进行额外的设置,目前Helix QAC支持使用自动CCT的编译器如下表:

Compiler               Filter           Command
ARM Clang              qa_armclang      armclang
Clang C                qa_clang         clang,clang-[3-9][.][0-9],clang-[1-9][0-9][.][0-9],clang-[3-9],clang-[1-9][0-9]
Clang C++              qa_clang         clang++,clang++-[3-9][.][0-9],clang++-[1-9][0-9][.][0-9],clang++-[3-9],clang++-[1-9][0-9]
Compiler caching tools ccache           ccache,distcc,ccache-motorola,ccache_cc,ccache_cxx
Embarcadero BCC        qa_bccclang      bcc64
GNU C                  qa_gnu           gcc,cc,c++,gcc-[1-9],gcc-[1-9][0-9],gcc-[1-9][.][0-9],gcc-[1-9][0-9][.][0-9]
GNU C Cross compilers  qa_gnu           *-*-gcc,*-*-*-gcc,*-*-*-gcc-[1-9]*
GNU C++                qa_gnu           g++,g++-[1-9],g++-[1-9][0-9],g++-[1-9][.][0-9],g++-[1-9][0-9][.][0-9]
GNU C++ Cross compilersqa_gnu           *-*-g++,*-*-*-g++,*-*-*-g++-[1-9]*
GNU cc1/cc1plus        qa_gnu_cc1       cc1,cc1plus
Green Hills ARM        qa_ghs           cxarm,ccarm,cxarm64,ccarm64,cxthumb,ccthumb,cxtxarm,cctxarm
Green Hills Integrity  qa_ghs           ccint*,cxint*
Green Hills PPC        qa_ghs           cxppc,ccppc,cxtxppc,cctxppc
Green Hills TriCore    qa_ghs           cctri,cxtri
Green Hills v850       qa_ghs           cx*850,cc*850,cxv850e,ccv850e
Hexagon Clang          qa_hexagonclang  hexagon-clang,hexagon-clang++
HighTec Tricore        qa_hightec       tricore-c++,tricore-g++,tricore-gcc
IAR compilers          qa_icc           icc*
Keil ArmCC             qa_armcc         armcc
Microchip MPLAB pic24  qa_microchip30   pic30-gcc
Microchip MPLAB xc16   qa_microchip16   xc16-gcc
Microchip MPLAB xc32   qa_microchip32   xc32-gcc,xc32-g++,xc32-c++
Microchip MPLAB xc8    qa_microchip8    xc8
Microchip MPLAB xc8-cc qa_microchip8cc  xc8-cc
QNX                    qa_qnx           qcc,QCC,q++
Renesas                qa_renesas       ccrh,ccrl,ccrx,cx
Renesas ca850          qa_renesas_ca850 ca850
Renesas cc78k0         qa_renesas_cc78k0cc78k0,cc78k0r
Synopsys DesignWare ARCqa_metaware      ccac
TI CCS                 qa_ti            armcl,cl[0-9]?*,clpru
TI CCS Clang           qa_tiarmclang    tiarmclang
Tasking                qa_tasking       ctc,cptc,cmcs
Visual Studio          qa_mscompile     cl,clarm,clsh
Wind River             qa_windriver     dplus,dcc

静态CCT

如果我们采用传统的静态CCT的方式,那么需要我们提前为不同的编译器生成对应的CCT文件,并在HeliX QAC中将这些CCT导入到软件中。

Helix QAC现在支持为一种语言选择多个CCT配置,如下:

汽车

在我们完成源码加载后,如果不进行单独配置,那么Helix QAC会使用Default CCT对源码进行解析。如果文件夹内的源码使用的编译器与默认CCT不一样,可以在对应的文件属性中重新选择合适的CCT配置。

汽车

需要注意的是,我们只能针对文件夹进行CCT的选择,不能针对单个源码进行CCT的配置。而且,对于多CCT的工程,由于这是Helix QAC最新版本才有的功能,因此无法兼容Dashboard,只能将多CCT工程的分析结果上传到Validate中。

老版本Helix QAC的分析方式

由于老版本Helix QAC中无法为文件夹选择不同的CCT,如果要实现多编译器的工程分析,需要借助Helix QAC的CMA工程。

CMA(Cross-Module Analysis),是HeliX QAC提供的一种跨模块分析功能,它允许我们将多个HeliX QAC工程添加到CMA工程中,以进行跨模块的分析,并检查重复定义、不兼容的声明和未使用的变量等问题。

具体到多编译器的工程场景,我们需要为每个编译器建立一个Helix QAC工程,并将使用该编译器的源码及头文件加载到该工程中,然后将这些不同编译器的QAC工程添加到CMA工程中。

显然,Helix QAC的新功能提供了极大便利,来高效支持多编译器。

 

结语:

通过上述讨论可以看出,随着汽车软件开发复杂度的提升,异构硬件平台的应用已成为必然趋势。多编译器环境的引入不仅是技术发展的自然产物,更是解决日益增长的功能需求和技术挑战的有效途径。在此背景下,Helix QAC 作为一款先进的静态代码分析工具,其新版本中引入的多CCT功能为开发人员提供了强大的支持,该功能不仅简化了多编译器环境下的代码分析过程,还可以极大增强代码的质量和安全性。

如果想试用最新版的Helix QAC,欢迎垂询北汇信息。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分