資源描述:
《uCOS-II在STM32上的移植》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、μC/OS-II的移植8/17/20101*7.1概述User目錄Main.CMain.HIncludes.HOS_Cfg.HμC/OS-IISource目錄OS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.COS_TMR.CuCOS_II.HμC/OS-IIPorts目錄CortexM3OS_CPU_C.COS_CPU_A.ASMOS_CPU.HBSP(板級支持包)Startup.STarget.CT
2、arget.HARMCortex-M3目標板與處理器無關操作系統(tǒng)內核代碼與處理器有關需要移植代碼開發(fā)板相關代碼8/17/20102*內核文件移植的部分用戶代碼板級代碼主程序8/17/20103*ARMCortex-M3的寄存器模型LM3S系列單片機采用ARMCortex-M3內核;在移植之前,先簡述可見寄存器模型。ARMCortex-M3總共有20個寄存器,每個都是32位寬度。R0-R12通用寄存器,可存儲數據也可存放指針R13用于存放堆棧指針。實際上有兩個堆棧指針SP_process(進程堆棧)和SP
3、_main(主堆棧),但任何時候只有一個是可見的。在本移植中,SP_process用于任務代碼(即線程模式),SP_main用于異常代碼(即處理模式)。R14連接寄存器LR。在執(zhí)行分支鏈接指令(BL)或帶交換的分支鏈接指令(BLX)時,存儲來自PC的返回地址;也用作異常的返回。R15程序計數寄存器PC。用于指示當前正被執(zhí)行的指令。根據不同的指令,每執(zhí)行一條,PC增加2或增加4。8/17/20104*8/17/20105*狀態(tài)中斷8/17/20106*控制寄存器8/17/20107*7.1.1移植條件移植
4、μC/OS-II到處理器上必須滿足以下條件(1)處理器的C編譯器能產生可重入代碼μC/OS是多任務內核,函數可能會被多個任務調用,代碼的重入性是保證完成多任務的基礎??芍厝氪a指的是可被多個體任務同時調用,而不會破壞數據的一段代碼,或者說代碼具有在執(zhí)行過程中打斷后再次被調用的能力。舉例說明:Swap1函數代碼:Inttemp;voidswap1(int*x,int*y){temp=*x;*x=*y;*y=temp;}舉例說明:Swap2函數代碼:voidswap2(int*x,int*y){inttem
5、p;temp=*x;*x=*y;*y=temp;}可重入不可重入編譯器還得支持,MDK開發(fā)環(huán)境,可生成可重入代碼8/17/20108*(2)用C語言可打開和關閉中斷ARM處理器核包含一個CPSR寄存器,該寄存器包括一個全局的中斷禁止位,控制它便可打開和關閉中斷。PRIMASK(3)處理器支持中斷并且能產生定時中斷μC/OS-II通過處理器產生的定時器中斷來實現多任務之間的調度。ARMCortex-M3的處理器都支持中斷并能產生定時器中斷,專門有一個SysTick定時器來實現。(4)處理器支持能夠容納一定
6、量數據的硬件堆棧(通常需要幾十KByte字節(jié))比如AT98C51處理器,內部只有128字節(jié)的RAM,要運行,需外擴RAM。CM3的芯片,內部可多達128KByte的容量,因此可直接使用。(5)處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧(或內存)的指令μC/OS-II進行任務調度時,會把當前任務的CPU寄存器存到此任務的堆棧中,然后,再從另一個任務的堆棧中恢復原來的工作寄存器,繼續(xù)運行另一個任務。所以,寄存器的入棧和出棧是μC/OS-II多任務調度的基礎。運行TCP、UDP需要的內存會更大,通常
7、要100K左右8/17/20109*7.1.2移植步驟所謂移植,就是使一個實時操作系統(tǒng)能夠在某個微處理器平臺上或微控制器平臺上運行。由μC/OS-II的文件系統(tǒng)可知,在移植過程中,用戶需要關注的就是與處理器相關的代碼。這部分包括一個頭文件OS_CPU.H、一個匯編文件OS_CPU_A.ASM和一個C代碼文件OS_CPU_C.C。OS_CPU.HOS_CPU_C.COS_CPU_A.ASM#define設置一個常量的值聲明10個數據類型用#define聲明三個宏用C語言編寫六個簡單的函數編寫四個匯編語言函
8、數移植實際中,寫一個就行8/17/201010*1、INCLUDES.HINCLUDES.H是一個頭文件,它在所有.C文件的第一行被包含。#include"includes.h"INCLUDES.H使得用戶項目中的每個.C文件不用分別去考慮它實際上需要哪些頭文件。使用INCLUDES.H的唯一缺點是它可能會包含一些實際不相關的頭文件。這意味著每個文件的編譯時間可能會增加。但由于它增強了代碼的可移植性,所以我們還是決定使用這一方法。用戶可以通