很久沒寫過關(guān)于RTEMS的文章了,。很多朋友最近問我,,為什么選擇RTEMS,不選擇VxWorks,,你自己學(xué)習(xí)就算了,,為什么也要拉著別人搞RTEMS。
這些問題略微的有一些復(fù)雜,,我就專門寫篇文章來作答,。以前,,我做商業(yè)項(xiàng)目都是使用FreeRTOS和uC/OS-II的,, FreeRTOS和uC/OS-II都差不多,核心代碼不過幾千行,。突出的特點(diǎn)是,,好掌握,易上手,,在較短的時(shí)間內(nèi)就能上手開發(fā),。但是同時(shí)帶來一個(gè)問題,由于驅(qū)動(dòng)的缺乏,,不僅僅是缺乏驅(qū)動(dòng),,更缺的是,驅(qū)動(dòng)的統(tǒng)一框架,。所以設(shè)計(jì)驅(qū)動(dòng)的時(shí)候,,不僅僅是讓相關(guān)的設(shè)備能工作,更多的是要設(shè)計(jì)一個(gè)驅(qū)動(dòng)結(jié)構(gòu),。對(duì)于商業(yè)項(xiàng)目來講,,交付完成后都是需要維護(hù)的。自己設(shè)計(jì)的驅(qū)動(dòng)結(jié)構(gòu),,風(fēng)險(xiǎn)和成本都比較高,。需要很長(zhǎng)的時(shí)間才能穩(wěn)定下來。尤其是在需要實(shí)時(shí)性的場(chǎng)合,。 uC/OS-II的API不豐富也是個(gè)棘手的大問題,,我們的項(xiàng)目中,uC/OS-II,,我們用C++封裝了大量的系統(tǒng)函數(shù),,便于系統(tǒng)的使用,。因?yàn)轫?xiàng)目的軟件架構(gòu)是UML用面向?qū)ο蟮乃枷雽懙谩@?C語言可以實(shí)現(xiàn)面向?qū)ο蟮乃枷爰軜?gòu)設(shè)計(jì),,但是要運(yùn)用大量的技巧,,需要用函數(shù)指針實(shí)現(xiàn)多態(tài)和繼承。這個(gè)對(duì)編程人員來說,,無端端需要了更高的技術(shù)水平,。為了降低對(duì)開發(fā)人員的技術(shù)要求,使用C++做開發(fā),,與C相比,,除運(yùn)行效率略有些損失外,帶來更多的好處,。C++有嚴(yán)格的語法保證繼承和多態(tài),,這個(gè)是C里面沒有的。架構(gòu)設(shè)計(jì)可直接轉(zhuǎn)化為C++的框架代碼,,可節(jié)省不少的人力物力,。然而,uC/OS-II是C函數(shù)編寫的,,做C++擴(kuò)展,,封裝設(shè)計(jì)也需要不少的工作。這些都是uC/OS-II不具備的,。 我們的系統(tǒng)頗為復(fù)雜,,需要使用到TCP/IP,uC/OS-II有系統(tǒng)自帶的uTCP/IP,;選用了這個(gè)協(xié)議棧噩夢(mèng)才剛剛開始,。本以為這個(gè)協(xié)議棧很穩(wěn)定,在使用期間,,才發(fā)現(xiàn)協(xié)議棧有很多非常深層次的問題,。1.首先有些層次支持IP分包,又有些層次不支持分包,;2.TCP連接在使用一段時(shí)間后,,隨機(jī)出現(xiàn)沒有FIN信號(hào)和SYN信號(hào),導(dǎo)致和PC系統(tǒng)斷鏈接,;3.多臺(tái)計(jì)算機(jī)(超過十臺(tái))同時(shí)ping協(xié)議棧,,協(xié)議棧會(huì)掛掉,無法恢復(fù),;4.使用大包ping協(xié)議棧,,也會(huì)出現(xiàn)奇奇怪怪的問題。5.也許是我們定制水平不夠,,系統(tǒng)連續(xù)跑到7天以上后,,會(huì)造成硬件的MAC層會(huì)隨機(jī)掛掉,,我們用同樣的linux代碼測(cè)試,是沒有這樣的問題,。驅(qū)動(dòng)也是極力模仿linux,,但是問題解決不掉,還是會(huì)出現(xiàn)這樣的情況,。 最后頭疼的問題,,是uC/OS-II的授權(quán)問題,人家是開源的,,商業(yè)用是要收費(fèi)的,。說實(shí)話,用起來沒有問題,,付錢我倒沒啥意見,,關(guān)鍵是問題一堆,也沒啥付錢的動(dòng)力和想法,。失望之余,,我開始尋找新的替代操作系統(tǒng),一句話,,就是要成熟穩(wěn)定可靠,。VxWorks倒是不錯(cuò)的選擇,,但是授權(quán)費(fèi)用太貴了,,會(huì)把我們的利潤(rùn)榨干;沒辦法干這種事情,,企業(yè)要生存的,。于是找到了RTEMS,這個(gè)操作系統(tǒng)本身的性能超過了VxWorks,,不過是2005年以前測(cè)得,,現(xiàn)在還沒有大牛比較過。 我第一接觸到RTEMS之后,,感覺到的是“強(qiáng)大”! 緊接著就是“麻煩”!說強(qiáng)大,,發(fā)展時(shí)間長(zhǎng),代碼質(zhì)量高,,系統(tǒng)相當(dāng)之穩(wěn)定,。我們移植到uC/OS-II相同的硬件平臺(tái)上,RTEMS自帶的BSD協(xié)議棧表現(xiàn)的相當(dāng)出色,,隨便Ping,,隨便telnet,運(yùn)行了十幾天,,相當(dāng)之穩(wěn)定,。絲毫沒有頹勢(shì),;API函數(shù)相當(dāng)?shù)呢S富,也有一套成熟的驅(qū)動(dòng)結(jié)構(gòu),。(和Linux比起來還是有些簡(jiǎn)陋,,但是足夠用了)完善的C++封裝。同時(shí) RTEMS是開源免費(fèi),,使用的發(fā)布協(xié)議是使用了RTEMS,,你高興公開你的代碼你就公開,不高興公開就不公開(嚴(yán)格的來說不是這樣,,但最終的效果是一樣的),。 欣喜之余,問題來了,,麻煩,!由于使用GNU的工具鏈,對(duì)于使用windows下集成開發(fā)環(huán)境的團(tuán)隊(duì)來說,,那是相當(dāng)?shù)穆闊?。不僅僅因?yàn)樾枰b虛擬機(jī)在linux下開發(fā),rtems的調(diào)試跟蹤,,代碼撰寫等等,,都需要用單獨(dú)的工具完成,對(duì)人員的素質(zhì)要求很高,。細(xì)節(jié)也非常的多,,一不小心,埋下伏筆,,呵呵,,那就是給自己找麻煩了。再者,,就是RTEMS的學(xué)習(xí)資料少得可憐,,中國(guó)實(shí)際上潛在的研究人員非常多,但他們不愿意也沒時(shí)間把自己的研究公布出來,;國(guó)外的話只有官方的文檔有些介紹,。且介紹中的疏漏相當(dāng)?shù)亩啵枰獫撔牡难芯俊?畢竟全世界專職維護(hù)RTEMS的人就那么幾個(gè),,需要用google summer code推動(dòng)一些周邊項(xiàng)目,,并不像VxWorks那樣面面俱到的商業(yè)項(xiàng)目,什么都是完美的,。也正因?yàn)檫@些瑕疵,,更顯得RTEMS的可貴。 對(duì)于我來說,選擇RTEMS,,只是想應(yīng)用于我的項(xiàng)目,,我的產(chǎn)品。然而,,從學(xué)習(xí)的角度來說,,比那些集成化的工具來說,能學(xué)習(xí)到更多的東西,,從深層次了解嵌入式系統(tǒng)的開發(fā),。IAR EWARM、RVDS這樣的工具用熟了,,不代表就可以把GNU玩轉(zhuǎn)了,,但把GNU玩轉(zhuǎn)了,集成環(huán)境一定是沒有問題的,。所以,,對(duì)廣大的學(xué)生朋友來說,RTEMS是一個(gè)不錯(cuò)的,,提升自己全方面能力的東西,。不過,學(xué)習(xí)難度稍微有些大了,,介紹資料又少,,的確是有問題。 前陣子,,看到一個(gè)笑話是,,上世紀(jì)80年代只有資本主義才能救中國(guó),上世紀(jì)90年代只有中國(guó)才能就亞洲,,現(xiàn)在只有中國(guó)才能救世界,。中國(guó)由中國(guó)制造變?yōu)橹袊?guó)創(chuàng)造,,需要更多的軟實(shí)力,;中國(guó)如火如荼的物聯(lián)網(wǎng)技術(shù),通訊模塊,、操作系統(tǒng),、芯片都是國(guó)外的,中國(guó)搞的是物聯(lián)網(wǎng)協(xié)議規(guī)范,,試問,,你都沒有自己的東西,憑什么人家要尊重你的游戲規(guī)則,?所謂的物聯(lián)網(wǎng),,只不過是中國(guó)人的一廂情愿。說不好聽的,掩耳盜鈴而已,。 國(guó)家的富強(qiáng)需要方方面面的成功,,需要方方面面的積累。我們現(xiàn)在不看別人如何成功,,把一款操作系統(tǒng)學(xué)好,,應(yīng)用好。應(yīng)用到我們自己的系統(tǒng)中去,,提升我們方方面面的品質(zhì),。為國(guó)家的建設(shè)添磚加瓦,為自己的人生也添磚加瓦,。 |
|