?編寫BSP
板級支持包( BSP) 是介于底層硬件和操作系統之間的軟件層次, 負責進行系統啟動后最初的硬件和軟件
初始化, 并對底層硬件進行封裝, 使得操作系統不再面對具體的硬件[ 9] 。在此建立兩個BSP 文件: BSP. ASM 和BSP. C。其中, BSP. ASM 中包含了匯編語言寫的中斷接口程序。BSP. C 中包含了硬件和軟件的初始化程序和產生時鐘節拍的中斷服務程序。
與處理器相關代碼的修改和編寫
有三個與處理器相關的文件, 即OS_CPU . H, OS_CPU _ A. ASM 和OS _ CPU _ C. C 需要修改。由于MCF52235 有eMAC 模塊, 所以還需要編寫OS_CPU _I. ASM 文件, 用來在任務切換和中斷時以及中斷返回
時保存和恢復相關寄存器。
?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/
OS 定義了兩個宏來關閉和使能中斷: OS_ENT ER_CRITICAL( ) 和OS_EXIT _CRIT ICAL( ) 。C/ OS定義了三種方法來關閉和使能中斷, 大多數情況下選擇第三種方法。
# define OS_CRITICAL_METH OD # 3
# define OS_ENTER_CRITICAL( ) { cpu_sr = OS _CPU_
SR_Save( ) ; } / / 關中斷
# def ineOS _ EXIT _ CRITICAL( ) { OS _ CPU _ SR_ Resto re
( cpu_sr) ; } / / 開中斷
( 2) 任務層上下文切換。當C/ OS 調用OS _TASK_SW( ) 時發生任務層的上下文切換。因為上下
文切換是根據處理器的不同而不同的, 所以需要執行一個匯編的函數。在這種情況下, 用TRA P 指令來產
生一個異常, 用T RAP 指令的優點是能使它像發生了一次中斷一樣。這里用# 14 T RAP, 因為大多數情況
下, # 15 TRAP 被調試和監控程序保留了。# 14TRAP 定位于VBR+ 0x00B8, 然后跳轉到相應的地址。
在這個向量處放置OSCtx Sw( ) 的地址。這個函數聲明在OS_CPU_A. ASM 里。VBR 代表向量基址寄存器,
包含異常向量表的基址, 程序開始時被初始化為0x00000000, 但是在運行時可以改變。
# define OS_TASK_SW( ) asm( T RAP # 14; )
( 3) 堆棧的增長方向。MCF52235 的堆棧增長方向是從高地址向低地址, 因此OS _ST K_GROWTH 置
為1。
# define OS_STK_GROWTH 1
評論
查看更多