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