C++嵌入式系統(tǒng)中應(yīng)用
c++作為一種編程語言,從其誕生之日至今,已經(jīng)在軟件業(yè)的歷史上扮演了至關(guān)重要的角色。它強(qiáng)大的語言功能和靈活的語言機(jī)制是無數(shù)程序員為之折腰。而c++中蘊(yùn)含的oo,gp等編程思想,更是潛移默化的影響了軟件的架構(gòu)方法。從這個(gè)層面上講,c++的影響已經(jīng)不僅僅是一門編程語言這樣簡單。然而隨著internet的發(fā)展及其帶來的b/s架構(gòu)軟件的興起。新興的java/c#/vb.net等基于虛擬機(jī)語言及ruby/groovy等動(dòng)態(tài)語言作為后起之秀,憑借其獨(dú)有的快速開發(fā)、簡單易用等特性,開始逐漸挑戰(zhàn)c++的地位,在企業(yè)計(jì)算領(lǐng)域占據(jù)了越來越重要的地位。拋開企業(yè)計(jì)算,我們轉(zhuǎn)換舞臺(tái),來看一看c++語言在另一塊群雄紛爭的領(lǐng)域上的身影。
嵌入式系統(tǒng)編程 “嵌入式”是一個(gè)很大的話題,它涉及的領(lǐng)域相當(dāng)廣泛,涵蓋了硬件設(shè)計(jì)與軟件開發(fā)。大致來說,嵌入式系統(tǒng)有三個(gè)特點(diǎn):嵌入性,專用性和計(jì)算性。嵌入性表示系統(tǒng)通常需要嵌入到其他對象系統(tǒng)中,小到計(jì)算器、mp3,大到導(dǎo)彈、航天飛機(jī)等等。因此必須滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣環(huán)境(可靠)、成本(價(jià)廉)等要求。專用性表示系統(tǒng)的軟硬件要有可裁剪性;滿足對象要求的最小軟、硬件配置等。計(jì)算性表示嵌入式系統(tǒng)必須是能滿足對象系統(tǒng)控制要求的計(jì)算機(jī)系統(tǒng)。正是由于應(yīng)用系統(tǒng)的環(huán)境復(fù)雜多樣,嵌入式系統(tǒng)的軟硬件種類也非常繁多。按照應(yīng)用需求,處理器可能從4位到128位,內(nèi)存可能從幾k到幾百m甚至幾g不等。
長久以來,提到嵌入式軟件大家首先聯(lián)想到的可能是慢得可憐的處理器和少得可憐的內(nèi)存及外存,通常我們稱此為資源受限的環(huán)境??梢灶A(yù)言,在現(xiàn)在及將來的很長一段時(shí)間內(nèi),很多嵌入式軟件將繼續(xù)在資源受限的環(huán)境下開發(fā)。在資源受限的環(huán)境下,代碼的體積、執(zhí)行的效率通常都是程序員最關(guān)注的因素。正因如此,長期以來,c語言甚至匯編語言在嵌入式領(lǐng)域占據(jù)了非常廣闊的市場。c++語言之所以沒有從一開始就在嵌入式領(lǐng)域遍地開花,也不是沒有原因的。
首先,還是由嵌入式應(yīng)用種類繁多的特點(diǎn)決定,我們永遠(yuǎn)也不會(huì)用iso c++在四位芯片上編程控制彩燈閃爍(當(dāng)然這也不是不可以),這種工作只需要幾條匯編語句就可以完成,用c++無易于“高射炮打蚊子”。更重要的一點(diǎn),iso c++標(biāo)準(zhǔn)定義了c++的語法規(guī)范,但是并沒有定義其相對應(yīng)的開銷?,F(xiàn)實(shí)情況是,在一些編譯器的具體實(shí)現(xiàn)上,有一些iso c++的語法特性會(huì)導(dǎo)致代碼體積膨脹和執(zhí)行效率的低下。這導(dǎo)致了一些關(guān)注嵌入式系統(tǒng)效率與性能的開發(fā)人員不愿意使用c++作為嵌入式軟件的開發(fā)語言。
讓c++為嵌入式系統(tǒng)服務(wù) 雖然使用c++有可能會(huì)對嵌入式軟件帶來額外的開銷,但是這并沒有影響c++在嵌入式軟件中的推廣,在使用c++的過程中,揚(yáng)長避短,發(fā)揮c++在封裝、繼承等方面的優(yōu)勢,避開可能導(dǎo)致效率與性能問題的語言特性,依然可以開發(fā)出優(yōu)秀的嵌入式軟件。下圖列出了c++語言特性及其在oop中的重要性和實(shí)現(xiàn)的成本之間的關(guān)系。使用c++在資源受限的環(huán)境中編程的時(shí)候,需要對這些語言特性進(jìn)行合理的均衡與取舍。
既然iso c++中有一些語言特性有可能會(huì)導(dǎo)致性能和代碼體積的問題,如果能對iso c++進(jìn)行改造使其適用嵌入式環(huán)境,那自然是再好不過的了(雖然這有可能會(huì)導(dǎo)致一些鐵桿iso c++支持者的不滿)。早在上個(gè)世紀(jì)90年代,就已經(jīng)成立了嵌入式c++技術(shù)委員會(huì)(embedded c++ technical committee),該委員會(huì)致力于定義一套適用于嵌入式軟件開發(fā)的c++語言規(guī)范。在1998年,embedded c++規(guī)范正式出爐(我們簡稱之為ec++),我們可以從ec++的官方網(wǎng)站上查看這份規(guī)范,地址是http://www.caravan.net/ec2plus。 大致來講,ec++是標(biāo)準(zhǔn)c++語言的一個(gè)子集,它從c++語法中剔除了一些實(shí)現(xiàn)復(fù)雜和會(huì)導(dǎo)致額外負(fù)擔(dān)語法元素。
例如:多重繼承與虛基類、rtti、異常處理、模版、命名空間等等。同時(shí),在標(biāo)準(zhǔn)庫方面,ec++規(guī)范也做了刪減,stl和stream等被剔除了。在ec++規(guī)范出爐之后。很多嵌入式廠商都推出了符合ec++規(guī)范的編譯器,在嵌入式領(lǐng)域有一定的影響。
c++新的應(yīng)用 近幾年來,嵌入式系統(tǒng)領(lǐng)域又有了新的發(fā)展。首先,隨著手機(jī)、pda等消費(fèi)性電子產(chǎn)品的飛速增長,嵌入式系統(tǒng)地市場規(guī)模在飛速的擴(kuò)大,這個(gè)領(lǐng)域吸引了越來越多的人的眼光。其次,隨著internet的廣為流行,越來越多的智能嵌入式應(yīng)用場景需要互聯(lián)網(wǎng)的支持,這也從另外一個(gè)角度推進(jìn)了嵌入式系統(tǒng)硬件功能的增強(qiáng)和軟件復(fù)雜性的提高?! ≡谶@新一波的浪潮中,c++語言又有了新的用武之地。在嵌入式soc設(shè)計(jì)方面,通常需要對soc體系結(jié)構(gòu)進(jìn)行建模以進(jìn)行體系性能的分析及軟硬件聯(lián)合設(shè)計(jì)。vhdl等設(shè)計(jì)語言可以實(shí)現(xiàn)這些功能。而在1999年osci組織推出的systemc是建立在c++基礎(chǔ)上的開放的系統(tǒng)級設(shè)計(jì)語言,能夠?qū)oc體系結(jié)構(gòu)進(jìn)行自然和有效的描述。這樣,在嵌入式芯片設(shè)計(jì)領(lǐng)域,c++也可以施展拳腳。隨著嵌入式軟件功能的不斷增強(qiáng),通用計(jì)算機(jī)上普遍的操作系統(tǒng)也逐漸出現(xiàn)在嵌入式系統(tǒng)中,成為