疏國會,金 鑫
SHU Guo-hui, JIN Xin
(安慶職業(yè)技術(shù)學院,安慶 246008)
嵌入式系統(tǒng)具有很高的先進性,它綜合了多種高新技術(shù),包括計算機技術(shù)和電子技術(shù)以及半導體技術(shù)等,是多種技術(shù)結(jié)合的產(chǎn)物。日常生活的點滴都滲透了嵌入式系統(tǒng),大大方便了人們的生活、豐富了人們的精神世界。它的應(yīng)用領(lǐng)域非常廣闊,大到工業(yè)、服務(wù)業(yè),小到人們的日常娛樂活動,并且隨著經(jīng)濟的發(fā)展,嵌入式系統(tǒng)的應(yīng)用范圍更加擴大。從專業(yè)的角度我們定義嵌入式系統(tǒng)為把計算機作為基礎(chǔ)技術(shù),將應(yīng)用作為中心,可裁減軟硬件的,具備應(yīng)用系統(tǒng)要求的功能、功耗、成本等要求的專用計算機系統(tǒng)。嵌入式系統(tǒng)有三個主要的特征,分別是較強的專用性、精簡的系統(tǒng)和具有較小的內(nèi)核。嵌入式系統(tǒng)對軟件的要求很高,符合要求的軟件必須具有很高的高實時性,另外軟件必須具備高質(zhì)量和可靠性。我們需要專門的工具和環(huán)境對嵌入式系統(tǒng)進行開發(fā)[1]。
嵌入式μC/OS的體系結(jié)構(gòu)比較簡單,所以大部分使用的是C語言進行編程,大部分的友好界面的編譯器都能夠生成編譯的目標代碼,友好的編譯器有Borland C、Keil等。嵌入式μC/OS的體系的內(nèi)核可以很小,小到幾十KB的都有,所以它在移植時支持體系結(jié)構(gòu)多種多樣的微處理器。這樣留給用戶的工作就很少了,由于源代碼是開放的這就方便了學習。μC/OS-II有幾大組成部分,分別是:核心部分(OSCore.c),這是操作系統(tǒng)的處理核心,它又包括了多個組成部分,主要有操作系統(tǒng)初始化、中斷進出的前導、任務(wù)調(diào)度等。任務(wù)處理部分(OSTask.c)的操作是用來完成任務(wù)的,它又包括了建立任務(wù)、刪除任務(wù)、掛起任務(wù)、恢復任務(wù)等。時鐘部分(OSTime.c)主要用來完成延時任務(wù)等。
嵌入式系統(tǒng)包括兩大部分,分別是硬件部分和軟件部分。嵌入式系統(tǒng)的主要特性如下:
1)其系統(tǒng)采用的是公開的源代碼,這也是它最大的特點,在這一點上超越了其它的商業(yè)實時內(nèi)核。源代碼開放的好處是為在不同硬件平臺上移植操作系統(tǒng)提供了很大的便利。
2)嵌入式系統(tǒng)的可移植性能非常好,μC/OS的嵌入式系統(tǒng)源代碼大量采用了ANSI C進行編寫,所以具有很強的可移植性,另外采用匯編語言編寫了和微處理硬件有關(guān)的部分,這樣的目的是方面了μC/OS的嵌入式系統(tǒng)的移植,可以適應(yīng)8、16、32位等。
3)嵌入式應(yīng)用和μC/OS的聯(lián)系十分緊密,因為后者是適應(yīng)前者而設(shè)計的,所以可固化。開發(fā)者需要擁有一些固化手段,包括編譯、下載等就可以使μC/OS嵌入到產(chǎn)品中。
4)可以進行裁減,對于μC/OS的嵌入式系統(tǒng)中不被需要的東西可以進行裁減,只選取有用的應(yīng)用程序,這樣一來μC/OS所需的存儲空間就會得到釋放。
5)μC/OS的嵌入式系統(tǒng)的另一個特色就是占先式和多任務(wù)。級最高的任務(wù)在μC/OS的嵌入式系統(tǒng)中是被優(yōu)先運行的,不過輪轉(zhuǎn)法的任務(wù)調(diào)度還是不被支持的,實時內(nèi)核是完全占先式的[2]。
6)其它特性,包括系統(tǒng)服務(wù)、穩(wěn)定性、可確定性等都是μC/OS的嵌入式系統(tǒng)具有很大吸引力的原因,對于安全要求很高的系統(tǒng)來說μC/OS的嵌入式系統(tǒng)是一個不錯的選擇。另外值得一提的是μC/OS中每個任務(wù)有獨立的棧,對于任務(wù)的獨立??臻g是允許的[3]。
在嵌入式系統(tǒng)的開發(fā)之前我們需要構(gòu)建一個平臺進行開發(fā),μC/OS系統(tǒng)并不提供開發(fā)平臺,它提供的只是調(diào)度任務(wù)的內(nèi)核。內(nèi)核的作用是提供軟件系統(tǒng)的基礎(chǔ),如果想開發(fā)一個實用完整的操作系統(tǒng)需要首先進行μC/OS的移植,將其移植到微處理器上之后擴展操作系統(tǒng),然后得到一個符合標準的操作系統(tǒng)之后才能對應(yīng)用程序進行開發(fā)。
微處理器上移植有μC/OS是內(nèi)核正常運轉(zhuǎn)的前提,只有內(nèi)核正常運行起來才能進一步擴展。μC/OS進行移植的例子不少了,所以可修改現(xiàn)有的這些移植代碼,這需要結(jié)合自己選擇的微處理器。微處理器需要滿足一定條件才能夠進行μC/OS的移植,例如C編譯器可產(chǎn)生重入編碼、允許打開和中斷C編譯器等。
本文中的例子是S a m s u n g公司的ARM7TDMI,通過它來進行μC/OS的移植,其中移植主要是對OS-CPU.H.OS、OS-CPU-A.ASM和OS-CPU-C.C這三個文件的數(shù)據(jù)和參數(shù)進行改寫,目的就是進行移植。
2.1.1 對OS-CPU-C.C進行修改
所有和移植有關(guān)聯(lián)的C函數(shù)都在OS-CPU-C.C中,和操作系統(tǒng)相關(guān)的6個函數(shù)編寫語言為C語言。這6個函數(shù)分別是5個鉤子函數(shù)和一個堆棧初始化,后者是必要的函數(shù),剩下的5個函數(shù)需要聲
明,不過任何代碼可以省略。
2.1.2 對OS-CPU-A.ASM的修改
OS-CPU-A.ASM中的4個關(guān)聯(lián)處理器的函數(shù)由匯編語言編寫,這4個函數(shù)是OSStartHighRdy()、OSCtxSw()、OSTickISR()、OSInitCtxSw()。這4個函數(shù)各有分工,例如可以運行優(yōu)先級別的最高級的任務(wù)的函數(shù)是OSStartHighRdy();當前任務(wù)TCB的地址可以由LDRr4.addr-OSTCBCur.獲得;LDRsp[r5]可以切換到新堆棧。再編寫幾個相關(guān)函數(shù)就完成了OS-CPU-A.ASM的移植工作。
2.1.3 修改OS-CPU.H
設(shè)置OS-CPU.H代碼和ARM具有相關(guān)性,并設(shè)置數(shù)據(jù)類型和編譯器保持相關(guān)性。
對ARM中的數(shù)據(jù)類型進行定義:
#de fi ne unsigned char BOOLEAN;
#de fi ne unsigned char INT8U /*8位無符號整數(shù)*/
#de fi ne signed char INT8S /*8位有符號整數(shù)*/
#de fi ne unsigned char INT16U /*16位無符號整數(shù)*/
#de fi ne signed int INT8S /*16位有符號整數(shù)*/
#de fi ne unsigned long INT32U /*32位無符號整數(shù)*/
#de fi ne signed long INT32S /*32位有符號整數(shù)*/
#de fi ne fl oat FP32 /*單精度浮點數(shù)*/
#de fi ne double FP64 /*雙精度浮點數(shù)*/
定義16位的ARM的數(shù)據(jù)類型為typed unsigned int OS-STK。
μC/OS只有完成了以上三個方面的移植才能夠在ARM的微處理器上運行正常。完成移植工作后需要劃分系統(tǒng)任務(wù)、配置存儲的空間和實現(xiàn)任務(wù)的調(diào)度[4]。
μC/OS是一個內(nèi)核,它可以執(zhí)行實時多任務(wù),但是僅僅有μC/OS還是不夠的,不能實現(xiàn)完整的嵌入式系統(tǒng),如果想擁有完整實用的操作系統(tǒng)還需要進行除了移植以外的擴展工作。擴展指的是文件系統(tǒng)的建立和建立外部設(shè)備驅(qū)動、對有關(guān)的API函數(shù)進行規(guī)范化、GUI函數(shù)的創(chuàng)建等等。
表1 用戶程序結(jié)構(gòu)
μC/OS系統(tǒng)是沒有文件系統(tǒng)的,而嵌入式系統(tǒng)是需要使用文件系統(tǒng)的,這就意味著我們要建立一個文件系統(tǒng)。文件系統(tǒng)的建立過程是首先對文件系統(tǒng)進行初始化,接下來打開一個系統(tǒng)的指定文件,然后對文件進行讀取和寫入,最后關(guān)閉文件,將緩沖釋放,這就是實現(xiàn)文件系統(tǒng)的過程。實現(xiàn)文件系統(tǒng)的過程中必須要首先用intOSFile()函數(shù)來對系統(tǒng)文件進行初始化,這樣做的目的是分配合理的文件結(jié)構(gòu)空間。系統(tǒng)的文件打開采用OpenOSFile()來打開,對打開模式進行指定然后進行FILE結(jié)構(gòu)的創(chuàng)建,分配文件讀取的緩沖區(qū)。文件的緩沖區(qū)數(shù)據(jù)由ReadOSFile()來直接進行讀取,如果數(shù)據(jù)為空那么就對FAT進行訪問,在文件緩沖區(qū)進行下一個簇的讀取。WriteOSFile()負責在指定的文件中寫入緩沖區(qū)[5]。
μC/OS是目前流行的、十分優(yōu)秀的嵌入式操作系統(tǒng),它有眾多的優(yōu)點,比如實時性好并且內(nèi)存的需求很小、具有較好的移植性等。這些優(yōu)點都能夠使開發(fā)的周期減少,對于開發(fā)嵌入式系統(tǒng)的應(yīng)用程序是十分有利的。在新世紀嵌入式系統(tǒng)的發(fā)展尤為迅速,隨著嵌入式系統(tǒng)的快速發(fā)展μC/OS的應(yīng)用前景也會越來越廣闊[6]。
[1] 陳渝,李明,楊曄.源碼開放的嵌入式系統(tǒng)軟件分析與實踐—基于SkyEye和ARM開發(fā)平臺[M].中國電力出版社.2004.
[2] Bruce Powel Douglass,柳翔.嵌入式與實時系統(tǒng)開發(fā)[M].中國電力出版社.2005.
[3] 毛德操,胡希明.嵌入式系統(tǒng)—采用公開源代碼和Strong ARM/Xscale處理器[M].清華大學出版社,2003.
[4] 王田苗.嵌入式系統(tǒng)設(shè)計與實例開發(fā)[M].清華大學出版社,2002.
[5] 楊柳,盧清萍.嵌入式系統(tǒng)與Nios[J].安徽工程科技學院學報(自然科學版);2005,(02).
[6] 白智國,王芳,馮丹.嵌入式系統(tǒng)移植問題的研究[J].計算機工程與科學.2005,(06).