μC/OS-II系統在AVM處理器上的移植
μC/OS-II功能強大,支持56個用戶任務,其內核為占先式,支持信號量、郵箱、消息隊列等多種常用的進程間通信機制,現已成功應用到眾多商業嵌入式系統中,是一個成熟穩定的實時內核。與大多商用RTOS不同的是,μC/OS-II公開所有的源代碼,90%的代碼使用標準的ANSI C語言書寫,程序可讀性強、移植性好;同時它可免費獲得,即使商業應用也只收取少量的許可費用。因此,對μC/OS-II實時操作系統的學習研究、開發、應用具有重要意義。
Samsung S3C44B0X微處理器是三星公司專為手持設備和其它嵌入式應用提供的高性價比的微控制器解決方案。它使用ARM公司的16位/32位RISC結構,內核是ARM7TDMI,工作在66MHz,片上集成了以下部件:8K Cache、外部存儲器控制器、LCD控制器、4個DMA通道、2個UART、1個多主I2C總線控制器、1個I2C總線控制器,以及5通道PWM定時器和1個內部定時器、8通道12位ADC等,能夠與常用的外圍設備實現無縫連接,功能強大。目前,國內應用較為廣泛。
1 μC/OS-II實時操作系統結構
圖1說明了μC/OS-II的軟硬件體系結構。應用程序處于整個系統的頂層,每個任務都可以認為自已獨占了CPU,因而可以設計成為一個無限循環。μC/OS-II處理器無關的代碼提供了μC/OS-II的系統服務,應用程序可以使用這些API函數進行內存管理、任務間通信及創建、刪除任務等。
大部分的μC/OS-II代碼是使用ANSI C語言書寫的,因此μC/OS-II的可移植性好,然而仍需要使用C和匯編語言寫一些處理器相關代碼。μC/OS-II的移植需要滿足以下要求:
①處理器的C編譯器可以產生可重入代碼;
②可以使用C調用進入和退出臨界區代碼;
③處理器必須支持硬件中斷,并且需要一個定時中斷源;
④ 處理器需要能夠容納一定數據的硬件堆棧;
⑤處理器需要有能夠在CPU寄存器與內核和堆棧交換數據的指令。
S3C44B0X處理器完全滿足上述要求。
2 實時內核μC/OS-II在S3C44B0X上的移植
我們使用ARM SDT編譯器,移植μC/OS-II主要包括以下幾個步驟。
(1)設置OS_CPU.H中與處理器和編譯器相關的代碼
*************************************************
與編譯器相關的數據類型
*************************************************
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /*8位無符號整數*/
typedef signed char INT8S; /*8位有符號整數*/
typedef unsigned short INT16U; /*16位有符號整數*/
typedef signed short INT16S; /*16位無符號整數*/
typedef unsigned long INT32U; /*32位無符號整數*/
typedef signed long INT32S; /*32位有符號整數*/
typedef float FP32; /*單精度浮點數*/
typedef double FP64; /*雙精度浮點數*/
typedef unsigned int OS_STK;/*堆棧入口寬度為16位*/與ARM處理器相關的代碼:
#define OS_ENTER_CRITICAL () ARMEnableInt() /*開啟中斷*/
#define OS_STK_GROWTH 1 /*堆棧由高地址向低地址增長*/
(2)用C語言編寫6個操作系統相關的函數(OS_CPU_C.C)
void OSTaskStkInit(void(task)(void *pd),void *pdata,void *ptos,INT16U opt)
{ unsigned int *stk;
opt =opt; /*因“opt”變量沒有用到,防止編譯器產生警告*/
stk =(unsigned int *)ptos; /*裝載堆棧指針*/
/*為新任務創建上下文*/
評論