資源描述:
《ucos移植實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、UCOS移植實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康?.了解并掌握UC/OS系統(tǒng)的移植方法和應(yīng)用2.更高層次掌握LPC2000系列的用法二.實(shí)驗(yàn)器材1.PC機(jī)2.Keil軟件或ADS軟件3.LPC2000系列開(kāi)發(fā)板三.要求學(xué)習(xí)并掌握UC/OS移植原理運(yùn)用移植的系統(tǒng)實(shí)現(xiàn)任務(wù)同步運(yùn)行四.實(shí)驗(yàn)原理1.為什么使用UC/OS·現(xiàn)在ARM系列的處理器其運(yùn)算能力已經(jīng)達(dá)到了50MHZ以上,但在我們?cè)O(shè)計(jì)大型的應(yīng)用工程時(shí),往往感覺(jué)邏輯不明,各部件之間協(xié)調(diào)不緊密。UCOS的產(chǎn)生就是為了解決這個(gè)問(wèn)題·市場(chǎng)上主流的嵌入式實(shí)時(shí)操作系統(tǒng)有Vxworks、pSos、WinCE、Linux
2、等,但其在運(yùn)用,學(xué)習(xí)上和UC/OS比,都不太適合我們學(xué)生階段的學(xué)習(xí)和運(yùn)用.·UC/OS是開(kāi)放源代碼的嵌入式實(shí)時(shí)操作系統(tǒng),便于分析和應(yīng)用?!C/OS具有高度可移植性,方便快捷。2.UC/OS介紹UC/OS(MicroControlOperationSystem)是一個(gè)可以基于ROM運(yùn)行的、可裁減的、搶占式實(shí)時(shí)多任務(wù)內(nèi)核(見(jiàn)圖1)(見(jiàn)圖1)?UC/OS可以簡(jiǎn)單的視為一個(gè)多任務(wù)調(diào)度器,在這個(gè)任務(wù)調(diào)度器之上完善并添加了和多任務(wù)操作系統(tǒng)相關(guān)的系統(tǒng)服務(wù),如信號(hào)量、郵箱等。其主要特點(diǎn)有公開(kāi)源代碼,代碼結(jié)構(gòu)清晰、明了,注釋詳盡,組織有條理,可移植
3、性好,可裁剪,可固化。內(nèi)核屬于搶占式,最多可以管理60個(gè)任務(wù)。從1992年開(kāi)始,由于高度可靠性和安全性,UC/OSII已經(jīng)廣泛使用在從照相機(jī)到航空電子產(chǎn)品的各種應(yīng)用中。3.UCOS的移值·UC/OS中的任務(wù)總是處于五種狀態(tài)之一:睡眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、等待狀態(tài)和中斷服務(wù)態(tài)。任何任務(wù)必須首先創(chuàng)建且就緒態(tài)之后才有可能運(yùn)行.·UC/OS的正常運(yùn)行需要處理器平臺(tái)滿足以下要求:a)處理器的C編譯器能產(chǎn)生可重入代碼。b)用C語(yǔ)言就可以打開(kāi)和關(guān)閉中斷。c)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10至100Hz之間)。d)處理器支持能夠容納一定
4、量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。e)處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆?;騼?nèi)存中的指令。我們的KEIL和ADS均支持UC/OS的要求。因此可以在LPC2000系列上移值。4.UCOS系統(tǒng)結(jié)構(gòu)應(yīng)用程序(用戶代碼)μC/OS-II(與處理器無(wú)關(guān)代碼)OS_CORE.cOS_FLAG.c...μC/OS-II配置(與應(yīng)用無(wú)關(guān))OS_CFG.HINCLUDES.HμC/OS-II移植OS_CPU.HOS_CPU_C.COS_CPU_A.ASMuu(與處理器相關(guān)代碼)CPU定時(shí)器硬件軟件用于產(chǎn)生系統(tǒng)時(shí)鐘移植時(shí)需要編寫的代碼
5、因此,我們所做的任務(wù)就是寫與處理器相關(guān)的代碼。主要有OS_CPU.H和OS_CPU_A.ASM和OS_CPU_C.C三個(gè)文件五.移值步驟分析5.1設(shè)置與處理器及編譯器相關(guān)的代碼[OS_CPU.H]???不同的編譯器會(huì)使用不同的字節(jié)長(zhǎng)度來(lái)表示同一數(shù)據(jù)類型,所以要定義一系列數(shù)據(jù)類型以確保移植的正確性。下面是uC/OSII定義的一部分?jǐn)?shù)據(jù)類型。typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;/*無(wú)符號(hào)8位*/typedefsignedcharINT16S;/*帶符號(hào)8位*/typed
6、efunsignedintINT16U;/*無(wú)符號(hào)16位*/typedefsignedintINT16S;/*帶符號(hào)16位*/typedefunsignedlongINT32U;/*無(wú)符號(hào)32位數(shù)*/typedefsignedlongINT32S;/*帶符號(hào)32位數(shù)*/typedeffloatFP32;/*單精度浮點(diǎn)數(shù)*/typedefdoubleFP64;/*雙精度浮點(diǎn)數(shù)*/typedefunsignedintOS_STK;/*堆棧入口寬度*/typedefunsignedintOS_CPU_SR;/*寄存器寬度*/???uC/O
7、SII需要先關(guān)中斷再訪問(wèn)臨界區(qū)的代碼,并且在訪問(wèn)完后重新允許中斷。uC/OSII定義了兩個(gè)宏來(lái)禁止和允許中斷:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),本移植實(shí)現(xiàn)這兩個(gè)宏的匯編代碼。#defineOS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())/*Disableinterrupts*/#defineOS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))/*Enableinterrupts*/OSCPUSaveSRMRSR0,CPSR;
8、關(guān)中斷ORRR1,R0,#0xC0MSRCPSR_c,R1MOVPC,LROSCPURestoreSRMSRCPSR_c,R0;開(kāi)中斷MOVPC,LR5.2用C語(yǔ)言實(shí)現(xiàn)與處理器任務(wù)相關(guān)的函數(shù)[OS_CPU_C.C]OSTaskStkI