《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 嵌入式系統(tǒng)集成開發(fā)環(huán)境中的編譯器效能研究

嵌入式系統(tǒng)集成開發(fā)環(huán)境中的編譯器效能研究

2008-10-15
作者:王榮勝,林嘉宇,張 鑌

??? 摘? 要: 從分析編譯器基本工作原理入手,研究了目前廣泛使用的三種" title="三種">三種嵌入式系統(tǒng)" title="嵌入式系統(tǒng)">嵌入式系統(tǒng)集成開發(fā)環(huán)境" title="集成開發(fā)環(huán)境">集成開發(fā)環(huán)境(ADS1.2、RVDS2.2和Tornado2.2)中的編譯器效能,通過具體測試數(shù)據(jù),分析了編譯器效能產(chǎn)生差異的原因,得出了結(jié)論。?

??? 關(guān)鍵詞: 嵌入式系統(tǒng);集成開發(fā)環(huán)境;編譯器;效能

?

??? 在嵌入式系統(tǒng)迅猛發(fā)展的今天,廣泛的應(yīng)用和需求使嵌入式系統(tǒng)的開發(fā)不再局限于只能由相關(guān)應(yīng)用領(lǐng)域的專家來完成。各種優(yōu)秀的集成開發(fā)環(huán)境IDE(Integration Develop Environment)的出現(xiàn),使得嵌入式系統(tǒng)開發(fā)" title="系統(tǒng)開發(fā)">系統(tǒng)開發(fā)變得相對簡單,從而對廣大工程人員降低了門檻[1]。目前有很多工程人員正在用各種開發(fā)平臺進(jìn)行嵌入式系統(tǒng)開發(fā),從ARM公司的SDT到ADS,再到RVDS,以及風(fēng)河公司的Tornado和其他公司提供的各種專用開發(fā)工具" title="開發(fā)工具">開發(fā)工具,這些IDE一般都是由文件管理器、編譯器、匯編器、鏈接器、調(diào)試器等組件和工具組成。在這些程序開發(fā)設(shè)計(jì)環(huán)境中,編譯程序起著核心作用,鏈接程序、調(diào)試程序、程序管理等工具直接依靠編譯程序所產(chǎn)生的結(jié)果工作,而且其他工具的構(gòu)造也常常要用到編譯的原理、方法和技術(shù),因此,對IDE開發(fā)效率影響最大的是編譯器的效能。本文針對目前廣泛使用的三種集成開發(fā)環(huán)境ADS1.2、RVDS2.2和Tornado2.2中C編譯器的性能進(jìn)行了研究,測試其編譯效率,分析了編譯器效能產(chǎn)生差異的原因。?

1 三種主要的IDE及其C編譯器介紹?

??? (1)ADS(ARM Developer Suite)是ARM公司推出的ARM系列處理器集成開發(fā)工具,使用非常廣泛,目前最高版本是1.2,使用的主要是ARM公司的armcc編譯器,此編譯器通過了Plum Hall C Validation Suite為ANSI C的一致性測試。armcc用于將ANSI C編寫的程序編譯成32位ARM指令代碼[2][3]。?

??? (2)RVDS(RealView Developer Suite)是ARM公司繼SDT和ADS1.2后主推的新一代開發(fā)環(huán)境,旨在取代ADS,目前最高版本為3.1,后又推出了RVDS MDK,但使用最為普遍的還是RVDS2.2。編譯器是ARM公司新推出的RVCT編譯器,它對循環(huán)和指針具有高階優(yōu)化的新特性[4]。?

??? (3)Tornado是Wind River Systems(風(fēng)河公司)的老牌開發(fā)工具,目前常用版本為2.2,主要為風(fēng)河公司的diab編譯器和GNU(開放軟件聯(lián)盟)的gcc編譯器使用。其中g(shù)cc編譯器的通用性更好,尤其是在Linux環(huán)境下,gcc是最佳選擇,所以這里選擇更具代表性的gcc進(jìn)行對比[5]。?

??? 以上三種IDE各有特色,其C編譯器都能夠很好地支持C語言編寫的源程序,同時(shí)IDE中提供了對ARM運(yùn)行時(shí)庫的支持,從而保證了所編寫的C程序能夠用開發(fā)工具進(jìn)行編譯、鏈接和調(diào)試。?

2 編譯器工作原理?

??? 編譯器是將一種語言編譯成為另一種語言的計(jì)算機(jī)程序,該程序以源語言編寫的程序作為輸入,翻譯生成等價(jià)的目標(biāo)語言程序[6]。編譯器可分成只依賴于源語言的編譯器前端和只依賴于目標(biāo)語言的編譯器后端兩大部分。前端主要對源代碼進(jìn)行掃描、語法分析和語義分析,生成中間代碼;而后端主要是優(yōu)化器和代碼生成器。這一結(jié)構(gòu)對于編譯器的結(jié)構(gòu)靈活性和可移植性十分重要。流程編譯器前后端結(jié)構(gòu)如圖1所示。?

?

?

??? 編譯器內(nèi)部包括了五個(gè)編譯階段,它們執(zhí)行不同的邏輯操作,這些階段在實(shí)際應(yīng)用中是組合成一體的,但其有相對獨(dú)立的步驟。表1為編譯器各編譯階段的任務(wù)表。

?

?

??? 從表1可以看出:第四階段是決定編譯器編譯效率的主要階段,優(yōu)化能力是衡量一款編譯器效能的決定性因素。?

??? 典型的編譯工作流程如圖2所示。?

?

?

3 測試原理及方法?

??? 編譯器性能的測試主要通過對C語言源程序(c文件)編譯后得到的目標(biāo)程序(obj文件)的運(yùn)行時(shí)間和代碼尺寸進(jìn)行比較和綜合衡量,從而判斷編譯器的編譯效率。從編譯原理得出結(jié)論,各種IDE的C編譯器在優(yōu)化階段的優(yōu)化能力是決定測試結(jié)果的主要因素。?

??? 對三個(gè)具有代表性的C程序進(jìn)行了具體測試:簡單的ADD加法程序、規(guī)范的3DES加密算法程序[7]、復(fù)雜且不規(guī)范的熵(Huffman)編碼程序[8]。在測試中,將各種編譯器的優(yōu)化方向設(shè)定為時(shí)間性能,優(yōu)化級別均設(shè)定為最高級別,處理器型號設(shè)為ARM920T。?

??? 測試分兩步進(jìn)行:?

??? (1)對用三種IDE的編譯器對C語言源程序編譯后得到的obj文件大小進(jìn)行統(tǒng)計(jì)。?

??? (2)對各C語言子程序編譯的obj文件和頭文件進(jìn)行鏈接調(diào)試,測量運(yùn)行時(shí)間。選用AXD調(diào)試器為測時(shí)工具,利用AXD下的Debugger Internals選項(xiàng)對編譯鏈接的工程運(yùn)行占用系統(tǒng)時(shí)鐘周期進(jìn)行記錄。?

??? 需要指出的是,Tornado2.2中的gcc編譯器編譯得到的obj文件需要在ADS1.2下重新鏈接,而RVDS2.2自帶AXD調(diào)試器,所以可以直接測時(shí)。?

4 實(shí)驗(yàn)結(jié)果及分析?

??? 比較代碼編譯器所得到的obj文件大?。篢ornado2.2的gcc編譯器得到的obj文件最小,ADS1.2的armcc編譯器得到的obj文件略大于 gcc編譯器,RVDS2.2的RVCT編譯器得到的obj文件比gcc編譯器大10%。?

??? 分別對三個(gè)程序進(jìn)行編譯后的測試結(jié)果如表2所示。?

?

?

??? 表2中Instructions為指令數(shù),Core_cycles為系統(tǒng)程序運(yùn)行時(shí)占用的內(nèi)核時(shí)鐘周期,S_cycles和 A_cycles分別為程序運(yùn)行時(shí)地址連續(xù)操作和空地址操作占用的時(shí)鐘周期數(shù),Total為兩者總和[9]。?

??? 從測試數(shù)據(jù)可以看出,ADD加法程序和3DES加密程序三種編譯器的編譯效率相差不大;ADS1.2的armcc編譯器要略好于Tornado2.2的gcc編譯器和RVDS2.2的RVCT編譯器;而對于熵編碼程序,RVDS2.2的RVCT編譯器的編譯效率明顯高于Tornado2.2的gcc編譯器和DS1.2的armcc編譯器。這是因?yàn)锳DD加法程序和3DES加密程序是比較簡單、規(guī)范的C語言程序,文件數(shù)、函數(shù)調(diào)用、指針和循環(huán)都較少,無法發(fā)揮RVCT的優(yōu)勢;而對于熵編碼程序,各種函數(shù)調(diào)用非常多,指針跳轉(zhuǎn)頻繁,RVCT編譯器會根據(jù)代碼的具體情況,針對函數(shù)調(diào)用、循環(huán)、指針等進(jìn)行高階優(yōu)化,自動進(jìn)行循環(huán)解開、融合、位置調(diào)整、指針優(yōu)化等操作,使代碼由繁化簡更加合理,雖然代碼量略有增大,但是大幅提高了代碼的執(zhí)行效率[10]。因此,綜合比較的結(jié)果是:RVDS2.2的RVCT編譯器的編譯效率是三者中最好的,ADS1.2的armcc編譯器略好于Tornado2.2的gcc編譯器。?

??? 本文對于目前廣泛使用的三種嵌入式系統(tǒng)集成開發(fā)環(huán)境的編譯器效率進(jìn)行了測試,通過綜合對比,得出了結(jié)論。還有很多公司,如IAR、Embest的IDE都有不錯性能,因此,對編譯器的研究有待于更進(jìn)一步深入。?

參考文獻(xiàn)?

[1] 周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程.北京:航空航天大學(xué)出版社,2005.?

[2] ARM.ADS1.2 USER′S MANUAL.2004.?

[3] 孫秋野,孫凱,馮健.ARM嵌入式系統(tǒng)開發(fā)典型模塊.北京:人民郵電出版社,2007.?

[4] ARM.RVDS2.2 Introductory Tutorial.2006.?

[5] WindRiver System.Tornado2.2 UserGuide.2003.?

[6] 陳火旺,劉春林,譚慶平,等.程序設(shè)計(jì)語言編譯原理(第三版).北京:國防工業(yè)出版社,2000.?

[7] Bruce Schneier著,吳世忠譯.應(yīng)用密碼學(xué)——協(xié)議、算法與C源程序.北京:機(jī)械工業(yè)出版社,2001.?

[8] HUFFMAN D A.A method for the construction of minimum?redundancy codes[J].Proc.IRE,1952,40(9):1098-1101.?

[9] Samsung Electronics.S3C2410A USER′S MANUAL.2004.?

[10] ARM中國.RVDS-ARM系統(tǒng)開發(fā)的首選工具.單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007,(2)-(3).?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。