C語言編程程序優(yōu)化方案,如何選擇一個ARM品牌核心處理器操作系統(tǒng)
C語言編程程序優(yōu)化方案
在C語言中,宏是產(chǎn)生內嵌代碼的唯一方法。對于嵌入式系統(tǒng)而言,為了能達到性能要求,宏是一種很好的代替函數(shù)的方法。
本文引用地址:http://2s4d.com/article/201710/365213.htm寫一個“標準”宏MIN ,這個宏輸入兩個參數(shù)并返回較小的一個:
錯誤做法:
#define MIN(A,B) ( A 《= B ? A : B )
正確做法:
#define MIN(A,B) ((A)《= (B) ? (A) : (B) )
對于宏,我們需要知道三點:
?。?)宏定義“像”函數(shù);
?。?)宏定義不是函數(shù),因而需要括上所有“參數(shù)”;
(3)宏定義可能產(chǎn)生副作用。
下面的代碼:
least = MIN(*p++, b);
將被替換為:
( (*p++) 《= (b) ?(*p++):(b) )
發(fā)生的事情無法預料。
因而不要給宏定義傳入有副作用的“參數(shù)”。
使用寄存器變量
當對一個變量頻繁被讀寫時,需要反復訪問內存,從而花費大量的存取時間。為此,C語言提供了一種變量,即寄存器變量。這種變量存放在CPU的寄存器中,使用時,不需要訪問內存,而直接從寄存器中讀寫,從而提高效率。寄存器變量的說明符是register。對于循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內反復使用的變量均可定義為寄存器變量,而循環(huán)計數(shù)是應用寄存器變量的最好候選者。
(1) 只有局部自動變量和形參才可以定義為寄存器變量。因為寄存器變量屬于動態(tài)存儲方式,凡需要采用靜態(tài)存儲方式的量都不能定義為寄存器變量,包括:模塊間全局變量、模塊內全局變量、局部staTIc變量;
?。?) register是一個“建議”型關鍵字,意指程序建議該變量放在寄存器中,但最終該變量可能因為條件不滿足并未成為寄存器變量,而是被放在了存儲器中,但編譯器中并不報錯(在C++語言中有另一個“建議”型關鍵字:inline)。
下面是一個采用寄存器變量的例子:
/* 求1+2+3+….+n的值 */
WORD AddiTIon(BYTE n)
{
register i,s=0;
for(i=1;i《=n;i++)
return s;
}
本程序循環(huán)n次,i和s都被頻繁使用,因此可定義為寄存器變量。
內嵌匯編
程序中對時間要求苛刻的部分可以用內嵌匯編來重寫,以帶來速度上的顯著提高。但是,開發(fā)和測試匯編代碼是一件辛苦的工作,它將花費更長的時間,因而要慎重選擇要用匯編的部分。
在程序中,存在一個80-20原則,即20%的程序消耗了80%的運行時間,因而我們要改進效率,最主要是考慮改進那20%的代碼。
嵌入式C程序中主要使用在線匯編,即在C程序中直接插入_asm{ }內嵌匯編語句:
/* 把兩個輸入?yún)?shù)的值相加,結果存放到另外一個全局變量中 */
int result;
void Add(long a, long *b)
{
_asm
{
MOV AX, a
MOV BX, b
ADD AX, [BX]
MOV result, AX
}
}
利用硬件特性
首先要明白CPU對各種存儲器的訪問速度,基本上是:
CPU內部RAM 》 外部同步RAM 》 外部異步RAM 》 FLASH/ROM
對于程序代碼,已經(jīng)被燒錄在FLASH或ROM中,我們可以讓CPU直接從其中讀取代碼執(zhí)行,但通常這不是一個好辦法,我們最好在系統(tǒng)啟動后將FLASH或ROM中的目標代碼拷貝入RAM中后再執(zhí)行以提高取指令速度;
對于UART等設備,其內部有一定容量的接收BUFFER,我們應盡量在BUFFER被占滿后再向CPU提出中斷。例如計算機終端在向目標機通過RS-232傳遞數(shù)據(jù)時,不宜設置UART只接收到一個BYTE就向CPU提中斷,從而無謂浪費中斷處理時間;
如果對某設備能采取DMA方式讀取,就采用DMA讀取,DMA讀取方式在讀取目標中包含的存儲信息較大時效率較高,其數(shù)據(jù)傳輸?shù)幕締挝皇菈K,而所傳輸?shù)臄?shù)據(jù)是從設備直接送入內存的(或者相反)。DMA方式較之中斷驅動方式,減少了CPU 對外設的干預,進一步提高了CPU與外設的并行操作程度。
活用位操作
使用C語言的位操作可以減少除法和取模的運算。在計算機程序中數(shù)據(jù)的位是可以操作的最小數(shù)據(jù)單位,理論上可以用“位運算”來完成所有的運算和操作,因而,靈活的位操作可以有效地提高程序運行的效率。舉例如下:
/* 方法1 */
int i,j;
i = 879 / 16;
j = 562 % 32;
/* 方法2 */
int i,j;
i = 879 》》 4;
j = 562 - (562 》》 5 《《 5);
對于以2的指數(shù)次方為“*”、“/”或“%”因子的數(shù)學運算,轉化為移位運算“《《 》》”通??梢蕴岣咚惴ㄐ省R驗槌顺\算指令周期通常比移位運算大。
C語言位運算除了可以提高運算效率外,在嵌入式系統(tǒng)的編程中,它的另一個最典型的應用,而且十分廣泛地正在被使用著的是位間的與()、或(|)、非(~)操作,這跟嵌入式系統(tǒng)的編程特點有很大關系。我們通常要對硬件寄存器進行位設置,譬如,我們通過將AM186ER型80186處理器的中斷屏蔽控制寄存器的第低6位設置為0(開中斷2),最通用的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp ~INT_I2_MASK);
而將該位設置為1的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp | INT_I2_MASK);
判斷該位是否為1的做法是:
#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
if(wTemp INT_I2_MASK)
{
… /* 該位為1 */
}
上述方法在嵌入式系統(tǒng)的編程中是非常常見的,我們需要牢固掌握。
總結
在性能優(yōu)化方面永遠注意80-20準備,不要優(yōu)化程序中開銷不大的那80%,這是勞而無功的。
宏定義是C語言中實現(xiàn)類似函數(shù)功能而又不具函數(shù)調用和返回開銷的較好方法,但宏在本質上不是函數(shù),因而要防止宏展開后出現(xiàn)不可預料的結果,對宏的定義和使用要慎而處之。很遺憾,標準C至今沒有包括C++中inline函數(shù)的功能,inline函數(shù)兼具無調用開銷和安全的優(yōu)點。
使用寄存器變量、內嵌匯編和活用位操作也是提高程序效率的有效方法。
除了編程上的技巧外,為提高系統(tǒng)的運行效率,我們通常也需要最大可能地利用各種硬件設備自身的特點來減小其運轉開銷,例如減小中斷次數(shù)、利用DMA傳輸方式等。
如何選擇一個ARM品牌核心處理器操作系統(tǒng)
ARM公司是世界最大的半導體知識產(chǎn)權供應商,擁有全球近200家半導體公司的客戶。目前,80%的GSM手機,99%的CDMA手機,以及未來3G手機也都是采用基于ARM核的嵌入式處理器。提供研究分析信息的機構Gartner Inc,2003年6月份統(tǒng)計,2002年ARM在全球半導體IP供應商中排名第一,占市場份額的19.8%,銷售收入達1.8億美圓,比2001年增長10%。
目前,除了像TI OMAP, Intel的Xscale和Motorola的IMX系列這樣的移動終端處理器采用ARM核外,也還有象Samsung, Atmel, Sharp, OKI和Philip等半導體公司設計一些通用ARM核的處理器,可以廣泛應用在各種嵌入式系統(tǒng),現(xiàn)在在市場上看到比較多的有S3C44B0, 4510,2410,AT91系列和Intel PXA255等。
ARM處理器是32位設計,同時也配置了16位指令集,軟件可以以16位編碼與等價32位代碼相比,占用的存儲器空間可以節(jié)省約35%。ARM處理器目前有ARM7, ARM9, ARM9E, ARM10, ARM11系列產(chǎn)品和來自合作伙伴Intel Xscale和Strong ARM系列ARM7,適合于中低端的網(wǎng)絡設備、終端、各種通用型的嵌入式應用和工業(yè)控制等領域。ARM9適合于智能手機、PDA和先進的控制管理和儀器儀表應用。Intel Xscale系列產(chǎn)品提供了高性能價格比、低功耗、適用于智能無線終端、PDA、家庭網(wǎng)絡和網(wǎng)絡存儲器設備等應用。
嵌入式操作系統(tǒng)是ARM CPU重要的軟件基礎
從8位/16位單片機發(fā)展到以ARM CPU核為代表的32位嵌入式處理器,嵌入式操作系統(tǒng)將替代傳統(tǒng)的由手工編制的監(jiān)控程序或調度程序,成為重要的基礎組件。嵌入式操作系統(tǒng)可以提供ARM CPU核和外設的設備管理,如核的初始化、MMU(內存管理單元)、定時器、中斷、串口、SPI、GPIO、以太網(wǎng)、圖形接口等,嵌入式操作系統(tǒng)提供任務調度、內存管理、中斷處理、同步互斥機制、文件系統(tǒng)和網(wǎng)絡功能,更重要的一點是嵌入式操作系統(tǒng)對應用程序可以起到屏蔽的作用,讓應用程序員面向操作系統(tǒng)級開發(fā)應用軟件,并易于在不同的基于ARM核的嵌入式處理器上移植。
嵌入式操作系統(tǒng)都一般具有一定的實時性,易于裁剪和伸縮,可以適合于從ARM7到Xscale各種ARM CPU和各種檔次的應用,嵌入式操作系統(tǒng)可以使用廣泛流行的ARM開發(fā)工具,如ARM公司的SDT/ADS和Real View、IAR EW等也可以使用開源的軟件,如GCC/GDB、KDE或Eclipe開發(fā)環(huán)境,市場上還有商業(yè)廠商的專用的開發(fā)工具,如Tornado、μC/View、μC/KA、CODE/Lab、Metroworks等。
本文就目前國內在ARM CPU上廣泛采用的三種嵌入式操作系統(tǒng)做個分析,μC/OS-II、μCLinux和嵌入式Linux。后兩種同屬于Linux,前者是針對沒有MMU的微處理器,如ARM7 TDMI核,后者可適用于絕大多數(shù)有MMU的微處理器中,如ARM920T,當然,文章也會涉及到其它支持ARM CPU的嵌入式操作系統(tǒng)。
μC/OS-II嵌入式實時內核
由Jean Labrosse先生著,邵貝貝老師翻譯的《嵌入式實時操作系統(tǒng)μC/OS-II》先后由電力出版社(第一版)和航空航天大學出版社出版(第二版)發(fā)行了近萬冊,相信有數(shù)以千計的學生、老師和工程師正在使用μC/OS-II,在過去的一年中(2003),在《電子產(chǎn)品世界》、《電子設計應用》和《單片機和嵌入式系統(tǒng)應用》等雜志和各種學術會議上的有μC/OS-II相關論文就有幾十余篇。全世界數(shù)百種設備已經(jīng)在使用μC/OS-II,包括如手機、路由器、不間斷電源、飛行器、醫(yī)療設備和工業(yè)控制設備,在中國也已經(jīng)有包括香港權智,首科希電,安控科技在內的10余家公司購買了產(chǎn)品授權。
μC/OS-II已經(jīng)有ARM7TDMI、ARM9和Strong ARM等各種ARM CPU的移植,支持包含Atmel、Hynix、Intel、Motorola、Philips、Samsung、Sharp等公司的ARM核的CPU。μC/OS-II的移植也相當容易,與CPU相關的代碼包裝在三個文件中,os_cpu.h,os_cpu_a.asm,os_cpu_c.c,而且Jean Labrosse先生的應用筆記AN-1011和AN-1012對ARM7、AN-1337對ARM9的移植過程都做了詳細的說明。
μC/OS-II有60余個系統(tǒng)調用,覆蓋任務、定時器、信號量、事件標志、郵箱、隊列和內存管理,已經(jīng)包含了傳統(tǒng)嵌入式操作系統(tǒng)內核(如PSOS,VRTX)的功能,還支持互斥型信號量(Mutual Exclusion Semaphone),這是90年代的嵌入式操作系統(tǒng)內核,如Vxworks和VRTXsa才有的技術。
μC/OS-II因為是可搶占的實時內核,所以μC/OS-II與商業(yè)嵌入式實時內核在性能上沒有什么差異,μC/OS-II沒有用戶態(tài)和內核態(tài),任務(線程)或中斷和任務切換的響應可以很快,主要是和不同的ARM CPU相關的。最新的2.7x版本還增加了算法以避免在移植中修改OSINTCEXSW()中的堆棧指針。這樣可以保證μC/OS-II在不同的CPU上運行更穩(wěn)定,移植更方便。
總之,μC/OS-II是一個非常容易學習(有一本很好的講解很清楚的書),結構簡單,功能完備和實時性很強的嵌入式操作系統(tǒng)內核,適合于各種嵌入式應用以及大專院校教學和科研。
μC/OS-II目前除了內核外還有商業(yè)化文件系統(tǒng)μC/FS,圖形系統(tǒng)μC/GUI以及任務調試工具μC KA和μC View,但是μC/OS-II自己目前還沒有TCP/IP(有計劃)如果需要,可以購買商用的TCP/IP,如InterNiche (www.iniche.com),但價格還是很貴,免費的TCP/IP項目如LWIP (http://www.sics.se/~adam/lwip/),但無論在功能還是穩(wěn)定性與商業(yè)代碼無法比擬,這可能也是目前μC/OS-II的弱點。
最后需要說明,μC/OS-II不是免費軟件,任何人學習使用μC/OS-II需要購買《嵌入式實時操作系統(tǒng)μC/OS-II》一書,使用了μC/OS-II的產(chǎn)品需要購買產(chǎn)品生產(chǎn)授權,購買了此授權的還可以得到開發(fā)期間的技術支持和升級服務。
μCLinux操作系統(tǒng)
μCLinux是Linux小型化后,適合于沒有MMU的微處理器芯片而裁剪成的小型化Linux操作系統(tǒng),在ARM CPU系列中,ARM7 TDMI,ARM940T等ARM核的CPU產(chǎn)品,如果希望使用Linux操作系統(tǒng),只能用μCLinux,當然,μCLinux也支持Motorola Dragonball, Coldfire等其它中低端嵌入式處理器。
μCLinux保持了傳統(tǒng)Linux操作系統(tǒng)的主要特性,包括穩(wěn)定、強大的網(wǎng)絡和文件系統(tǒng)的支持,μCLinux裁剪了大量的Linux內核以縮小尺寸,適合象512k RAM,1M Flash這樣小容量,低成本的嵌入式系統(tǒng)。
μCLinux的項目是由Linux 2.0.38內核開始的,第一個項目是Motorola 68EZ328,目前已經(jīng)有2.4 Linux支持的一些移植的版本,如S3C2500, 44B0等ARM芯片,這些,你可以在μCLinux的官方網(wǎng)站www.uclinux.org上找到,μCLinux近期主要是在發(fā)展各種2.4.x版本的移植,以期跟上Linux社會主流的發(fā)展趨勢(因為今年Linux 2.6將開始成為主流的內核)。
μCLinux系統(tǒng)小型化的另一個重要原因是采用了μCLib庫替代Linux的Glib庫,使用μCLib可以大大減少應用程序的代碼尺寸,對于中小型嵌入式應用,μCLib功能可以滿足需要,所以目前即使是某些采用Linux 2.4內核的嵌入式LINUX系統(tǒng)也采用μCLib庫的做法。μCLinux中,由于沒有內存保護機制,應用代碼一般采用靜態(tài)連接的方式,而且在μCLinux中采用Flat文件執(zhí)行格式(Linux是Coff或Elf格式), μCLinux和應用代碼都可以支持固化,存儲在Flash存儲介質中,不需象Linux需要經(jīng)過一次Flash到RAM的拷貝。所有這些,使得μCLinux更象傳統(tǒng)意義上的嵌入式操作系統(tǒng)。
μCLinux主要是針對沒有MMU的嵌入式處理器開發(fā)設計,那么它也失去了有MMU所帶來的Linux操作系統(tǒng)的特色,比如,上面已經(jīng)提到的靜態(tài)加載(Linux支持動態(tài)應用的加載),μCLinux對內存操作是直接的物理內存,這樣,任何程序的異常都可能導致內核崩潰,μCLinux采用Vfovk(),支持多進程,但需要父子進程協(xié)調同步,μCLinux的文件系統(tǒng)相對比較陳舊,支持的CPU和參考設計還比較少,社區(qū)的發(fā)展和維護也相對緩慢。更重要的是,在國內外沒有一家軟件公司有商業(yè)化的μCLinux軟件產(chǎn)品和服務支持,目前μCLinux官方網(wǎng)站還很少看見象IBM、Intel這樣的巨型公司身影,只有2~3家小型的硬件或方案提供商,這對于商業(yè)化的產(chǎn)品開發(fā)中采用是有一定的風險。
嵌入式Linux操作系統(tǒng)
我們這里要討論的是可以嵌入在ARM CPU上的,有MMU功能的Linux操作系統(tǒng),也可以稱是嵌入式Linux操作系統(tǒng)。芬蘭學生Linux Torvalds在91年寫完第一個Linux版本時,怎樣也無法想象到今天Linux在全世界范圍被廣泛注目和應用。嵌入式系統(tǒng)作為Linux應用的一個重要領域,由于它的廣泛性和多樣化正在迅速發(fā)展。
和微軟的軟件不一樣,Linux不是由一家公司所擁有、維護開發(fā)的,Linux在市場有多種發(fā)行版本,所有發(fā)行版本都包含一樣的Linux內核、基本工具和應用,不同的發(fā)行版本主要是在附加的工具鏈、應用、配置以及各種內核補丁上有所不同。嵌入式Linux主要是在實時性增強、內核精簡和裁減、支持多種CPU結構(如ARM CPU)等方面做了改進和提高。
使用Linux在嵌入式系統(tǒng)中有兩種途徑。
第一是用戶自己裝配(稱為DIY內核),你可以在www.kernel.org找到全部Linux代碼,或直接到ARM CPU的源代碼樹下www.ARMLinux.org.uk找到你需要的Linux版本在ARM下的移植,或者某些半導體公司,如三星、Motorola也在自己的網(wǎng)站或銷售自己的ARM評估板的時候送給一張CD,里面含有一個可以支持他們評估板的最小Linux內核系統(tǒng)。如果這個最小內核沒有包含GCC/GDB工具鏈,你可能還要到GNU的網(wǎng)站下載全部的源代碼,然后再編譯生成你需要版本的ARM工具鏈和應用程序庫,這個過程是相當耗時和困難的。還需要指出,這種DIY內核的配置,添加應用和驅動程序也是不標準的和復雜的,這是嵌入式系統(tǒng)的特殊性所在,比如說,有的基于ARM的應用是網(wǎng)絡上的小型互連設備,他需要多個以太網(wǎng)、USB主機、小型的NOR Flash文件系統(tǒng),而一個ARM手持終端,它關心的是LCD的觸屏、紅外或藍牙的接口、USB用戶端、快速的啟動,動態(tài)的電源管理和NADA FLASH,這樣,你就需要在數(shù)十家Linux相關網(wǎng)站下載各種補丁,應用和工具,把它們和你拿到的這個內核進行反復的編譯和調試,確信它們之間以及它們在你所用的ARM CPU硬件評估板上是穩(wěn)定可靠工作的,這個過程是在沒有任何技術支持下完成的。當然,如果可以從某家半導體公司或開源的網(wǎng)站能夠得到“最小內核”,它所包含的組件(如驅動、應用和文件系統(tǒng))和你的應用近似,而且代碼是可靠的,或者你及時正確得到Linux網(wǎng)友的指導,那么你是幸運的。據(jù)說,有一個著名的電信設備制造商花了2年的時間和150萬美圓在一個項目中開發(fā)自己的Linux,而且最后還不得不停止了。
第二是選擇一個商業(yè)的嵌入式Linux操作系統(tǒng)平臺。商業(yè)化的嵌入式Linux版本是針對嵌入式處理器,如ARM所優(yōu)化設計的,已經(jīng)支持了各種半導體廠家的評估板和主要的設備驅動,商業(yè)化的嵌入式Linux包含了文件系統(tǒng)、應用、實時性擴展和技術支持培訓服務,現(xiàn)今國外著名的商業(yè)化嵌入式Linux產(chǎn)品有:MontaVista Linux, Bluecat Linux, TImesys Linux, Metrowork Linux(原Lineo), Vlinux(韓國)和Redhat Linux等,國內也有紅旗、中軟、新華嵌入式Linux。
MontaVista Linux是MontaVista軟件公司于99年推出的,它是目前全球最優(yōu)秀的嵌入式Linux操作系統(tǒng)和工具供應商,MontaVista在嵌入式Linux的實時性、交叉開發(fā)工具、高可用性、動態(tài)電源管理等Linux技術要點方面具有世界領先地位。
MontaVista Linux最版本是3.1,采用Linux 2.4.20,針對8種CPU系列(包含ARM和Xscale)優(yōu)化定制的商業(yè)化版本,包含了最新O(1)實時調度器,可搶占的內核,微秒級的高分辨定時器,基于Eclipse的DevRocket開發(fā)環(huán)境,支持應用、內核和文件系統(tǒng)(固化)的配置和調試,以及測試和分析工具,純Windows, Linux和Solaris開發(fā)主機,80余種評估板和應用系統(tǒng)的設備驅動支持。
選擇象MontaVista Linux這樣商業(yè)化嵌入式Linux,可以讓用戶把時間和資金放在應用軟件和特定的硬件接口和設備驅動程序,使用商業(yè)嵌入式Linux,可以得到一定時間(一般是1年)的技術支持,升級和培訓(這很重要,因為Linux是每天都在變化的)。
商業(yè)嵌入式Linux目前除國內的產(chǎn)品外,價格還是很昂貴的,根據(jù)配置和服務時間,大約從幾千到幾萬美圓,多數(shù)國內用戶從資金和心理上還很難承受,商業(yè)嵌入式Linux開發(fā)工具相對于Microsoft和象Tornado/VXWORK的開發(fā)工具,在易于使用和豐富性方面還待于提高和改進。
同作為Linux操作系統(tǒng),我是推薦使用帶有MMU 的 Linux ,而不是μCLinux,因為絕大多數(shù)新的ARM CPU 都是AMR9核,他們都帶有MMU 了,無論是開放源碼的LINUX 社區(qū)還是商業(yè)的嵌入式LINUX 公司的支持和維護都比μCLinux,要好,快和豐富的多。
結束語
前面我們對三種在ARM CPU上較為流行的嵌入式操作系統(tǒng)作了詳細的分析,在進入一個總結之前,我還想提到幾個在國際上很有名氣的嵌入式操作系統(tǒng),它們是Windriver公司的Vxworks、ATI的Nucleus、日本人的iTron和WinCE。
Windriver的Vxworks在兩三年前曾經(jīng)是最具影響力的嵌入式操作系統(tǒng),幾乎主要的通信設備制造商都是采用PowerPC+Vxworks這種組合,但是在ARM CPU上,Vxworks的應用并不多見;ATI的Nucleus(現(xiàn)在已經(jīng)是Mentor的嵌入式部門)曾經(jīng)作為最有名氣的源代碼、沒有版稅的嵌入式操作系統(tǒng)而在北美和亞洲臺灣流行,最成功的設計范例是各種GSM移動電話,Nucleus只是一個實時內核,用戶需要再購買它的TCP/IP,GUI,文件系統(tǒng)和設備驅動才能形成一個功能完整的嵌入式系統(tǒng),這使它在近些年失去了優(yōu)勢;日本人的iTron是在日本幾乎家喻戶曉的嵌入式內核,標準的編程接口、低廉的價格(1~3千美圓)、沒有版稅、支持幾乎所有的CPU(尤其是支持很多日本的CPU),但在除日本之外,iTron好象毫無建樹;微軟的WinCE,幾乎所有高端PDA都是采用它,它們使用的是 Xscale或ARM9這樣的CPU,但微軟只是關心有產(chǎn)量象PC一樣巨大的嵌入式設備制造商,所以他并沒有把自己的WinCE象Linux一樣易于移植到不同的CPU和增加設備驅動程序,微軟更愿意象Windows一樣自己把所有事情做好,你只是拿去用好了,如果你沒有相當?shù)募墑e,很難獲得它的個性化定制服務。
最后我們歸納一下選擇一個合適的ARM CPU的嵌入式操作系統(tǒng)的幾個重要因素。
第一是應用。如果你想開發(fā)的嵌入式設備是一個和網(wǎng)絡應用密切相關或者就是一個網(wǎng)絡設備,那么你應該選擇用嵌入式Linux或者μCLinux,而不是μC/OS-II,因為Linux不僅為你集成了TCP/IP協(xié)議,還有很豐富的其它網(wǎng)絡協(xié)議,如DHCP Server,PPPoe,webserver等等。
第二是實時性。沒有一個絕對的數(shù)字可以告訴你什么是硬實時,什么是軟實時,它們之間的界限也是十分模糊的,這與你選擇什么樣的ARM CPU,它的主頻,內存等參數(shù)有一定的關系,象Intel Xscale這樣的處理器,即使配合普通Linux的內核,內核的搶占延時最壞情況也只有1.743毫秒,而99.9%的情況是1.42毫秒,而如果你使用加入實時補丁等技術的嵌入式Linux如MontaVista Linux(2.4.17版本內核),最壞的情況只有436微秒,而99.9%的情況是195微秒,上面的數(shù)字以及考慮到最新的Linux在實時性方面的改進(如低延時O(1)調試器,微秒級的高分辨率POSIX定時器),嵌入式Linux可以適合于90~95%的各種嵌入式系統(tǒng)應用。當然,你如果希望更高數(shù)量級的實時響應,如高速的A/D轉換需要幾個微秒以內的中斷延時,要求一個毫秒級沒有DMA方式的異步串行實時處理器等類似的應用,可能是采用μC/OS-II是合適的。當然,你采用象Vxworks這樣傳統(tǒng)的嵌入式操作系統(tǒng)也可以滿足這樣的強實時性要求。
第三是開發(fā)工具。坦言說,目前μC/OS-II、μCLinux和嵌入式Linux的開發(fā)工具與商業(yè)嵌入式操作系統(tǒng)工具還有一些差距,目前在ARM CPU上廣泛流行和使用的是ARM公司SDT/ADS工具鏈,產(chǎn)品無論在功能、穩(wěn)定性和眾多的第三方廠商支持方面,都很好,唯一不足的是缺少對嵌入式操作系統(tǒng)的支持,SDT/ADS的升級產(chǎn)品RealView計劃支持GCC和嵌入式Linux,但目前還沒有看到,μC/OS-II可以使用ARM SDT/ADS,但沒有OS調試功能。如果希望支持OS調試,可以使用IAR或Nohan調試器,μCLinux的調試除GDB外還有第三方調試器,并配合Cygwin形成Windows環(huán)境下μCLinux開發(fā)環(huán)境,象Aiji的 Spider和Micetek 的Hitool。
第四是你所選擇的ARM CPU和參考板,象ARM7TDMI和ARM940T(如S3C2500/2510)核是不能使用嵌入式Linux(MMU),如果你想用Linux,只能用μCLinux,如果你想用Vxworks,你需要了解一下提供評估板的公司是否有BSP(板支持包),Vxworks自己只有少數(shù)ARM公司評估板的支持。
最后是價格和技術服務。中國工程師的薪水大約是歐美日等國的十分之一,所以在考慮購買商業(yè)嵌入式操作系統(tǒng)時,會遇到是買還是自己做的問題,這是很正常的,尤其是在采用開放源代碼技術時,這個問題就就更加突出。有一點需要注意的是,有些產(chǎn)品如Vxworks是既按用戶數(shù)(有License保護鎖)收取開發(fā)費,也按你產(chǎn)品售出的實際數(shù)量收取每個Vxworks軟件運行的版稅。μC/OS-II只是收取每種產(chǎn)品一次性版稅(不限數(shù)量)。Nucleus和Threadx是一次性收取開發(fā)加上生產(chǎn)的費用。Linux無論是μCLinux還是嵌入式Linux(即使是商業(yè)版本象MontaVista Linux)是不收版稅的,商用嵌入式Linux是以服務費或訂閱方式收取開發(fā)時的費用。很明顯,國外產(chǎn)品價格是貴一些(主要是他們人力成本高),但不能不承認他們在嵌入式操作系統(tǒng)的技術已經(jīng)遠遠走在了前方。值得提醒大家的是在ARM開發(fā)工具和評估板的眾多國內供應商中,有不少已經(jīng)做了開放源碼操作系統(tǒng)的移植和示范性的Demo,但應該注意他們多數(shù)不具有維護和支持操作系統(tǒng)平臺的能力和經(jīng)驗,過多地依賴他們是有風險的。
品種眾多,價格適宜的ARM CPU加上開放源碼嵌入式操作系統(tǒng)為中國嵌入式系統(tǒng)和設備制造商的發(fā)展創(chuàng)造了一個有利的時機,正確迅速地使用這些技術,可以加快我們具有競爭力的新一代電子產(chǎn)品上市的時間和提高產(chǎn)品的檔次。
評論