版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 生產(chǎn)效率提升解決方案陳鵬
- 電動(dòng)葫蘆安裝施工方案
- 七年級(jí)安全教育《秋季開(kāi)學(xué)安全素養(yǎng)提升》教學(xué)設(shè)計(jì)
- 數(shù)學(xué)六年級(jí)上冊(cè)《扇形統(tǒng)計(jì)圖》教學(xué)設(shè)計(jì)
- 統(tǒng)編版小學(xué)語(yǔ)文六年級(jí)下冊(cè):古詩(shī)詞文積累與遷移運(yùn)用教學(xué)設(shè)計(jì)
- 氧化還原教學(xué)設(shè)計(jì)
- 生成式人工智能在職業(yè)教育成果轉(zhuǎn)化與產(chǎn)業(yè)升級(jí)協(xié)同創(chuàng)新中的應(yīng)用研究教學(xué)研究課題報(bào)告
- 2025安徽黃山市祁門(mén)經(jīng)濟(jì)開(kāi)發(fā)區(qū)投資有限責(zé)任公司招聘最終筆試歷年參考題庫(kù)附帶答案詳解
- 小學(xué)美術(shù)教學(xué)中傳統(tǒng)繪畫(huà)技法的傳承課題報(bào)告教學(xué)研究課題報(bào)告
- 2025安徽滁州市全椒縣水務(wù)公司勞務(wù)外包人員擬錄用筆試歷年參考題庫(kù)附帶答案詳解
- 2024年山東省濟(jì)南市中考化學(xué)試卷( 含答案)
- 建筑結(jié)構(gòu)改造設(shè)計(jì)和加固技術(shù)綜合分析的開(kāi)題報(bào)告
- 管理會(huì)計(jì)學(xué) 第10版 課件 第1、2章 管理會(huì)計(jì)概論、成本性態(tài)與變動(dòng)成本法
- 喪葬費(fèi)用補(bǔ)助申請(qǐng)的社保授權(quán)委托書(shū)
- 2024年度初會(huì)《經(jīng)濟(jì)法基礎(chǔ)》高頻真題匯編(含答案)
- 課例研究報(bào)告
- 啤酒營(yíng)銷(xiāo)促銷(xiāo)實(shí)戰(zhàn)技巧之經(jīng)銷(xiāo)商管理技巧知識(shí)培訓(xùn)
- 建筑工程各部門(mén)職能及各崗位職責(zé)201702
- 機(jī)柜端口對(duì)應(yīng)表
- GB/T 3934-2003普通螺紋量規(guī)技術(shù)條件
- 車(chē)輛贈(zèng)與協(xié)議模板
評(píng)論
0/150
提交評(píng)論