胡永祥
中圖分類號(hào):TP31文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1673-0992(2009)12-077-01
摘要:針對(duì)高等職業(yè)技術(shù)學(xué)院嵌入式系統(tǒng)實(shí)驗(yàn)和專業(yè)建設(shè)的實(shí)際需要而進(jìn)行的。論文對(duì)μC/OS-II的內(nèi)核數(shù)據(jù)結(jié)構(gòu)、運(yùn)行機(jī)制以及μC/OS-II操作系統(tǒng)在S3C44B0X上的移植過(guò)程進(jìn)行了詳細(xì)的討論。
關(guān)鍵詞:嵌入式系統(tǒng);ARM;μC/OS-II操作系統(tǒng);S3C44B0X
一、嵌入式系統(tǒng)介紹
1.概念 嵌入式系統(tǒng),通常是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件的應(yīng)用系統(tǒng),是將系統(tǒng)的軟件與硬件一體化。從技術(shù)方面來(lái)看,嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ)的,并且軟、硬件可裁減的,能滿足應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等指標(biāo)嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。它可以實(shí)現(xiàn)對(duì)設(shè)備的控制、監(jiān)視或管理等功能。從系統(tǒng)方面來(lái)看,嵌入式系統(tǒng)是設(shè)計(jì)完成復(fù)雜功能的硬件和軟件,并使其緊密耦合在一起的計(jì)算機(jī)系統(tǒng)。
2.組成
嵌入式系統(tǒng)通常由嵌入式系統(tǒng)硬件和嵌入式系統(tǒng)軟件兩大部分組成,其中嵌入式系統(tǒng)硬件包括:嵌入式處理器、嵌入式外圍設(shè)備、大容量存儲(chǔ)器等;嵌入式系統(tǒng)軟件包括嵌入式操作系統(tǒng)和嵌入式應(yīng)用軟件等幾部分組成。
二、實(shí)驗(yàn)系統(tǒng)硬件結(jié)構(gòu)
圖1實(shí)驗(yàn)系統(tǒng)硬件結(jié)構(gòu)圖
Figure 1 Figure of experiment system hardware
三、交叉開(kāi)發(fā)環(huán)境
(一)交叉開(kāi)發(fā)環(huán)境介紹
嵌入式系統(tǒng)交叉開(kāi)發(fā)環(huán)境是指編譯、鏈接、調(diào)試嵌入式應(yīng)用軟件的環(huán)境,一般包括交叉編譯器、交叉調(diào)試器和系統(tǒng)仿真器。其中交叉編譯器用于在宿主機(jī)上生成能在目標(biāo)機(jī)上運(yùn)行的代碼,交叉調(diào)試器和系統(tǒng)仿真器用于在宿主機(jī)與目標(biāo)機(jī)間完成嵌入式軟件的調(diào)試。
采用宿主機(jī)/目標(biāo)機(jī)模式開(kāi)發(fā)嵌入式應(yīng)用軟件時(shí),首先架構(gòu)一臺(tái)服務(wù)器,每個(gè)開(kāi)發(fā)者從客戶端使用Telnet登陸到這臺(tái)服務(wù)器,目標(biāo)機(jī)系統(tǒng)也連到同一局域網(wǎng)內(nèi)。在服務(wù)器上交叉編譯生成目標(biāo)文件,通過(guò)FTP傳到開(kāi)發(fā)者的PC機(jī),然后通過(guò)串口或網(wǎng)絡(luò)下載到目標(biāo)機(jī)的特定位置上,在操作系統(tǒng)的支持下利用交叉調(diào)試器進(jìn)行分析調(diào)試,最后目標(biāo)機(jī)脫離宿主機(jī)單獨(dú)運(yùn)行。
(二)創(chuàng)建交叉編譯環(huán)境
常用的交叉開(kāi)發(fā)工具是GNU工具鏈,目前能夠支持X86、ARM、MIPS和PowerPC等多種處理器。GCC交叉開(kāi)發(fā)環(huán)境中,arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。以linux-2.4.21和arm-linux-gcc-3.3為例:
1.解壓Linux內(nèi)核linux-2.4.21.tar.gz,放在//usr/local/arm中
2.解壓gc。編譯器arm-linux-gcc-3 .3.tar.bz2,放在/usr/local/arm中
3.安裝arm-elf-binutils-2.11-S.i386.rmp, arm-elf-gcc-3.3-2.i386.rpm
4.設(shè)置環(huán)境變量,存在//etc/profile文件中,以保證每次進(jìn)入模擬Linux環(huán)境時(shí),這些變量都生效。
三、μC/OS-II 在ARM-S3C44B0X 上的移植
(一)什么是移植
所謂移植,指的是一個(gè)操作系統(tǒng)可以在某個(gè)微處理器或者微控制器上運(yùn)行。雖然μC/OS-II的大部分源代碼是用C語(yǔ)言寫(xiě)成的,仍需要用C語(yǔ)言和匯編語(yǔ)言完成一些與處理器相關(guān)的代碼。比如:μC/OS-II在讀寫(xiě)處理器、寄存器時(shí)只能通過(guò)匯編語(yǔ)言來(lái)實(shí)現(xiàn)。μC/OS-II在設(shè)計(jì)的時(shí)候就已經(jīng)充分考慮了可移植性,因此移植還是比較容易的。
μC/OS-II進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的CPU寄存器存放到此任務(wù)的堆棧中,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,運(yùn)行另一個(gè)任務(wù)。所以,寄存器的入棧和出棧是μC/OS-II多任務(wù)調(diào)度的基礎(chǔ)。下面介紹如何把μC/OS-II移植到S3C44B0X芯片上。
(二)μC/OS-II在ARM上的移植實(shí)現(xiàn)
實(shí)際上,μC/OS-II可以簡(jiǎn)單地看作是一個(gè)多任務(wù)調(diào)度器,在這個(gè)任務(wù)調(diào)度器上添加了與多任務(wù)操作系統(tǒng)相關(guān)的一些系統(tǒng)服務(wù),如信號(hào)量、郵箱等。其90%的代碼是用C語(yǔ)言寫(xiě)的,可以直接移植到有C語(yǔ)言編譯器的處理器上。移植工作主要都集中在多任務(wù)切換的實(shí)現(xiàn)上,因?yàn)檫@部分代碼用來(lái)保存和恢復(fù)CPU現(xiàn)場(chǎng),部分不能用C語(yǔ)言寫(xiě)的代碼就用匯編語(yǔ)言完成。
μC/OS-II的全部源代碼量大約是6000-7000行,共15個(gè)文件。將μC/OS-II移植到ARM處理器上,需要修改三個(gè)與ARM體系結(jié)構(gòu)相關(guān)的文件,代碼量大約是500 行。我們使用ARMSDT作為編譯器,移植μC/OS-II主要包括以下幾項(xiàng)內(nèi)容:
(三)設(shè)置 OS_CPU.H中與處理器和編譯器相關(guān)的代碼
1.與編譯器相關(guān)的數(shù)據(jù)類型
我們的處理器上的堆棧成員是16位的,所以將OS_TSK 聲明為無(wú)符號(hào)整形數(shù)據(jù)類型。所有的任務(wù)堆棧都必須用 OS_TSK 聲明數(shù)據(jù)類型。
2.OS_ENTER_CRITICAL()和 OS_EXIT_CRITICAL()
μC/OS-II定義了兩個(gè)宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)禁止和允許中斷,需要先禁止中斷訪問(wèn)代碼的臨界區(qū),訪問(wèn)完畢后重新允許中斷。
3.OS_STK_GROWTH
絕大多數(shù)的微處理器和微控制器的堆棧是從上往下長(zhǎng)的。但是某些處理器是用另外一種方式工作的。μC/OS-II被設(shè)計(jì)成兩種情況都可以處理,在結(jié)構(gòu)常量OS_STK_GROW中指定堆棧的生長(zhǎng)方式就可以了,OS_STK_GROWTH為0表示堆棧從下往上長(zhǎng),為1表示堆棧從上往下長(zhǎng)。
4.編寫(xiě) 10 個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)
(1)OSTaskStkInit( )
(2)OSTaskCreateHook( )
(3)OSTaskDelHook( )
(4)OSTaskSwHook( )
(5)OSTaskStatHook( )
(6)OSTimeTickHook( )
(7)OSTaskIdleHook( )
(8)OSTCBInitHook( )
(9)OSInitHookBegin( )
5.用匯編語(yǔ)言編寫(xiě) 4 個(gè)與處理器相關(guān)的函數(shù)(OS_CPU_A.S)
μC/OS-II的移植還要求編寫(xiě)4個(gè)簡(jiǎn)單的匯編語(yǔ)言函數(shù):
(1)OSStartHighRdy( ):運(yùn)行優(yōu)先級(jí)最高的就緒任務(wù),函數(shù)首先必須調(diào)用OSTaskSwHook( ),并且設(shè)置 OSRunning為TRUE,然后切換到優(yōu)先最高的任務(wù)。
(2)OSCtxSw( ):任務(wù)級(jí)的任務(wù)切換函數(shù),任務(wù)級(jí)的切換是通過(guò)發(fā)軟中斷命令或依靠處理器執(zhí)行陷阱指令來(lái)完成的,中斷服務(wù)程序,或異常處理例程的向量地址必須指向OSCtxSw( )。 (3) OSIntCtxSw( ):中斷級(jí)的任務(wù)切換函數(shù),這個(gè)函數(shù)在 ISR 中用來(lái)執(zhí)行任務(wù)切換功能的。
(4)UCOS_IRQHandler( ):中斷服務(wù)程序,這個(gè)函數(shù)主要處理 IRQ 中斷。
完成了上述工作以后,μC/OS-II就可以正常運(yùn)行在ARM處理器上了。
四、結(jié)論
嵌入式實(shí)驗(yàn)/開(kāi)發(fā)系統(tǒng)使用的硬件平臺(tái),包括處理器、存儲(chǔ)器、串行通信接口、以太網(wǎng)接口,平臺(tái)的硬件核心為SAMSUNG公司的S3C44B0X芯片,平臺(tái)的軟件核心為μC/OS-II,μC/OS-II是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它包含了任務(wù)調(diào)度、任務(wù)管理、事件管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能,是一個(gè)基于優(yōu)先級(jí)調(diào)度的搶占式實(shí)時(shí)內(nèi)核,并在這個(gè)內(nèi)核上提供最基本的系統(tǒng)服務(wù),例如信號(hào)量、郵箱、消息隊(duì)列、內(nèi)存管理、中斷管理等。雖然μC/OS-II并不是一個(gè)商業(yè)的實(shí)時(shí)操作系統(tǒng),但μC/OS-II的穩(wěn)定性和實(shí)用性卻被數(shù)百個(gè)商業(yè)級(jí)的應(yīng)用所驗(yàn)證,其應(yīng)用領(lǐng)域包括便攜式電話、運(yùn)動(dòng)控制卡、自動(dòng)支付終端、交換機(jī)等。
ARM平臺(tái)是目前使用廣泛的主流的嵌入式處理器體系結(jié)構(gòu)。本論文主要是針對(duì)高等職業(yè)技術(shù)學(xué)院的嵌入式系統(tǒng)實(shí)驗(yàn)和專業(yè)建設(shè)的需要進(jìn)行的。通過(guò)努力,現(xiàn)在實(shí)驗(yàn)系統(tǒng)的嵌入式系統(tǒng)實(shí)驗(yàn)已經(jīng)展開(kāi),系統(tǒng)可以穩(wěn)定的工作。
參考文獻(xiàn)
[1]周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M] .北京:北京航空航天大學(xué)出版社,2005,1
[2] 田澤.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M]. 北京:北京航空航天大學(xué)出版社,2005
[3]Steve Furber. ARM SoC體系結(jié)構(gòu)[M]. 北京:北京航空航天大學(xué)出版社,2002
[4]Jean J.Labrosse著.邵貝貝等譯.μC/OS-II-源碼公開(kāi)的實(shí)時(shí)嵌入式操作系統(tǒng) [M].北京:北京航空航天大學(xué)出版社,2003.3
[5]周立功.ARM微控制器基礎(chǔ)與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2003.11
[6]Suwartadi,Eka;Gunawan,Candra;Setijadi P,Ary;Machbub,Carmadi. First step toward internetbased embedded control system. 2004 5th Asian Control Conference
[7]Correa,C.R.Awad, S.Embedded controller software and algorithm development tool. 18thIEEE Instrumentation and Measurement Technology Conference. May 21-23 2001
[8]ARM Limited. ARM 7TDMI Technical Reference Manual(Rev4). 2001,ARM 公司
[9]羅致,王仲東.ARM Linux在AT91 RM9200平臺(tái)上的移植[J].兵工自動(dòng)化.2006