隨著汽車軟件開發(fā)的復(fù)雜程度不斷提升,尤其是智能網(wǎng)聯(lián)汽車和自動(dòng)駕駛技術(shù)的進(jìn)步,汽車軟件開發(fā)的復(fù)雜程度不斷攀升。為了滿足日益增長的功能需求和技術(shù)挑戰(zhàn),異構(gòu)硬件平臺(tái)被越來越多地采用,不同的工具鏈也不可避免地被引入到實(shí)際的開發(fā)流程中。這一趨勢(shì)不僅增加了開發(fā)過程的技術(shù)多樣性,也使得單個(gè)項(xiàng)目的編譯過程中會(huì)涉及到多種編譯器。
本文主要講解基于靜態(tài)代碼分析工具Helix QAC,我們?cè)撊绾螌?duì)多編譯器工程進(jìn)行靜態(tài)分析。
新版本Helix QAC(2024.1+)的分析方式
為了適應(yīng)這一趨勢(shì),Helix QAC在2024年發(fā)布的版本中引入了多CCT的功能。CCT(Compiler Compatibility Template),是HelixQAC軟件中存儲(chǔ)編譯器環(huán)境配置的文件。根據(jù)CCT文件生成的方式,HelixQAC把CCT分為了兩種:
- 自動(dòng)CCT(Auto CCT):在工程同步時(shí),自動(dòng)生成的CCT;
- 靜態(tài)CCT(Static CCT):基于CCT生產(chǎn)工具提前生成的CCT;
自動(dòng)CCT
針對(duì)自動(dòng)CCT方式,多編譯器的配置也是自動(dòng)的,無需我們進(jìn)行額外的設(shè)置,目前HelixQAC支持使用自動(dòng)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 |
靜態(tài)CCT
如果我們采用傳統(tǒng)的靜態(tài)CCT的方式,那么需要我們提前為不同的編譯器生成對(duì)應(yīng)的CCT文件,并在HeliXQAC中將這些CCT導(dǎo)入到軟件中。
HelixQAC現(xiàn)在支持為一種語言選擇多個(gè)CCT配置,如下:

在我們完成源碼加載后,如果不進(jìn)行單獨(dú)配置,那么HelixQAC會(huì)使用Default CCT對(duì)源碼進(jìn)行解析。如果文件夾內(nèi)的源碼使用的編譯器與默認(rèn)CCT不一樣,可以在對(duì)應(yīng)的文件屬性中重新選擇合適的CCT配置。

需要注意的是,我們只能針對(duì)文件夾進(jìn)行CCT的選擇,不能針對(duì)單個(gè)源碼進(jìn)行CCT的配置。而且,對(duì)于多CCT的工程,由于這是Helix QAC最新版本才有的功能,因此無法兼容Dashboard,只能將多CCT工程的分析結(jié)果上傳到Validate中。
老版本Helix QAC的分析方式
由于老版本HelixQAC中無法為文件夾選擇不同的CCT,如果要實(shí)現(xiàn)多編譯器的工程分析,需要借助HelixQAC的CMA工程。
CMA(Cross-Module Analysis),是HeliXQAC提供的一種跨模塊分析功能,它允許我們將多個(gè)HeliXQAC工程添加到CMA工程中,以進(jìn)行跨模塊的分析,并檢查重復(fù)定義、不兼容的聲明和未使用的變量等問題。
具體到多編譯器的工程場(chǎng)景,我們需要為每個(gè)編譯器建立一個(gè)HelixQAC工程,并將使用該編譯器的源碼及頭文件加載到該工程中,然后將這些不同編譯器的QAC工程添加到CMA工程中。
顯然,Helix QAC的新功能提供了極大便利,來高效支持多編譯器。
結(jié)語:
通過上述討論可以看出,隨著汽車軟件開發(fā)復(fù)雜度的提升,異構(gòu)硬件平臺(tái)的應(yīng)用已成為必然趨勢(shì)。多編譯器環(huán)境的引入不僅是技術(shù)發(fā)展的自然產(chǎn)物,更是解決日益增長的功能需求和技術(shù)挑戰(zhàn)的有效途徑。在此背景下,Helix QAC 作為一款先進(jìn)的靜態(tài)代碼分析工具,其新版本中引入的多CCT功能為開發(fā)人員提供了強(qiáng)大的支持,該功能不僅簡化了多編譯器環(huán)境下的代碼分析過程,還可以極大增強(qiáng)代碼的質(zhì)量和安全性。
如果想試用最新版的Helix QAC,歡迎垂詢北匯信息。
-
編譯器
+關(guān)注
關(guān)注
1文章
1672瀏覽量
51888 -
靜態(tài)測(cè)試
+關(guān)注
關(guān)注
0文章
34瀏覽量
6892 -
汽車
+關(guān)注
關(guān)注
15文章
4223瀏覽量
41316
發(fā)布評(píng)論請(qǐng)先 登錄
什么是低代碼:低代碼開發(fā)平臺(tái)詳解 5個(gè)優(yōu)質(zhì)低代碼平臺(tái)工具
分析嵌入式軟件代碼的漏洞-代碼注入
C語言單元測(cè)試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應(yīng)用
瑞薩RZ/T2H平臺(tái)多核異構(gòu)的應(yīng)用場(chǎng)景分析
主流低代碼開發(fā)平臺(tái)有哪些:加速數(shù)字化轉(zhuǎn)型的核心力量
2025支持AI 驅(qū)動(dòng)數(shù)字化轉(zhuǎn)型的低代碼開發(fā)平臺(tái)有哪些
低代碼開發(fā)平臺(tái)推薦:2025國內(nèi)低代碼開發(fā)平臺(tái)排名TOP10
2025主流低代碼平臺(tái)有哪些:低代碼開發(fā)平臺(tái)選型指南指南
如何在Zephyr中進(jìn)行靜態(tài)代碼分析
工業(yè)物聯(lián)網(wǎng)平臺(tái)有哪些低代碼應(yīng)用
知識(shí)分享 | 使用MXAM進(jìn)行AUTOSAR模型的靜態(tài)分析:Embedded Coder與TargetLink模型
汽車軟件團(tuán)隊(duì)必看:基于靜態(tài)代碼分析工具Perforce QAC的ISO 26262合規(guī)實(shí)踐
汽車異構(gòu)硬件平臺(tái)開發(fā)如何進(jìn)行靜態(tài)代碼分析
評(píng)論