




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
《嵌入式系統(tǒng)原理與開(kāi)發(fā)》
第19講南京大學(xué)計(jì)算機(jī)系俞建新主講12月15日1南京大學(xué)計(jì)算機(jī)系第1頁(yè)第9章嵌入式操作系統(tǒng)概論本講內(nèi)容實(shí)時(shí)系統(tǒng)嵌入式操作系統(tǒng)特點(diǎn)和分類RTOS慣用調(diào)度算法開(kāi)啟程序bootloader嵌入式操作系統(tǒng)μC/OS-II
12月15日2南京大學(xué)計(jì)算機(jī)系第2頁(yè)9.5嵌入式操作系統(tǒng)μC/OS-IIμC/OS-II主要特點(diǎn)μC/OS-II層次μC/OS-II代碼結(jié)構(gòu)μC/OS-II內(nèi)核μC/OS-II任務(wù)調(diào)度μC/OS-II任務(wù)切換μC/OS-II中止處理μC/OS-II時(shí)間管理μC/OS-II任務(wù)間通信μC/OS-II存放管理μC/OS-II移植12月15日3南京大學(xué)計(jì)算機(jī)系第3頁(yè)μC/OS-II介紹作者:JeanLabrosse源碼公開(kāi)嵌入式實(shí)時(shí)系統(tǒng)已被移植到40各種不一樣CPU上/提供技術(shù)服務(wù)支持。12月15日4南京大學(xué)計(jì)算機(jī)系第4頁(yè)μC/OS-II主要特點(diǎn)可移植性和可確定性絕大部分代碼用ANSIC編寫(xiě)與處理器硬件相關(guān)代碼用匯編語(yǔ)言編寫(xiě)移植條件 移植目標(biāo)處理器要有硬件堆棧指針 CPU內(nèi)容存放器入棧、出棧指令 C編譯器支持內(nèi)嵌匯編或C可擴(kuò)展,可連接匯編模塊 關(guān)中止、開(kāi)中止可在C語(yǔ)言中實(shí)現(xiàn)12月15日5南京大學(xué)計(jì)算機(jī)系第5頁(yè)μC/OS-II主要特點(diǎn)(續(xù)1)搶占式多任務(wù)
能夠管理64個(gè)任務(wù),8個(gè)任務(wù)是系統(tǒng)任務(wù)用戶能夠最多定義56個(gè)任務(wù),每個(gè)任務(wù)優(yōu)先級(jí)不相同實(shí)時(shí)性較強(qiáng),參看下表OSVxWorksμC/OS-IIRT-LinuxQNX6供給商WindRiverMicriumFSMlabsQuanturm硬件平臺(tái)MC6800080486/33MHz80486/60MHz80486/33MHz任務(wù)切換3.8微秒﹤9微秒不詳12.57微秒中止響應(yīng)﹤3微秒﹤7.5微秒25微秒7.54微秒4種嵌入式操作系統(tǒng)實(shí)時(shí)性能經(jīng)典值12月15日6南京大學(xué)計(jì)算機(jī)系第6頁(yè)μC/OS-II主要特點(diǎn)(續(xù)2)可固化可裁剪實(shí)用程序能夠只使用μC/OS-II中需要那些系統(tǒng)服務(wù)任務(wù)由獨(dú)立堆棧μC/OS-II允許每個(gè)任務(wù)由不一樣??臻g嵌套中止管理嵌套層數(shù)可達(dá)255層12月15日7南京大學(xué)計(jì)算機(jī)系第7頁(yè)μC/OS-II層次μC/OS-II嵌入式系統(tǒng)軟件架構(gòu)(見(jiàn)下頁(yè)),是一個(gè)建立在硬件系統(tǒng)上四層軟件結(jié)構(gòu)最上層是應(yīng)用軟件層API層和支撐軟件層內(nèi)核設(shè)備驅(qū)動(dòng)程序12月15日8南京大學(xué)計(jì)算機(jī)系第8頁(yè)μC/OS-II層次示意圖基于μC/OS-II嵌入式系統(tǒng)軟件層次示意圖如右圖所表示12月15日9南京大學(xué)計(jì)算機(jī)系第9頁(yè)μC/OS-II代碼結(jié)構(gòu)基于μC/OS-II平臺(tái)嵌入式系統(tǒng)體系結(jié)構(gòu)如右下列圖所表示μC/OS-II主要由三大類程序文件組成A類:處理器無(wú)關(guān)B類:應(yīng)用程序相關(guān)C類:硬件平臺(tái)相關(guān)12月15日10南京大學(xué)計(jì)算機(jī)系第10頁(yè)μC/OS-II代碼結(jié)構(gòu)(續(xù))按功效分關(guān)鍵模塊、預(yù)處理模塊、進(jìn)程間通信模塊、內(nèi)存管理模塊、任務(wù)與調(diào)度管理器模塊、時(shí)間管理模塊、移植模塊μC/OS-II源代碼文件組成見(jiàn)教材第344頁(yè)表9-512月15日11南京大學(xué)計(jì)算機(jī)系第11頁(yè)μC/OS-II代碼結(jié)構(gòu)(續(xù))μC/OS-II任務(wù)代碼有兩種框架結(jié)構(gòu),以以下出:voidUsertask(void*pdata){for(;;){用戶代碼;OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();用戶代碼;}}voidUsertask(void*pdata){用戶代碼;OSTaskDel(OS_PRIO_SELF);}12月15日12南京大學(xué)計(jì)算機(jī)系第12頁(yè)μC/OS-II代碼結(jié)構(gòu)(續(xù))對(duì)于執(zhí)行無(wú)限循環(huán)任務(wù),通常采取第一個(gè)形式;對(duì)于只執(zhí)行一次就自我刪除任務(wù),采取第二種形式。以下是推薦μC/OS-II應(yīng)用程序任務(wù)基本結(jié)構(gòu)
voidUsertask(void*pdata){INT8UReturnNum;//返回值InitTimer();//可選for(;;)………..//應(yīng)用程序代碼OSTimeDly(n);//慣用語(yǔ)句}12月15日13南京大學(xué)計(jì)算機(jī)系第13頁(yè)μC/OS-II代碼結(jié)構(gòu)(續(xù))μC/OS-II開(kāi)啟過(guò)程Bootloader執(zhí)行完成后,調(diào)用應(yīng)用程序主文件(通常是main.c)里main()函數(shù)。main()函數(shù)在執(zhí)行過(guò)程中,除硬件初始化函數(shù)和用戶函數(shù)外,按以下次序執(zhí)行三個(gè)主要μC/OS-II函數(shù):①操作系統(tǒng)初始化OSInit();②任務(wù)創(chuàng)建OSTaskCreate();③任務(wù)調(diào)度開(kāi)始OSStart()一旦OSStart()函數(shù)開(kāi)始執(zhí)行,就標(biāo)志著μC/OS-II進(jìn)入了多任務(wù)調(diào)度正常運(yùn)行狀態(tài)12月15日14南京大學(xué)計(jì)算機(jī)系第14頁(yè)μC/OS-II內(nèi)核μC/OS-II內(nèi)核只提供任務(wù)調(diào)度、任務(wù)間通信(ITC)與同時(shí)、任務(wù)管理、時(shí)間管理和內(nèi)存管理等基本功效可裁剪編譯到8K左右,全部只有100K左右,消耗資源非常小在小規(guī)模代碼內(nèi)實(shí)現(xiàn)了搶占式任務(wù)調(diào)度、多任務(wù)通信功效12月15日15南京大學(xué)計(jì)算機(jī)系第15頁(yè)μC/OS-II內(nèi)核(續(xù)1)μC/OS-II臨界區(qū)μC/OS-II調(diào)用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()兩個(gè)宏來(lái)執(zhí)行關(guān)中止和開(kāi)中止,對(duì)于不一樣體系結(jié)構(gòu),這兩個(gè)宏定義不一樣。OS_CPU.H文件中含有OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()定義12月15日16南京大學(xué)計(jì)算機(jī)系第16頁(yè)μC/OS-II內(nèi)核(續(xù)2)μC/OS-II任務(wù)狀態(tài)最大任務(wù)數(shù)64個(gè),最高優(yōu)先級(jí)為0,最低優(yōu)先級(jí)取值為實(shí)際定義最大任務(wù)數(shù)減1.任務(wù)建立之后,擁有優(yōu)先級(jí),執(zhí)行函數(shù),自用??臻g和任務(wù)控制塊(TCB),在運(yùn)行時(shí)刻能夠完全控制CPU操作以及全部用戶可訪問(wèn)存放器操作。12月15日17南京大學(xué)計(jì)算機(jī)系第17頁(yè)μC/OS-II任務(wù)狀態(tài)轉(zhuǎn)換圖μC/OS-II每個(gè)任務(wù)都是一個(gè)無(wú)限循環(huán)。每個(gè)任務(wù)都處于休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和被中止態(tài)某種狀態(tài)下(任務(wù)狀態(tài)變遷如右圖所表示)12月15日18南京大學(xué)計(jì)算機(jī)系第18頁(yè)μC/OS-II內(nèi)核(續(xù)3)休眠態(tài)(dormant)這種狀態(tài)相當(dāng)于該任務(wù)駐留在內(nèi)存中,但還沒(méi)有交給內(nèi)核管理。把任務(wù)交給內(nèi)核是經(jīng)過(guò)調(diào)用任務(wù)創(chuàng)建函數(shù)實(shí)現(xiàn)μC/OS-II兩個(gè)任務(wù)創(chuàng)建函數(shù) OSTaskCreate()和OSTaskCreateExt()12月15日19南京大學(xué)計(jì)算機(jī)系第19頁(yè)μC/OS-II內(nèi)核(續(xù)3)就緒態(tài)(ready)在這種狀態(tài)下意味著該任務(wù)已經(jīng)準(zhǔn)備好,且可運(yùn)行,但因?yàn)樵撊蝿?wù)優(yōu)先級(jí)比正在運(yùn)行任務(wù)優(yōu)先級(jí)低,所以還暫時(shí)不能運(yùn)行μC/OS-II就緒表為每一個(gè)優(yōu)先級(jí)任務(wù)提供了一個(gè)位元,登記該任務(wù)是否就緒,就緒時(shí)取值為1,沒(méi)有就緒時(shí)取值為0運(yùn)行態(tài)得到了CPU控制權(quán)正在運(yùn)行之中任務(wù)狀態(tài)12月15日20南京大學(xué)計(jì)算機(jī)系第20頁(yè)μC/OS-II內(nèi)核(續(xù)4)掛起態(tài)(pending)或者等候態(tài)(waiting)正在運(yùn)行任務(wù)因?yàn)檎{(diào)用延時(shí)函數(shù)OSTimeDly(),或等候事件信號(hào)量而將本身掛起被中止態(tài)(Interrupted)發(fā)生中止時(shí)CPU提供對(duì)應(yīng)中止服務(wù),原來(lái)正在運(yùn)行任務(wù)暫時(shí)停頓運(yùn)行,進(jìn)入了被中止?fàn)顟B(tài)12月15日21南京大學(xué)計(jì)算機(jī)系第21頁(yè)μC/OS-II內(nèi)核(續(xù)5)任務(wù)控制塊OS_TCB內(nèi)查對(duì)任務(wù)管理經(jīng)過(guò)任務(wù)控制塊OS_TCB(TaskControlBlock)進(jìn)行。任務(wù)控制塊是一個(gè)數(shù)據(jù)結(jié)構(gòu),在任務(wù)創(chuàng)建時(shí)內(nèi)核會(huì)申請(qǐng)一個(gè)空白TCB,而后進(jìn)行初始化,將創(chuàng)建任務(wù)信息填入該TCB各個(gè)字段。當(dāng)任務(wù)CPU使用權(quán)被剝奪時(shí),μC/OS-II用它來(lái)保留該任務(wù)狀態(tài)。當(dāng)任務(wù)重新得到CPU使用權(quán)時(shí),任務(wù)控制塊能確保任務(wù)從當(dāng)初被中止處繼續(xù)執(zhí)行。OS_TCB全部駐留在RAM中12月15日22南京大學(xué)計(jì)算機(jī)系第22頁(yè)μC/OS-II內(nèi)核(續(xù)6)OS_TCB字段說(shuō)明OS_TCB數(shù)據(jù)結(jié)構(gòu)中OSTCBX,OSTCBY,OSTCBBitX,OSTCBBitY四個(gè)變量用于加速任務(wù)進(jìn)入就緒態(tài)過(guò)程或進(jìn)入等候事件發(fā)生狀態(tài)過(guò)程是依據(jù)任務(wù)優(yōu)先級(jí)OSTCBPrio計(jì)算得出,計(jì)算公式以下 OSTCBY =OSTCBPrio>>3; OSTCBBitY =OSMapTbl[OSTCBY]; OSTCBX =OSTCBPrio&0x07; OSTCBBitX =OSMapTbl[OSTCBX];12月15日23南京大學(xué)計(jì)算機(jī)系第23頁(yè)μC/OS-II任務(wù)調(diào)度μC/OS-II就緒表μC/OS-II就緒任務(wù)登記在就緒表中。就緒表由兩個(gè)變量OSRdyGrp和OSRdyTbl[]組成OSRdyGrp是一個(gè)單字節(jié)整數(shù)變量OSRdyTbl[OS_LOWEST_PRIO/8+1]是單字節(jié)整數(shù)數(shù)組,其元素個(gè)數(shù)定義為最低優(yōu)先級(jí)除以8加1,最多可有8個(gè)元素(字節(jié))12月15日24南京大學(xué)計(jì)算機(jī)系第24頁(yè)μC/OS-II任務(wù)調(diào)度(續(xù)1)位圖形式μC/OS-II任務(wù)就緒表和就緒實(shí)例12月15日25南京大學(xué)計(jì)算機(jī)系第25頁(yè)μC/OS-II任務(wù)調(diào)度(續(xù)2)任務(wù)就緒表操作登記一個(gè)新就緒表操作經(jīng)典指令段刪除不再處于就緒態(tài)任務(wù)指令段從就緒表中找到最高優(yōu)先級(jí)任務(wù)12月15日26南京大學(xué)計(jì)算機(jī)系第26頁(yè)μC/OS-II任務(wù)調(diào)度(續(xù)3)μC/OS-II任務(wù)調(diào)度μC/OS-II總是運(yùn)行處于就緒態(tài)任務(wù)中優(yōu)先級(jí)最高那一個(gè)OSSched()函數(shù)是任務(wù)調(diào)度前導(dǎo)函數(shù),判斷進(jìn)行任務(wù)調(diào)度三個(gè)條件是否滿足。這三個(gè)條件分別是:中止嵌套層數(shù)共享全程變量OSIntNesting=0任務(wù)調(diào)度加鎖層數(shù)共享全程變量OSLockNesting=0就緒表中查找到最高優(yōu)先級(jí)任務(wù)優(yōu)先級(jí)比當(dāng)前任務(wù)優(yōu)先級(jí)高12月15日27南京大學(xué)計(jì)算機(jī)系第27頁(yè)μC/OS-II任務(wù)切換也叫做上下文切換(ContextSwitch)當(dāng)μC/OS-II內(nèi)核決定運(yùn)行另外任務(wù)時(shí),它保留正在運(yùn)行任務(wù)上下文,這些內(nèi)容保留在任務(wù)自用堆棧之中。上下文入棧工作完成以后,把下一個(gè)將要執(zhí)行任務(wù)上下文從該任務(wù)自用堆棧中裝入CPU存放器,然后開(kāi)始該任務(wù)運(yùn)行12月15日28南京大學(xué)計(jì)算機(jī)系第28頁(yè)ARM處理器任務(wù)棧上下文存放結(jié)構(gòu)圖12月15日29南京大學(xué)計(jì)算機(jī)系第29頁(yè)μC/OS-II中止處理μC/OS-II中中止服務(wù)子程序主要用匯編語(yǔ)言編寫(xiě)而成中止服務(wù)子程序在執(zhí)行前將被中止任務(wù)執(zhí)行現(xiàn)場(chǎng)保留在自用堆棧中止服務(wù)子程序執(zhí)行事件處理有兩種方法。一個(gè)方法是經(jīng)過(guò)OSMBoxPost()、OSQPost()、OSSemPost()等函數(shù)去通知真正做該事件處理那個(gè)任務(wù),讓任務(wù)完成中止事件處理。另外一個(gè)是由中止服務(wù)子程序本身完成事件處理12月15日30南京大學(xué)計(jì)算機(jī)系第30頁(yè)μC/OS-II中止處理(續(xù)1)中止服務(wù)子程序偽碼結(jié)構(gòu)以下所表示:保留全部CPU存放器到堆棧;調(diào)用OSIntEnter()或者對(duì)OSIntNesting變量加1;執(zhí)行中止服務(wù)代碼,或者發(fā)出IPC消息通知特定任務(wù)去執(zhí)行中止服務(wù);調(diào)用OSIntExit()函數(shù);恢復(fù)全部CPU存放器;執(zhí)行中止返回指令;12月15日31南京大學(xué)計(jì)算機(jī)系第31頁(yè)μC/OS-II中止處理(續(xù)2)調(diào)用中止退出函數(shù)OSIntExit()標(biāo)志著中止服務(wù)子程序終止,OSIntExit()將中止嵌套層數(shù)計(jì)數(shù)器減1。當(dāng)中止嵌套計(jì)數(shù)器減到零而且調(diào)度未被禁止(OSLockNesting=0),μC/OS-II要重新開(kāi)始調(diào)度。12月15日32南京大學(xué)計(jì)算機(jī)系第32頁(yè)μC/OS-II時(shí)間管理μC/OS-II能夠提供周期性時(shí)鐘信號(hào),節(jié)拍率10~100Hz。用戶必須在多任務(wù)系統(tǒng)開(kāi)啟以后即在調(diào)用OSStart()之后激活時(shí)鐘節(jié)拍信號(hào)發(fā)生器時(shí)鐘節(jié)拍中止服務(wù)子程序必須用匯編語(yǔ)言編寫(xiě)每當(dāng)硬件定時(shí)器發(fā)出節(jié)拍中止請(qǐng)求,μC/OS-II就要響應(yīng)這個(gè)中止12月15日33南京大學(xué)計(jì)算機(jī)系第33頁(yè)μC/OS-II時(shí)間管理(續(xù))μC/OS-II時(shí)間管理函數(shù)
節(jié)拍延時(shí)函數(shù)OSTimeDly() 該函數(shù)經(jīng)常位于任務(wù)函數(shù)結(jié)束處,用以退出運(yùn)行,用戶能夠借助定義全局常數(shù)OS_TICKS_PER_SECOSTimeDlyHMSM() 該函數(shù)能夠按小時(shí)(H)、分(M)、秒(S)和毫秒(m)來(lái)定義時(shí)間OSTimeDlyResume() 依據(jù)需要正處于延時(shí)期任務(wù)能夠被用戶中止延時(shí)
12月15日34南京大學(xué)計(jì)算機(jī)系第34頁(yè)μC/OS-II任務(wù)間通信μC/OS-II中保護(hù)任務(wù)間共享數(shù)據(jù)和提供任務(wù)間通信主要三種方式利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)關(guān)閉中止和打開(kāi)中止利用函數(shù)OSSchedLock()和OSSchekUnlock()對(duì)μC/OS-II中任務(wù)調(diào)度函數(shù)上鎖和開(kāi)鎖利用信號(hào)量、互斥信號(hào)量、郵箱和消息隊(duì)列進(jìn)行任務(wù)間通信,屬于事件控制同時(shí)與通信。12月15日35南京大學(xué)計(jì)算機(jī)系第35頁(yè)μC/OS-II任務(wù)間通信(續(xù)1)事件控制塊ECB用于實(shí)現(xiàn)信號(hào)量管理、互斥型信號(hào)量管理、消息郵箱以及消息隊(duì)列管理ITC功效函數(shù)基本數(shù)據(jù)結(jié)構(gòu)μC/OS-IIECB有4種類型:OSSemCreate()、OSMutexCreate()、OSMboxCreate()、OSQCreate()12月15日36南京大學(xué)計(jì)算機(jī)系第36頁(yè)μC/OS-II任務(wù)間通信(續(xù)2)基于ECB任務(wù)間通信一個(gè)任務(wù)或者中止服務(wù)子程序能夠經(jīng)過(guò)事件控制塊ECB來(lái)向另外任務(wù)發(fā)信號(hào)事件控制塊作用見(jiàn)下頁(yè)圖示12月15日37南京大學(xué)計(jì)算機(jī)系第37頁(yè)μC/OS-II任務(wù)間通信(續(xù)3)事件控制塊作用12月15日38南京大學(xué)計(jì)算機(jī)系第38頁(yè)μC/OS-II任務(wù)間通信(續(xù)4)上圖ITC操作說(shuō)明任務(wù)或中止服務(wù)子程序能夠給事件控制塊ECB發(fā)信號(hào)。只有任務(wù)能夠等候另一個(gè)任務(wù)或中止服務(wù)子程序經(jīng)過(guò)事件控制塊ECB給它發(fā)送信號(hào),而中止服務(wù)子程序是不能等候事件控制塊ECB給它發(fā)送信號(hào)。處于等候狀態(tài)任務(wù)能夠指定一個(gè)最長(zhǎng)等候時(shí)間多個(gè)任務(wù)能夠同時(shí)等候同一事件發(fā)生。當(dāng)事件控制塊ECB是一個(gè)信號(hào)量時(shí),任務(wù)能夠等候它,也能夠給它發(fā)送消息12月15日39南京大學(xué)計(jì)算機(jī)系第39頁(yè)μC/OS-II任務(wù)間通信(續(xù)5)信號(hào)量控制下任務(wù)間通信在μC/OS-II下,用信號(hào)量進(jìn)行任務(wù)間通信時(shí),先用信號(hào)量創(chuàng)建函數(shù)OSSemCreate創(chuàng)建一個(gè)信號(hào)量,且對(duì)該信號(hào)量賦初始計(jì)數(shù)值。假如信號(hào)量是用來(lái)表示一個(gè)或者多個(gè)事件發(fā)生,那么該信號(hào)量初始值應(yīng)設(shè)為0假如信號(hào)量是用于對(duì)共享資源訪問(wèn),那么該信號(hào)量初始值應(yīng)設(shè)為1假如該信號(hào)量是用來(lái)表示允許任務(wù)訪問(wèn)n個(gè)相同資源,那么該初始值顯然應(yīng)該是n,并把該信號(hào)量作為一個(gè)可計(jì)數(shù)信號(hào)量使用。12月15日40南京大學(xué)計(jì)算機(jī)系第40頁(yè)μC/OS-II內(nèi)存管理嵌入式內(nèi)存管理含虛擬存放器:硬件提供MMU,軟件提供虛擬存放器管理模塊不含虛擬存放器:段式管理段式管理下存放器分配固定分區(qū)法 固定分區(qū)法指內(nèi)存中分區(qū)個(gè)數(shù)固定不變,依據(jù)分區(qū)大小不一樣,還能夠分為等分方式和分區(qū)差分方式動(dòng)態(tài)分區(qū)法 各個(gè)分區(qū)大小是在對(duì)應(yīng)進(jìn)程需要內(nèi)存時(shí)依據(jù)需要建立12月15日41南京大學(xué)計(jì)算機(jī)系第41頁(yè)μC/OS-II內(nèi)存管理(續(xù)1)μC/OS-II內(nèi)存管理改進(jìn)型固定分區(qū)法,由操作系統(tǒng)把連續(xù)大塊內(nèi)存按分區(qū)進(jìn)行管理每個(gè)分區(qū)包含整數(shù)個(gè)大小相同內(nèi)存塊:兩級(jí)固定分區(qū)μC/OS-II對(duì)malloc()和free()進(jìn)行了改進(jìn)μC/OS-II中使用內(nèi)存控制塊數(shù)據(jù)結(jié)構(gòu)跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中每個(gè)內(nèi)存分區(qū)都有它自己內(nèi)存控制塊12月15日42南京大學(xué)計(jì)算機(jī)系第42頁(yè)μC/OS-II內(nèi)存管理(續(xù)2)μC/OS-II對(duì)內(nèi)存管理經(jīng)過(guò)以下四個(gè)函數(shù)完成創(chuàng)建一個(gè)內(nèi)存分區(qū):OSMemCreate()分配一個(gè)內(nèi)存塊:OSMemGet()釋放一個(gè)內(nèi)存塊:OSMemPut()查詢一個(gè)內(nèi)存分區(qū)狀態(tài):OSMemQuery()12月15日43南京大學(xué)計(jì)算機(jī)系第43頁(yè)μC/OS-II移植移植μC/OS-II必須滿足以下要求處理器C編譯器能產(chǎn)生可重入代碼用C語(yǔ)言能夠打開(kāi)和關(guān)閉中止處理器支持中止,而且能產(chǎn)生定時(shí)中止處理器支持能夠容納一定量數(shù)據(jù)硬件棧區(qū)處理器有將棧區(qū)指針和其它CPU存放器讀出和存放到棧區(qū)或內(nèi)存中指令12月15日44南京大學(xué)計(jì)算機(jī)系第44頁(yè)μC/OS-II移植(續(xù)1)基本配置和定義基本配置和定義全部集中在OS_CPU.H中定義和編譯器相關(guān)數(shù)據(jù)結(jié)構(gòu)定義關(guān)中止和開(kāi)中止宏定義棧指針增加方向12月15日45南京大學(xué)計(jì)算機(jī)系第45頁(yè)μC/OS-II移植(續(xù)2)與移植相關(guān)四個(gè)匯編語(yǔ)言程序OSStartHighRdy():運(yùn)行優(yōu)先級(jí)最高任務(wù)OSCtxSw():任務(wù)級(jí)任務(wù)切換函數(shù)OSintCtxSw():中止級(jí)任務(wù)切換函數(shù)OSTickISR():時(shí)鐘節(jié)拍中止服務(wù)子程序12月15日46南京大學(xué)計(jì)算機(jī)系第46頁(yè)需要移植匯編子程序(函數(shù))OSTickISROSTickISR()――時(shí)鐘節(jié)拍中止服務(wù)子程序時(shí)鐘節(jié)拍起源于硬件電路,它是嵌入式操作系統(tǒng)基本定時(shí)單位OSTickISR()首先在被中止任務(wù)棧區(qū)中保留CPU存放器值,調(diào)用OSIntEnter(),該函數(shù)將中止嵌套統(tǒng)計(jì)值OSIntNesting加1OSTickISR()然后調(diào)用OSTimeTick()OSTickISR()最終調(diào)用OSIntExit()12月15日47南京大學(xué)計(jì)算機(jī)系第47頁(yè)μC/OS-II移植(續(xù)3)與移植相關(guān)主要C函數(shù)需要在OS_CPU_C.C文件中改寫(xiě)10個(gè)簡(jiǎn)單C函數(shù),其中必須修改函數(shù)是OSTaskStkInit(),其余9個(gè)都是用戶接口函數(shù)用戶接口函數(shù)調(diào)用位置都是在任務(wù)狀態(tài)發(fā)生顯著變動(dòng)地方OSTaskStkInit()函數(shù)用于初始化任務(wù)自用棧區(qū),它在任務(wù)創(chuàng)建時(shí)被調(diào)用,負(fù)責(zé)在內(nèi)存開(kāi)辟該任務(wù)棧工作區(qū),然后返回該棧棧頂指針stk。12月15日48南京大學(xué)計(jì)算機(jī)系第48頁(yè)相關(guān)μC/OS-II源代碼通讀通讀μC/OS-II源
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 普車中級(jí)理論試題及答案
- 德育考試試題及答案
- 2024年紡織品個(gè)人職業(yè)規(guī)劃題及答案
- 廠中考試題庫(kù)及答案
- 病案書(shū)寫(xiě)考試題庫(kù)及答案
- 安康語(yǔ)文面試題目及答案
- 數(shù)字?jǐn)z影考試試題及答案
- 2024年紡織設(shè)計(jì)師證書(shū)取得方式與試題及答案
- 江蘇四市語(yǔ)文試題及答案
- 波譜測(cè)試題及答案大全
- 化工裝置報(bào)廢拆除施工方案
- 職場(chǎng)心態(tài)-培訓(xùn)課件
- 第四屆全國(guó)智能制造應(yīng)用技術(shù)技能大賽決賽-儀器儀表制造工(儀器儀表與智能傳感應(yīng)用技術(shù))賽項(xiàng)競(jìng)賽平臺(tái)主要設(shè)備技術(shù)標(biāo)準(zhǔn)
- 統(tǒng)編版 高中語(yǔ)文 選擇性必修下 第二單元《邊城》
- 白內(nèi)障患者護(hù)理教學(xué)查房
- 幼兒園 中班心理健康《我會(huì)傾訴》
- 機(jī)械租賃保障措施
- 2024-2030年中國(guó)病號(hào)服行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 洗煤廠安全應(yīng)急預(yù)案
- 抖音火花合同模板
- 掬水月在手-古典詩(shī)詞與現(xiàn)代人生智慧樹(shù)知到期末考試答案章節(jié)答案2024年南開(kāi)大學(xué)
評(píng)論
0/150
提交評(píng)論