μC/OS-II使用中的幾個(gè)熱點(diǎn)問題
——
μC/OS與μC/OS-II
μC/OS和μC/OS-II是專門為嵌入式應(yīng)用設(shè)計(jì)的實(shí)時(shí)操作系統(tǒng)內(nèi)核。注解得很詳細(xì)的源代碼有200頁,其中95%左右是用C語言寫的,與CPU類型相關(guān)的代碼用8088的匯編寫成,不超過200行。μC/OS最早的版本叫做 COS,關(guān)于 μCOS的論文,分兩期連載在美國的“嵌入式系統(tǒng)編程”(Embedded System Programming)雜志的1992年第5期和第6期上, COS的源碼放在該雜志網(wǎng)頁的留言版(BBS)上供用戶下載。1992年末,美國的R&D出版社出版了“Micro C/OS The Real-Time Kernel”一書,書中附有一張軟盤,是μC/OS的源代碼。該書后來成為一本暢銷書,發(fā)行量突破了15000。μC/OS是基于優(yōu)先級(jí)的可剝奪型(Preemptive)實(shí)時(shí)內(nèi)核,可裁剪、可固化。由于與硬件相關(guān)的代碼僅200行左右,并寫在兩個(gè)單獨(dú)的文件中,且注解很清楚,故很容易將 C/OS移植到其它類型的CPU上。
在后來的幾年中,用戶紛紛將μC/OS移植到了各種CPU上,如Motorola的68HC11、68HC1216、68K、CPU32、CPU32+、PowerPC等。Intel的80X86、奔騰、奔騰-II、8051、8052、MCS-251、80196、8096等;日立的64180、H8/3XX系列、SH系列;西門子的80C166和TriCore、ARM的ARM6、ARM7、Analog的AD21xx、TI的TMS320飛利浦的XA、三菱的M16、M32等等。應(yīng)用領(lǐng)域涵蓋了如照相機(jī)業(yè),醫(yī)療器械、音響設(shè)施,發(fā)動(dòng)機(jī)控制、網(wǎng)絡(luò)設(shè)備、高速公路電話系統(tǒng),自動(dòng)柜員機(jī)、工業(yè)機(jī)器人等。
到1998年,作者出了他的第二本書“μC/OS-II The Real-Time Kernel”,給μC/OS增加了一些新功能,對(duì)源碼進(jìn)行了整理,說明得更詳盡,書的厚度也增加了200頁,Jean J. Labrosse先生開通了μC/OS-II的商業(yè)網(wǎng)站,并不斷推出新版本。
使用許可證
μC/OS是完全免費(fèi)的,μC/OS的源碼可以免費(fèi)使用,但用戶不得以賣源碼來謀利。μC/OS的目標(biāo)代碼可以免費(fèi)地嵌入到用戶的產(chǎn)品中去,但用戶得標(biāo)明在產(chǎn)品中使用了μC/OS?!唉藽/OS The Real-Time Kernel”一書中所附的軟盤是版本1.08。由于μC/OS的商業(yè)價(jià)值得到了社會(huì)越來越多的認(rèn)可,高版本的μC/OS,即版本1.10以上不再是完全免費(fèi)的。 μC/OS的2.0版本就是μC/OS-II,最新的2.51版本的μC/OS-II目前售價(jià)55.95美元。
μC/OS-II的源碼和目標(biāo)碼可以在有資質(zhì)的大學(xué)中免費(fèi)提供給學(xué)生用于教學(xué)目的。而以盈利為目的的將μC/OS-II的目標(biāo)代碼嵌入到產(chǎn)品中去則應(yīng)得到“目標(biāo)代碼銷售許可證”。
就準(zhǔn)備從事嵌入式應(yīng)用開發(fā)工作的大學(xué)生、研究生而言,μC/OS-II無疑是一本極好的教材。對(duì)于從事嵌入式應(yīng)用開發(fā)工作的工程技術(shù)人員來說,μC/OS和μC/OS-II則是一件很實(shí)用的工具。
單片機(jī)的C編譯器
由于各公司出的CPU在硬件上有很大區(qū)別,要使用針對(duì)不同CPU的交叉編譯器,有的公司在推出CPU芯片時(shí)提供交叉C編譯器,而更多的情況是由第三方提供交叉C語言編譯器,編譯μC/OS或μC/OS-II必須有C語言的編譯器,對(duì)于C語言來說,一般是使用標(biāo)準(zhǔn)的ANSI的C,而功能強(qiáng)大的C編譯器不但提供C,還能提供視窗下的集成環(huán)境、CPU的純軟件仿真以及在線的源碼級(jí)調(diào)試工具。
一般情況下,交叉編譯器是要向第三方購買的,選擇C編譯器廠商時(shí),可參考μC/OS-II網(wǎng)絡(luò)上移植范例欄目,該欄目中說明了移植時(shí)所用的編譯器是什么公司的。
免費(fèi)的C編譯是Linux下的gcc。幾乎所有32位CPU都可以使用gcc交叉C編譯器。目前一些Windows環(huán)境下的軟件如Cygwin ASHWare等都允許在Windows環(huán)境下使用Linux的命令行方式,是不錯(cuò)的開發(fā)工具,但由于Linux下的應(yīng)用程序都相當(dāng)復(fù)雜,非計(jì)算機(jī)方面的高級(jí)專業(yè)人才難以掌握。Linux是自由軟件,版本也很多,有些版本不很穩(wěn)定,與手冊難以對(duì)應(yīng)。特別是遇到問題時(shí),非專業(yè)人士很難解決。
適宜使用的CPU與系統(tǒng)開銷
可以說凡是能夠使用C語言編程的CPU都可以使用μC/OS或μC/OS-II,在μC/OS-II.com網(wǎng)站上有移植范例,在移植μC/OS-II欄目下,總共有80余款,較μC/OS的移植范例多出幾倍。新出現(xiàn)的CPU不久后就能找到移植范例,以Motorola芯片為例,除前面提到的品種,68HC08、ColdFire、以及DSP568XX上都有運(yùn)行μC/OS-II的范例。
我們知道,在嵌入式應(yīng)用中使用實(shí)時(shí)操作系統(tǒng)是有系統(tǒng)資源開銷的,也就是額外的ROM/RAM開銷和CPU負(fù)荷。由于實(shí)時(shí)操作系統(tǒng)引起的CPU額外負(fù)荷一般在5%以下,故不成為使用中的問題,而對(duì)于單片機(jī),且工作在單片方式下,則要考慮由于引入操作系統(tǒng)帶來的存儲(chǔ)器開銷。由于目前單片機(jī)中FLASH的容量已經(jīng)可以做到幾十K乃至幾百K,而μC/OS-II的ROM開銷一般在3K到10K之間,故ROM的開銷對(duì)于單片類應(yīng)用也不成為問題。在單片方式下運(yùn)行μC/OS或μC/OS-II要考慮的是RAM的開銷,由于目前單片機(jī)片內(nèi)靜態(tài)隨機(jī)存儲(chǔ)器SRAM還不可能做得很大,一般只有幾百字節(jié)至十幾K,雖然我們也給出過在只有512字節(jié)的68HC08GP32上運(yùn)行 μC/OS-II的例子,但筆者認(rèn)為這只是一個(gè)用于學(xué)習(xí)的例子,可運(yùn)行的任務(wù)只有幾個(gè),可使用的操作系統(tǒng)的功能也少得可憐。筆者認(rèn)為,至少有2K的RAM空間,使用μC/OS或μC/OS-II才有意義。當(dāng)然如果嵌入式系統(tǒng)中使用了外擴(kuò)的RAM和ROM,使用實(shí)時(shí)操作系統(tǒng)則全然沒有問題。
基于μC/OS-II的應(yīng)用軟件
μC/OS和μC/OS-II僅僅是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,和商業(yè)實(shí)時(shí)操作系統(tǒng)軟件包比較起來,它缺少Utilities這一部分,如文件系統(tǒng)、遠(yuǎn)程函數(shù)調(diào)用庫、通信軟件庫。通信軟件包括:TCP/IP軟件庫、籃牙通信軟件庫、IrDA紅外通信軟件庫等。這一類軟件的解決途徑無非是兩個(gè),一個(gè)是買現(xiàn)成的,另一個(gè)途徑是自己寫。現(xiàn)成的第三方軟件廠商可以從μC/OS-II網(wǎng)頁上查到,如果用戶僅僅需要用單片機(jī)實(shí)現(xiàn)例如TCP/IP協(xié)議中的某些功能的話,自主開發(fā)并不很難。一個(gè)TCP/IP通信的庫,二進(jìn)制代碼一般有70K到80K。單片機(jī)系統(tǒng)只需要將其中一部分嵌入到系統(tǒng)中去。英國作者Jeremy Bentham在他的“嵌入式系統(tǒng)用TCP/IP瘦服務(wù)器” (TCP/IP Lean Web Server)一書中,提供了用PIC單片機(jī)實(shí)現(xiàn)TCP/IP協(xié)議的例子。所用的單片機(jī)片內(nèi)RAM只有348個(gè)字節(jié),TCP/IP通信程序也只有不到7K字節(jié),故參考別人做過的程序范例,自行開發(fā)這一類的應(yīng)用也是學(xué)習(xí)的極好過程。
c語言相關(guān)文章:c語言教程
評(píng)論