摘要:介紹了一種在嵌入式實時操作系統(tǒng)內(nèi)核(以下簡稱實時內(nèi)核)上實現(xiàn)RAM盤的方法,配合接受用戶命令的Shell任務(wù),可實現(xiàn)嵌入式系統(tǒng)的多任務(wù)動態(tài)加載和監(jiān)控,擴展了實時內(nèi)核的應(yīng)用領(lǐng)域。實時內(nèi)核采用目前十分流行的免費內(nèi)核μC/OS-Ⅱ,硬件不臺為通用現(xiàn)場總線控制器系統(tǒng)。
關(guān)鍵詞:μC/OS-Ⅱ內(nèi)核 嵌入式系統(tǒng) 通用現(xiàn)場總線控制器(GPFC) ColdFire
1 嵌入式RTOS
目前,嵌入式RTOS的應(yīng)用領(lǐng)域越來越廣泛。已經(jīng)有80多個RTOS廠商生產(chǎn)面向8位、16位、32位、甚至64位微處理器的RTOS產(chǎn)品。商業(yè)的實時操作系統(tǒng)如VxWorks,pSOS,VRTX,WindowsCE等功能完善,提供了完備的開發(fā)環(huán)境,但大多價格昂貴,不提供源代碼(即所謂的黑箱)。用戶不了解其工作機制,更不能進行修改和擴展。某些商業(yè)系統(tǒng)還要求用戶在產(chǎn)品投產(chǎn)后繼續(xù)支付軟件費用。這對于國內(nèi)的用戶開發(fā)中小應(yīng)用系統(tǒng)來說,是一項沉重的負擔。而采用開放源代碼的實時內(nèi)核不失為一種選擇。開放源代碼的另一個好處是用戶可以根據(jù)具體需要刪改和擴展功能。本文將以μC/OS-Ⅱ在通用網(wǎng)絡(luò)控制器上的應(yīng)用為例,說明開放源代碼的實時內(nèi)核在可擴展性方面的優(yōu)點,以及筆者在使用中的一些心得體會。
2 通用現(xiàn)場總線控制器
GPFC (General Purpose Field bus Controller)——通用現(xiàn)場總線控制器是用于加速器數(shù)據(jù)采集系統(tǒng)中的網(wǎng)絡(luò)控制器,由德國國家同步輻射實驗室(DESY)Dr.Clausen Matthias領(lǐng)導(dǎo)的研究小組開發(fā)。用于不同種類的現(xiàn)場總線、以太網(wǎng)之間的通訊控制,功能相當于不同類型子網(wǎng)之間的網(wǎng)關(guān)(關(guān)于GPFC的技術(shù)細節(jié),感興趣的讀者可以查詢DESY的主頁http://www.desy.de)。系統(tǒng)微控制器采用Motorola公司68K家庭的32位MCU ColdFire 5206E。在33MHz總線頻率下能達到17MIPS的處理能力。由于ColdFire將片選邏輯電路、總線控制器、DRAM控制模塊等全部集成在 MCU內(nèi)部,使得外轉(zhuǎn)帳電路室得十分簡單。系統(tǒng)配有32MB DRAM和1MB Flash RAM,并有兩個網(wǎng)絡(luò)接口A和B。該系統(tǒng)的硬件設(shè)計非常靈活,網(wǎng)絡(luò)接口配以不同的驅(qū)動電路,可支持以太網(wǎng)、CAN、Profibus、MIL1553等多種現(xiàn)場總線,實現(xiàn)網(wǎng)絡(luò)間的連接和控制。只要采用不同的網(wǎng)絡(luò)協(xié)議,就可以連接不同的子網(wǎng),實現(xiàn)不同的控制。GPFC配以不同的網(wǎng)絡(luò)模塊可以替代目前廣泛使用的VME工控系統(tǒng),由于舍棄了VME昂貴的機箱、總線板,大幅度減低了主機成本。GPFC系統(tǒng)結(jié)構(gòu)示意如圖1所示。
3 在GPFC上運行RTOS
GPFC 的系統(tǒng)軟件基于嵌入式實時操作系統(tǒng),國外是在VxWorks上開發(fā)的,主要是兩個獨立的任務(wù)分別處理兩個網(wǎng)絡(luò)接口的通訊協(xié)議。為了擴展GPFC的應(yīng)用范圍,系統(tǒng)軟件包中包含了各種可能用的網(wǎng)絡(luò)協(xié)議,都以獨立的任務(wù)形式存在。用不上的任務(wù)處于休眠狀態(tài),如果需要連接某種類型的網(wǎng)絡(luò),只要運行針對某種網(wǎng)絡(luò)協(xié)議的任務(wù)就行了。
VxWorks價格昂貴,在國內(nèi)買一套要幾十萬元人民幣。為了滿足國內(nèi)應(yīng)用要求,筆者希望尋找一種廉價的實時內(nèi)核,一方面可降低軟件方面的成本,同時可根據(jù)自己折需要定制軟件。經(jīng)過調(diào)研,決定采用當前十分流行的μC/OS-Ⅱ作為實時內(nèi)核。
μC/OS-Ⅱ是基于優(yōu)先級的搶占式實時多任務(wù)內(nèi)核,其絕大部分代碼是由C寫成的。目前已經(jīng)應(yīng)用于包括Motorola 68000系列,以及Intel 80x86等各種處理器上,在世界控制領(lǐng)域取得了一席之地。μC/OS-Ⅱ的可應(yīng)用領(lǐng)域非常廣闊,涵蓋了幾乎所有的實時應(yīng)用。μC/OS-Ⅱ是完全免費的,全部源代碼都可以從Internet上獲得。
μC/OS -Ⅱ是面向中小型嵌入式系統(tǒng)的。如果包含全部的功能模塊(信號量、消息郵箱、消息隊列及相關(guān)函數(shù)),編譯后的μC/OS-Ⅱ內(nèi)核大約有6KB;如果只保留最核心的代碼,則可壓縮到3KB,這使得μC/OS-Ⅱ可以用于更小模塊的應(yīng)用系統(tǒng)。同時,由于系統(tǒng)的可擴展性,稍加修改可以用于更大模塊的系統(tǒng)上。 RAM的占用與系統(tǒng)中的任務(wù)數(shù)有關(guān),任務(wù)的堆棧要占用大量的RAM空間,堆棧的大小取決于任務(wù)的局部變量、緩沖區(qū)大小及可能的中斷嵌套的層數(shù)。對于一般的中小系統(tǒng),任務(wù)堆棧可以取幾百字節(jié)到幾千字節(jié)。對于頻率中斷和高吞吐率的系統(tǒng),要為任務(wù)預(yù)留足夠的堆?臻g。本系統(tǒng)中為每個任務(wù)分配了512KB的堆棧文憑間,并有堆棧越界檢查。
采用μC/OS-Ⅱ所遇到的主要問題是μC/OS-Ⅱ本身不帶文件系統(tǒng),缺乏調(diào)試工具和手段。為了方便調(diào)試和日后的管理操作,基于μC/OS-Ⅱ的開放源代碼和可擴展性,筆者將 Linux的RAM盤、文件系統(tǒng)和用戶Shell移植到合并μC/OS-Ⅱ上并編寫了內(nèi)存管理模塊,實現(xiàn)內(nèi)存的動態(tài)分配和釋放。系統(tǒng)中運行的任務(wù)可以對 RAM盤進行文件操作,文件系統(tǒng)可以為任務(wù)保存數(shù)據(jù)并提供了統(tǒng)一的接口。通過Shell任務(wù),用戶可以登錄到系統(tǒng)中,運行或者掛起任務(wù),以處理不同的通訊協(xié)議,實現(xiàn)任務(wù)的動態(tài)管理。在調(diào)試過程中,可以通過命令查看各個任務(wù)的運行狀態(tài)。而任務(wù)以文件的形式保存在RAM盤中,不同種類的任務(wù)保存在不同的目錄中,方便了管理和維護。
4 RAM盤的擴展方法
RAM盤采用了和Linux EXT2系統(tǒng)類似的文件系統(tǒng)。EXT2是一種高效、安全的文件系統(tǒng)。圖2是EXT2的邏輯布局。[1] [2] [3] 下一頁





