胡夢寒
摘 要:本文討論了將一個具有高可靠性的可剝奪型多任務實時內(nèi)核uC/OS-II在Freescale單片機MC9S12DG128B上移植的原理和方法。給出了一個以Freescale Code Warrior 為編譯器,MC9S12DG128B為處理器的對uC/OS-II系統(tǒng)進行移植的具體實例。
關鍵詞:uC/OS-II;MC9S12DG128B;移植
嵌入式操作系統(tǒng)近年來備受人們關注,其開發(fā)出來的產(chǎn)品已經(jīng)應用到生活的各個角落。uC/OS-II系統(tǒng)作為嵌入式操作系統(tǒng)的一種,具有高可靠性、穩(wěn)定性和實時性。MC9S12DG128B是16位單片機,具有資源豐富、功能強大、運行穩(wěn)定且價格低廉的特點。本文將介紹uC/OS-II實時內(nèi)核在MC9S12DG128B上的移植過程。
1 移植前的準備工作
1.1 uC/OS-II系統(tǒng)特點
uC/OS-II實時操作系統(tǒng)使用可剝離型內(nèi)核,CPU總是運行多個任務中優(yōu)先級最高的任務。它具有很強的可移植性、內(nèi)核可裁減性、可確定性的特點,并提供很多系統(tǒng)服務。
1.2 MC9S12DG128B硬件資源
MC9S12DG128B是16位單片機,DG128CPU具有6個寄存器,13種尋址方式和400多條指令,同時,DG128具有豐富的I/O接口,MC9S12DG128B典型的內(nèi)部時鐘頻率為16MHZ,支持定時中斷,具有128k的Flash,8k字節(jié)的RAM和2k字的EEPROM。
1.3 移植過程編譯器
開發(fā)編譯工具:CodeWarrior For HCS12X_v4.7。
1.4 uC/OS-II模塊
uC/OS-II的軟硬件體系結構如圖1所示。應用程序處于系統(tǒng)的頂層,無限循環(huán)設計,每個任務獨占CPU。
2 具體移植步驟
以下是具體的移植步驟,與硬件相關的各個文件需修改。
2.1 文件OS_CPU.H
包含與處理器相關的、#define語句定義的常數(shù)、宏以及數(shù)據(jù)類型。
2.2 數(shù)據(jù)類型定義
不同編譯器會使用不同的字節(jié)長度來表示同一數(shù)據(jù)類型。uC/OS-II的移植包含一系列的數(shù)據(jù)類型定義。
2.3 堆棧單位
OS_STK的數(shù)據(jù)類型必與須處理器的寄存器長度一致。
2.4 堆棧方向
需預先設定堆棧的增長方向,因為不同處理器,數(shù)據(jù)入堆棧時堆棧指針的增長方向不一樣。
2.5 臨界區(qū)
需定義兩個保護臨界區(qū)的宏。
2.6 設置OS_TASK_SW()
#define OS_TASK_SW() asm(swi)
2.7 文件OS_CPU_A.ASM
uC/OS-II移植要求編寫四個匯編函數(shù),分別是OSTickISR()、OSStartHighRdy()、OSCtxSw()和OSIntCtxSw(),移植過程將對相應函數(shù)進行修改。
3 實驗及其結果分析
為驗證移植的正確性,本文將通過應用任務實驗來實施驗證。實驗必須在確保C編譯器,匯編編譯器及鏈接器正常工作的情況下進行,測試修改過的移植函數(shù)在9S12環(huán)境下運行是否正常。
根據(jù)實驗結果可以看出,任務TestTask1和TestTask2創(chuàng)建成功,證明OSTaskStkInit()、OSStartHighRdy()工作正常;TestTask1和TestTask2實現(xiàn)了任務切換,以及發(fā)生了時間中斷(任務TestTask1運行兩次后任務TestTask2運行一次),因此其它函數(shù)也正常運行,實驗成功。由此可以得出結論,uC/OS-II在MC9S12DG128B上移植成功。
4 結語
本文介紹了uC/OS-II移植到MC9S12DG128B上的全過程,對從事嵌入式系統(tǒng)移植工作的開發(fā)人員有一定的參考價值。
參考文獻:
[1] Jean J Labrosse.嵌入式操作系統(tǒng)uC/OS-II [M].第2版,北京:北京航空航天大學出版社,2005:283-316.
[2] 黃濤,徐宏吉.嵌入式實時操作系統(tǒng)移植技術的分析和應用[J].計算機應用,2003,(9):88-90.
[3] 邵貝貝.在MC68HC908GP32上移植uC/OS-II.單片機與嵌入式系統(tǒng)應用[J].單片機與嵌入式系統(tǒng)應用,2001,(11):69-75.
[4] 王宜懷,劉曉升,等.嵌入式系統(tǒng)-使用HCS12微控制器的設計與應用[M].北京:北京航空航天大學出版社,2003,1.