《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(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)中的編譯器效能,,通過具體測(cè)試數(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ā)變得相對(duì)簡(jiǎn)單,,從而對(duì)廣大工程人員降低了門檻[1]。目前有很多工程人員正在用各種開發(fā)平臺(tái)進(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ù),,因此,,對(duì)IDE開發(fā)效率影響最大的是編譯器的效能。本文針對(duì)目前廣泛使用的三種集成開發(fā)環(huán)境ADS1.2,、RVDS2.2和Tornado2.2中C編譯器的性能進(jìn)行了研究,,測(cè)試其編譯效率,分析了編譯器效能產(chǎn)生差異的原因,。?

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

??? (1)ADS(ARM Developer Suite)是ARM公司推出的ARM系列處理器集成開發(fā)工具,,使用非常廣泛,目前最高版本是1.2,,使用的主要是ARM公司的armcc編譯器,,此編譯器通過了Plum Hall C Validation Suite為ANSI C的一致性測(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編譯器,它對(duì)循環(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)行對(duì)比[5],。?

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

2 編譯器工作原理?

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

?

?

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

?

?

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

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

?

?

3 測(cè)試原理及方法?

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

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

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

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

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

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

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

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

??? 分別對(duì)三個(gè)程序進(jìn)行編譯后的測(cè)試結(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],。?

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

??? 本文對(duì)于目前廣泛使用的三種嵌入式系統(tǒng)集成開發(fā)環(huán)境的編譯器效率進(jìn)行了測(cè)試,,通過綜合對(duì)比,得出了結(jié)論,。還有很多公司,,如IAR、Embest的IDE都有不錯(cuò)性能,,因此,,對(duì)編譯器的研究有待于更進(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ì)語言編譯原理(第三版).北京:國(guó)防工業(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中國(guó).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)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。