COS到 ARM的移植簡(jiǎn)版介紹_第1頁(yè)
COS到 ARM的移植簡(jiǎn)版介紹_第2頁(yè)
COS到 ARM的移植簡(jiǎn)版介紹_第3頁(yè)
COS到 ARM的移植簡(jiǎn)版介紹_第4頁(yè)
COS到 ARM的移植簡(jiǎn)版介紹_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2017年04月O5日口COS-II到ARMS3c2440的移植學(xué)院:軟件學(xué)院專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)姓名:劉志偉學(xué)號(hào):14999065年口:2014口指導(dǎo)老師:崔黎黎完成時(shí)間:來(lái)設(shè)置堆棧的增長(zhǎng)方向,其宏定義/*堆棧從高地址向低地址增長(zhǎng)/*堆棧從低地址向高地址增長(zhǎng)*/須編寫(xiě)10個(gè)簡(jiǎn)單的C函/*任務(wù)堆棧初始化函數(shù)/*任務(wù)建立接口函/*任務(wù)刪除接口函數(shù)/*任務(wù)切換接口函數(shù)/*空閑任務(wù)接口函數(shù)/*統(tǒng)計(jì)任務(wù)接口函數(shù)1、移植條件一般來(lái)說(shuō),能移植pC/OS-口的微處理器必須滿(mǎn)足以下條件:1)處理器的C編譯器能產(chǎn)生可重入型代碼。2)處理器支持中斷,并且能產(chǎn)生定時(shí)中斷。3)用C語(yǔ)言就可以開(kāi)/關(guān)中斷。處理器能支持

2、一定數(shù)量的數(shù)據(jù)存儲(chǔ)硬件堆棧。CPU去的指令。2、移植需要編寫(xiě)的文件OS_CPU.H(C語(yǔ)言頭文件)OS_CPU_C.C(C程序源文件)OS_CPU_A.ASM(匯編程序源文件)3、OS_CPU.H的移植1)數(shù)據(jù)類(lèi)型的定義2)堆棧的定義堆棧中,編譯器的編譯選項(xiàng)和由此生成的堆棧指令決定堆棧的增長(zhǎng)方向。在pC/OS-口中,用OS_STK_GROWTH為:#defineOS_STK_GROWTH1;/#defineOS_STK_GROWTH0;3)中斷與臨界區(qū)代碼#defineOS_TASK_SW()OSCtxSw()/*任務(wù)切換*/#defineOS_EXIT_CRITICAL()ARMDisabI

3、eInt()/*關(guān)閉中斷*/#defineOS_ENTER_CRITICAL()ARMEnableInt()4)使用軟中斷SWI作底層接口4、OS_CPU_C.C移植在此文件中,要求我們必?cái)?shù)。OStaskStkInit();/OStaskCreateHook();數(shù)*/OStaskDelHook();/OStaskSwHook();/OStaskIdleHook();/OStaskStatHook();/OSTimeTickHook();/*時(shí)鐘節(jié)拍接口函數(shù)/OStaskHookBegin();/*系統(tǒng)初始化開(kāi)始接口函數(shù)/OStaskHookEnd();/*系統(tǒng)初始化結(jié)束接口函數(shù)*/OSTCB

4、InitHook();/*控制塊初始化接口函數(shù)*/OsTaskStkInt()函數(shù)。其他9,但可以不包含任何代碼。4、OS_CPU_A.ASM的移植1)OSStartHighRdy()函數(shù)LDRr4,addr_OSTCBCur;/*得到當(dāng)前任務(wù)的TCB地址*/LDRr5,addr_OSTCBHighRdy;/*得到高優(yōu)先級(jí)任務(wù)的TCB地址*/LDRr5,r5;/*得到堆棧指針*/LDRsp,r5;/*切換到新的堆棧*/STRr5,r4;/*設(shè)置新的當(dāng)前任務(wù)的TCB地址*/LDMFDsp!,r4;MSRCPSR_cxsf,r4;*/*/LDMFDsp!,r4/*從棧頂?shù)玫叫碌穆暶鱉SRCPSR_

5、cxsf,r4LDMFDsp!,r0-r12,lr,pc;/*開(kāi)始新的任務(wù)END2)OSCtxSw()函數(shù)STMFDsp!,lr;/*保存PC指針*/STMFDsp!,lr;/*保存lr指針*/STMFDsp!,r0-r12;/*保存寄存器文件和ret地址*/MRSr4,CPSR;STMFDsp!,r4;/*保存當(dāng)前PSR*/MRSr4,SPSR;STMFDsp!,r4;LDRr4,addr_OSPrioCur;LDRr5,addr_OSPrioHighRdy;TOC o 1-5 h zLDRBr6,r5;STRBr6,r4;/*得到當(dāng)前任務(wù)的TCB地址*/LDRr4,addr_OSTCBCu

6、r;LDRr5,r4;STRsp,r5;/*保存棧指針在占先任務(wù)的TCB上,取得高優(yōu)先級(jí)任務(wù)的TCB地址*/LDRr6,addr_OSTCBHighRdy;LDRr6,r6;LDRsp,r6;/*得到新任務(wù)的堆棧指針*/OSTCBCur=OSTCBHighRdy;STRr6,r4;/*設(shè)置當(dāng)前新任務(wù)的TCB地址*/LDMFDsp!,r4;MSRSPSR_cxsf,r4;LDMFDsp!,r4;MSRCPSR_cxsf,r4;LDMFDsp!,r0-r12,lr,pc;(3)OSIntCtxSw()函數(shù)STMFDsp!,lr;/*保存PC指針*/STMFDsp!,r0-r12;/*保存寄存器文件

7、和RET地址*/STMFDsp!,r4;/*保存當(dāng)前PSR*/LDRr4,addr_OSTCBCur;/*得到當(dāng)前任務(wù)的TCB地址*/STRsp,r5;/*保存棧指針在占先任務(wù)的TCB上*/LDRr6,addr_OSTCBHighRdy;/*取得高優(yōu)先級(jí)任務(wù)的TCB地址*/LDRsp,r6;/*得到新任務(wù)的堆棧指針*/LDMFDsp,r7;/*設(shè)置當(dāng)前新任務(wù)的TCB地址*/(4)OSTickISR()函數(shù)STMDBSP!,r0-r11,lr;MRSR0,CPSR;ORRR0,R0,#0 x80;/*設(shè)置中斷禁止標(biāo)*/MRSCPSR_cxsf,r0;/*中斷結(jié)束*/LDRR0,=I_ISPC;L

8、DRR1,=BIT_TIMER0;STRR1,R0;BLIrqStart;BLOSTimeTick;BLIrqFinish;LDRR0,=need_to_swap_context;LDRR2,R0;CMPR2,#1;LDREQPC,=_CON_SW;6、移植測(cè)試可以使用各種不同的技術(shù)測(cè)試自己的移植工作,這取決于用戶(hù)個(gè)人在嵌入式系統(tǒng)方面的經(jīng)驗(yàn)和對(duì)處理器的理解。一般情況下通過(guò)四個(gè)步驟測(cè)試移植代碼:1)確保編譯器、匯編編譯器及鏈接器正常工作2)驗(yàn)證OSTskStkInit()和OSStartHighRdy()函數(shù)3)驗(yàn)證OSCtxSw()函數(shù)4)驗(yàn)證OSIntCtxSw()和OSTickISR()函

9、數(shù)CPU,NC/OS-口中與處理器無(wú)關(guān)的文件一同編譯和鏈接。顯然這個(gè)步驟取決于使用的編譯器,在這期間是無(wú)代碼的測(cè)試。最小的測(cè)試程序如下:include“includes.h”Voidmain(void)osinit();Osstart();驗(yàn)證OSTskStkInit()和OSStartHighRdy()函數(shù)如果上一步的測(cè)試完成了,就可以測(cè)試移植好的OS_CFG.H文件中設(shè)置閑任務(wù)OS_TaskIdle()運(yùn)行,檢查是否出錯(cuò)循環(huán)中運(yùn)行,且在無(wú)限循環(huán)中已經(jīng)執(zhí)行幾次OSTskStkInit()和OSStartHighRdy()函數(shù)是成功的。驗(yàn)證OSCtxSw()函數(shù)nC/OS-口代碼,真正的測(cè)試工

10、OS_TASK_STAT_EN為0,只讓一個(gè)空.OS_TaskIdle(的,那么就已經(jīng)驗(yàn)證了如果上一步測(cè)試成功,這一步代碼驗(yàn)OSTskStkInit(初始序,并不斷切換到空閑任務(wù)。在此之前,證就比較容易了。在這步測(cè)試中,已經(jīng)因?yàn)橹烙商砑右粋€(gè)應(yīng)用程應(yīng)該保證已經(jīng)正確設(shè)置了軟中斷向量或指令陷阱TRAP向量,使它指向OSCtxSw():include“includes.”hVoidmain(void)osinit();ostaskcreate(testtask,(void*)0,&testtask99,0);Osstart();voidtesttask(void*pdata)pdata=pdata;

11、While(1)ostimedly(1);OSTimeDly()。OSTimeDly()調(diào)用OS_Sched()函數(shù),而OS_Sched()的OSCtxSw()函數(shù)。當(dāng)進(jìn)入OSCtxSw()的代碼,看到TestTask()務(wù)的,而OS_TaskIdle()寄存器被調(diào)入CPU.如果OSCtxSw()OS_TaskIdle()則應(yīng)檢查原因,糾正OSCtxSw()中的錯(cuò)誤。驗(yàn)證OSIntCtxSw()OSTickISR()數(shù)OSIntCtxSw()OSIntCtxSw()像OSCtxSw(),且比OSCtxSw()單。實(shí)際上,OSCtxSw()得,向了時(shí)鐘節(jié)拍中斷服務(wù)子程序,然后,初始化時(shí)鐘節(jié)拍并中斷。7、結(jié)論

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論