uCOSii 在Coldfire MCF52235 上的移植
介紹將C/ OS 實時操作系統移植到Co ldfire 處理器MCF52235 上的方法, 為MCF5223x 系列微控制器的軟件開發提供了一個實時操作系統平臺。首先分析C/ OS 的特點和內核結構, 結合MCF52235 的結構特點以及使用的軟硬件開發工具, 深入研究移植條件和實現方法, 詳細闡述系統移植中需要修改的文件、編寫的代碼及需要注意的問題。然后使用Co dew arr ior 6. 4 集成開發環境和評估板, 通過建立兩個應用任務, 驗證了移植代碼的正確性, 說明在MCF52235 上移植uC/ OS 是成功和可行的。在此介紹的移植過程和方法可以作為C/ OS 在其他微控制器中移植的典型范例。
本文引用地址:http://www.104case.com/article/148240.htmC/ OS 是一種多任務實時操作系統。內核源代碼公開、短小精干、可裁剪、執行時間可確定, 可移植性較強, 非常適用于一些中小型嵌入式系統開發。uC/OS 可以移植到8~ 64 位的不同類型、不同規模的嵌入式系統, 并能在大部分的8 位、16 位、32 位, 甚至64 位的微處理器和DSP 上運行[ 1] 。
MCF52235 是飛思卡爾公司Co ldf ire 系列32 位單片機解決方案的嵌入式微控制器, 采用的是V2 版本的
RISC 內核。MCF52235 內部有32 KB SRAM 和256 KB FLASH, 并且集成了標準的Coldfire 外圍設備, 包括三個適合中長距離通信的SCI, 一個I2 C 和一個用于系統內部和外圍設備通信的Q SPI。在60 Hz的核心頻率下, MCF52235 的處理能力為56 MIPS, 具備較高的性能價格比[ 24] 。MCF52235 對于移植C/ OS 來說有足夠的
RAM 和FLASH, 且有較快的處理速度和較低的成本,所以對于嵌入式應用系統的開發來說, 嵌入C/ OS
到MCF52235 微控制器是一個不錯的選擇。uC/ OS 的體系結構要實現C/ OS 向MCF52235 的移植, 需要做兩方面的工作: 一是重新定義內核的大小和功能; 二是為內核編寫與硬件相關的代碼。C/ OS 的文件結構如圖1 所示。可以看到, C/ OS 與CPU 類型無關的C 代碼文件COS . C 包括很多文件, 它們是C/ OS 的內核和很多功能函數, 其中前三個文件是實時內核、任務管理和時鐘節拍, 這三個文件是一定要用的。后面6 個功能函數用于任務間的通信, 應用程序中可能只用到其中
的幾個, 不用的可以不包含進去, 以免編譯時生成沒用的代碼。這部分代碼與CPU 類型無關, 在移植時, 這些文件不要改動。配置文件OS_CFG. H 需要根據應用要求來進行,主要作用是確定C/ OS 提供的系統功能函數, 應用
程序用哪些和不用哪些, 這個文件移植時需要修改。與CPU 類型有關的代碼文件主要有三個: OS _CPU. H, OS_CPU_A. ASM 和OS_CPU_C. C。文件定義用于特定CPU 的數據類型來定義相關的宏。OS _CPU_A . ASM 是用匯編語言寫的與硬件有關的代碼,OS_CPU_C. C 是用C 語言寫的與硬件有關的代碼。由于移植使用C 交叉編譯工具, 在C 代碼中可以插入匯編語句, 在移植中可將這兩個文件合并成一個文件[ 5] 。
產生時鐘節拍的定時中斷來自微控制器內部, 但并非來自V2 內核內部, 可以用實時時鐘產生定時中斷,
也可以用片內的外設模塊定時器單元來產生定時中斷,這部分代碼顯然與硬件相關, 移植時要自己寫[ 6] 。

2 移植過程
所謂移植, 就是使一個實時內核能在某個微處理器或微控制器上運行。為了方便移植, 大部分的C/ OS代碼是用C 語言寫的, 但仍需要用C 和匯編語言寫一些與處理器相關的代碼, 這是因為C/ OSII 在讀寫處理器寄存器時只能通過匯編語言來實現 。移植過程主要包括移植前的準備、BSP ( 板級支持包) 的編寫和與處理器相關代碼的修改和編寫。C/OS 核心代碼、與CPU 相關的接口程序、BSP 和用戶應用程序之間的關系如圖2 所示。
2. 1 移植前的準備
進入C/ OS 官方網站下載C/ OS 源代碼。打開Codew arrior 6. 4 建立MCF52235 的工程文件, 然后把C/ OS 的源代碼文件加入到工程里面[ 8] 。其中有幾個地方需要改動:
( 1) 下載的源代碼中os_cfg _r. h 改為o s_cfg. h;os_dbg_r. c改為os_dbg. c。
( 2) 由于會引起重復定義錯誤, 需要把源代碼中重復包含的文件注釋掉。
( 3) 需要在INT ERNAL_FLASH 模式下編譯, 而不能在RAM 模式下, 否則會產生溢出錯誤。

2. 2 編寫BSP
板級支持包( BSP) 是介于底層硬件和操作系統之間的軟件層次, 負責進行系統啟動后最初的硬件和軟件
初始化, 并對底層硬件進行封裝, 使得操作系統不再面對具體的硬件[ 9] 。在此建立兩個BSP 文件: BSP. ASM 和BSP. C。其中, BSP. ASM 中包含了匯編語言寫的中斷接口程序。BSP. C 中包含了硬件和軟件的初始化程序和產生時鐘節拍的中斷服務程序。
2. 3 與處理器相關代碼的修改和編寫
有三個與處理器相關的文件, 即OS_CPU . H, OS_CPU _ A. ASM 和OS _ CPU _ C. C 需要修改。由于MCF52235 有eMAC 模塊, 所以還需要編寫OS_CPU _I. ASM 文件, 用來在任務切換和中斷時以及中斷返回
時保存和恢復相關寄存器。
2. 3. 1 OS_CPU. H 的移植
OS_CPU. H 包含了一些與處理器和編譯器相關的宏定義和數據類型定義。由于使用Codew arrior 編譯
器, shor t 類型是16 位的, int 類型是32 位的。MCF52235 的堆棧是32 位寬的, 因此OS_STK 定義為
32 位, 所有任務的堆棧必須聲明使用OS_ST K 這種數據類型。數據類型定義如下:
ty pedef unsigned char BOOLEAN;
ty pedef unsigned char INT 8U;
ty pedef signed char INT8S;
ty pedef unsigned sho rt INT16U;
ty pedef signed shor t INT16S;
ty pedef unsigned int INT32U;
ty pedef signed int INT32S;
typedef float FP32;
typedef double FP64;
typedef unsigned int OS_STK;
typedef unsigned shor t OS_CPU_SR;
( 1) 臨界區域處理。像所有的實時性內核一樣, 在進入代碼臨界區時要關中斷, 完成時要開中斷。C/
評論