首页 > 其他分享 >汽车异构硬件平台开发如何进行静态代码分析

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

时间:2024-10-10 14:23:59浏览次数:1  
标签:异构 静态 CCT clang qa 编译器 Helix QAC 硬件平台

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

本文主要讲解基于静态代码分析工具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 compilers

qa_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_cc78k0

cc78k0,cc78k0r

Synopsys DesignWare ARC

qa_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,欢迎垂询北汇信息。

 

翻译

搜索

复制

<iframe></iframe>

标签:异构,静态,CCT,clang,qa,编译器,Helix,QAC,硬件平台
From: https://www.cnblogs.com/polelink/p/18456273

相关文章

  • 【免费可视化仪表盘】轻松实现静态/动态数据可视化图表—积木仪表盘
    在当今信息爆炸的时代,如何从海量数据中快速提取关键信息,实现高效决策,成为了企业和个人面临的重大挑战。而积木仪表盘,就如同一位智慧的导航者,为你轻松开启数据可视化的精彩之旅。代码下载https://github.com/jeecgboot/JimuReport技术文档官方网站:http://jimureport.co......
  • 【网络配置】聚合链路eNSP--静态 LACP 模式
            聚合链路(LinkAggregation),也称为链路捆绑、链路聚合组(LAG,LinkAggregationGroup)或以太网链路聚合,是一种将多个物理网络接口(例如以太网端口)组合成一个逻辑链路的技术。聚合链路的配置通常涉及以下两种模式:手工模式(StaticLAG):在这种模式下,网络管理员手动配置......
  • static静态方法的使用
    //测试类,用来执行代码packagehomework;importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){int[]a={4,5,3,6,8,1};//自己初始化数组int[]b=newint[10];//自行输入数组数字Scannerscanner=newScanner(System.in);inti=0;//输入......
  • phpvulhunter工具:静态 php 代码审计
    phpvulhunter是一款PHP源码自动化审计工具,通过这个工具,可以对一些开源CMS进行自动化的代码审计,并生成漏洞报告。1、安装首先从github上进行获取:gitclonehttps://github.com/OneSourceCat/phpvulhunter2、下载完成后,将工程目录放置于WAMP等PHP-Web运行环境中即可。访......
  • 在K8S中,什么是静态Pod?
    在Kubernetes(K8S)中,静态Pod(StaticPod)是一种特殊的Pod类型,它并不是通过KubernetesAPIServer进行管理的,而是直接存在于节点上的。静态Pod的配置文件通常放置在节点上的特定目录中,由`kubelet`直接读取并创建和管理Pod。#####1.静态Pod的特点1.**直接管理**......
  • Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
    关键词:Java,JavaScript,TypeScript,类型系统,静态类型,动态类型,软件开发,编程语言比较摘要:本文深入探讨Java、JavaScript和TypeScript三种语言的类型系统特点,从建筑学角度比喻它们的设计理念,分析各自在处理灵活数据结构时的优劣,并思考类型系统对软件开发的深......
  • Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
    关键词:Java,JavaScript,TypeScript,类型系统,静态类型,动态类型,软件开发,编程语言比较摘要:本文深入探讨Java、JavaScript和TypeScript三种语言的类型系统特点,从建筑学角度比喻它们的设计理念,分析各自在处理灵活数据结构时的优劣,并思考类型系统对软件开发的深......
  • Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
    关键词:Java,JavaScript,TypeScript,类型系统,静态类型,动态类型,软件开发,编程语言比较摘要:本文深入探讨Java、JavaScript和TypeScript三种语言的类型系统特点,从建筑学角度比喻它们的设计理念,分析各自在处理灵活数据结构时的优劣,并思考类型系统对软件开发的深......
  • Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
    关键词:Java,JavaScript,TypeScript,类型系统,静态类型,动态类型,软件开发,编程语言比较摘要:本文深入探讨Java、JavaScript和TypeScript三种语言的类型系统特点,从建筑学角度比喻它们的设计理念,分析各自在处理灵活数据结构时的优劣,并思考类型系统对软件开发的深......
  • C++ 静态类型转换和动态类型转换的区别
    静态类型转换(static_cast)概念static_cast是C++中的一种类型转换操作符,用于在编译时进行类型转换。它主要用于具有明确的、编译器可以在编译阶段确定的类型转换关系的情况。这种转换通常在相关类型之间进行,例如基本数据类型之间的转换,或者在类层次结构中的向上转换(将派生类指......