C++作為一種編程語言,從其誕生之日至今,已經(jīng)在軟件業(yè)的歷史上扮演了至關(guān)重要的角色。它強大的語言功能和靈活的語言機制是無數(shù)程序員為之折腰。而C++中蘊含的OO,GP等編程思想,更是潛移默化的影響了軟件的架構(gòu)方法。從這個層面上講,C++的影響已經(jīng)不僅僅是一門編程語言這樣簡單。然而隨著Internet的發(fā)展及其帶來的B/S架構(gòu)軟件的興起。新興的Java/C#/VB.NET等基于虛擬機語言及Ruby/Groovy等動態(tài)語言作為后起之秀,憑借其獨有的快速開發(fā)、簡單易用等特性,開始逐漸挑戰(zhàn)C++的地位,在企業(yè)計算領(lǐng)域占據(jù)了越來越重要的地位。拋開企業(yè)計算,我們轉(zhuǎn)換舞臺,來看一看C++語言在另一塊群雄紛爭的領(lǐng)域上的身影。 嵌入式系統(tǒng)編程 “嵌入式”是一個很大的話題,它涉及的領(lǐng)域相當(dāng)廣泛,涵蓋了硬件設(shè)計與軟件開發(fā)。大致來說,嵌入式系統(tǒng)有三個特點:嵌入性,專用性和計算性。嵌入性表示系統(tǒng)通常需要嵌入到其他對象系統(tǒng)中,小到計算器、MP3,大到導(dǎo)彈、航天飛機等等。因此必須滿足對象系統(tǒng)的環(huán)境要求,如物理環(huán)境(小型)、電氣環(huán)境(可靠)、成本(價廉)等要求。專用性表示系統(tǒng)的軟硬件要有可裁剪性;滿足對象要求的最小軟、硬件配置等。計算性表示嵌入式系統(tǒng)必須是能滿足對象系統(tǒng)控制要求的計算機系統(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)境。可以預(yù)言,在現(xiàn)在及將來的很長一段時間內(nèi),很多嵌入式軟件將繼續(xù)在資源受限的環(huán)境下開發(fā)。在資源受限的環(huán)境下,代碼的體積、執(zhí)行的效率通常都是程序員最關(guān)注的因素。正因如此,長期以來,C語言甚至匯編語言在嵌入式領(lǐng)域占據(jù)了非常廣闊的市場。C++語言之所以沒有從一開始就在嵌入式領(lǐng)域遍地開花,也不是沒有原因的。 首先,還是由嵌入式應(yīng)用種類繁多的特點決定,我們永遠也不會用ISO C++在四位芯片上編程控制彩燈閃爍(當(dāng)然這也不是不可以),這種工作只需要幾條匯編語句就可以完成,用C++無易于“高射炮打蚊子”。更重要的一點,ISO C++標準定義了C++的語法規(guī)范,但是并沒有定義其相對應(yīng)的開銷,F(xiàn)實情況是,在一些編譯器的具體實現(xiàn)上,有一些ISO C++的語法特性會導(dǎo)致代碼體積膨脹和執(zhí)行效率的低下。這導(dǎo)致了一些關(guān)注嵌入式系統(tǒng)效率與性能的開發(fā)人員不愿意使用C++作為嵌入式軟件的開發(fā)語言。 讓C++為嵌入式系統(tǒng)服務(wù) 雖然使用C++有可能會對嵌入式軟件帶來額外的開銷,但是這并沒有影響C++在嵌入式軟件中的推廣,在使用C++的過程中,揚長避短,發(fā)揮C++在封裝、繼承等方面的優(yōu)勢,避開可能導(dǎo)致效率與性能問題的語言特性,依然可以開發(fā)出優(yōu)秀的嵌入式軟件。下圖列出了C++語言特性及其在OOP中的重要性和實現(xiàn)的成本之間的關(guān)系。使用C++在資源受限的環(huán)境中編程的時候,需要對這些語言特性進行合理的均衡與取舍。 既然ISO C++中有一些語言特性有可能會導(dǎo)致性能和代碼體積的問題,如果能對ISO C++進行改造使其適用嵌入式環(huán)境,那自然是再好不過的了(雖然這有可能會導(dǎo)致一些鐵桿ISO C++支持者的不滿)。早在上個世紀90年代,就已經(jīng)成立了嵌入式C++技術(shù)委員會(Embedded C++ Technical Committee),該委員會致力于定義一套適用于嵌入式軟件開發(fā)的C++語言規(guī)范。在1998年,Embedded C++規(guī)范正式出爐(我們簡稱之為EC++),我們可以從EC++的官方網(wǎng)站上查看這份規(guī)范,地址是http://www.caravan.net/ec2plus。 大致來講,EC++是標準C++語言的一個子集,它從C++語法中剔除了一些實現(xiàn)復(fù)雜和會導(dǎo)致額外負擔(dān)語法元素。 例如:多重繼承與虛基類、RTTI、異常處理、模版、命名空間等等。同時,在標準庫方面,EC++規(guī)范也做了刪減,STL和Stream等被剔除了。在EC++規(guī)范出爐之后。很多嵌入式廠商都推出了符合EC++規(guī)范的編譯器,在嵌入式領(lǐng)域有一定的影響。 C++新的應(yīng)用 近幾年來,嵌入式系統(tǒng)領(lǐng)域又有了新的發(fā)展。首先,隨著手機、PDA等消費性電子產(chǎn)品的飛速增長,嵌入式系統(tǒng)地市場規(guī)模在飛速的擴大,這個領(lǐng)域吸引了越來越多的人的眼光。其次,隨著Internet的廣為流行,越來越多的智能嵌入式應(yīng)用場景需要互聯(lián)網(wǎng)的支持,這也從另外一個角度推進了嵌入式系統(tǒng)硬件功能的增強和軟件復(fù)雜性的提高。 在這新一波的浪潮中,C++語言又有了新的用武之地。在嵌入式SoC設(shè)計方面,通常需要對SoC體系結(jié)構(gòu)進行建模以進行體系性能的分析及軟硬件聯(lián)合設(shè)計。VHDL等設(shè)計語言可以實現(xiàn)這些功能。而在1999年OSCI組織推出的SystemC是建立在C++基礎(chǔ)上的開放的系統(tǒng)級設(shè)計語言,能夠?qū)oC體系結(jié)構(gòu)進行自然和有效的描述。這樣,在嵌入式芯片設(shè)計領(lǐng)域,C++也可以施展拳腳。隨著嵌入式軟件功能的不斷增強,通用計算機上普遍的操作系統(tǒng)也逐漸出現(xiàn)在嵌入式系統(tǒng)中,成為了嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)種類繁多。在功能、性能、應(yīng)用領(lǐng)域等都有很大的差異。因此嵌入式領(lǐng)域沒有也不可能會像桌面計算機一樣有某一款操作系統(tǒng)取得壟斷地位。 常見的嵌入式操作系統(tǒng)有VxWorks、嵌入式Linux、Windows CE等等。在嵌入式操作系統(tǒng)領(lǐng)域,尤其是高端消費電子產(chǎn)品專用的操作系統(tǒng)領(lǐng)域,C++語言大有可為之處,很多嵌入式操作系統(tǒng)都使用C++搭建,并且對用戶以C++的形式提供引用程序編寫接口。在這方面,Symbian OS是一個很好的例子,Symbian OS是由愛立信、諾基亞、摩托羅拉等共同出資開發(fā),其目的是為智能手機提供一個操作系統(tǒng)平臺。Symbian OS的API均以C++類的方式提供,應(yīng)用開發(fā)人員可以使用C++開發(fā)基于Symbian OS的手機上的應(yīng)用程序。軟件巨頭微軟在這方面自然也不甘示弱,其推出的嵌入式操作系統(tǒng)Windows CE以及構(gòu)建在Windows CE之上的Windows Mobile手機、PDA平臺憑借其一貫的易用性在市場上占據(jù)了一席之地。而Windows CE配套的開發(fā)環(huán)境Embedded Visual C++與桌面開發(fā)使用的Visual C++在用戶界面、使用習(xí)慣上都一脈相承,并且Embedded Visual C++集成了桌面開發(fā)中常用的MFC、ATL等C++庫。使很多桌面應(yīng)用程序開發(fā)人員可以容易的過渡到基于Windows CE的嵌入式開發(fā)平臺上來。 在國內(nèi)方面,科泰世紀公司自主研發(fā)的和欣(Elastos)嵌入式操作系統(tǒng)不但完全使用C++語言構(gòu)建,而且還引入了ISO C++中沒有的元數(shù)據(jù)等概念,并允許使用C++語言開發(fā)自描述的構(gòu)件。這樣運行時Reflection、組件自描述、二進制繼承等優(yōu)秀的特性再也不是java/C#等語言的“專利”了。甚至在一些電子玩具上,也不乏C++的身影。BrickOS是一個運行在樂高(Lego,全球著名的玩具制造商)玩具機器人上的開源嵌入式操作系統(tǒng),旨在為玩具機器人提供C/C++的編程環(huán)境。我們可以從SourceForge網(wǎng)站上查找BrickOS的相關(guān)信息。在BrickOS下,就可以使用C++語言編程控制機器人身上的傳感器等部件,使機器人完成踢足球、賽跑等復(fù)雜的動作(學(xué)C++要從娃娃抓起)。 結(jié)論 C++語言在誕生之日起就被設(shè)計成一種通用(General Purpose)的編程語言,適用于不同的應(yīng)用場景。經(jīng)過二十年的發(fā)展,C++在服務(wù)器端,桌面工作站的程序編寫中都有了廣泛的應(yīng)用。隨著近年來移動設(shè)備與嵌入式系統(tǒng)的迅速崛起,C++在移動與嵌入式領(lǐng)域也有廣泛的用武之地。而C++作為系統(tǒng)級編程語言的一些優(yōu)越的語言特性,在嵌入式設(shè)備上可以更好的得以體現(xiàn)?梢灶A(yù)見,隨著嵌入式產(chǎn)業(yè)的飛速發(fā)展及C++語言的不斷完善,在嵌入式領(lǐng)域C++必將有更輝煌的前景。 |