版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章uC/OS-II操作系統(tǒng),1,內(nèi) 容,6.1 uCOS-II操作系統(tǒng)簡(jiǎn)介 6.2 uCOS-II操作系統(tǒng)內(nèi)核結(jié)構(gòu) 6.3 uCOS-II操作系統(tǒng)任務(wù)管理 6.4 uCOS-II操作系統(tǒng)內(nèi)存管理 6.5 uCOS-II操作系統(tǒng)時(shí)間管理 6.6 uCOS-II操作系統(tǒng)任務(wù)間的通訊 6.7 uCOS-II操作系統(tǒng)移植,2,6.1 uC/OS-II簡(jiǎn)介,1、uC/OS-II是一個(gè)簡(jiǎn)單、高效的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核 2、支持 x86、ARM、PowerPC、MIPS 等眾多體系結(jié)構(gòu) 3、可從www.ucos-網(wǎng)站上獲得全部源碼及其在各種體系結(jié)構(gòu)平臺(tái)上的移植范例。,3,uC/OS-II的特點(diǎn),1、u
2、C/OS-II內(nèi)核具有可搶占的實(shí)時(shí)多任務(wù)調(diào)度功能 2、提供了許多系統(tǒng)服務(wù),如信號(hào)量、消息隊(duì)列、郵箱、內(nèi)存管理、時(shí)間函數(shù)等 3、這些功能可以根據(jù)不同的需求進(jìn)行裁減。,4,C/OS-II的各種商業(yè)應(yīng)用,全世界有數(shù)百種產(chǎn)品在應(yīng)用: 醫(yī)療器械 移動(dòng)電話 路由器 工業(yè)控制 GPS 導(dǎo)航系統(tǒng) 智能儀器 更多,5,目的:為了實(shí)現(xiàn)資源共享。 實(shí)現(xiàn)方法:進(jìn)入臨界段時(shí)關(guān)中斷,退出臨界段時(shí)開(kāi)中斷。這使得C/OS-能夠在臨界段代碼時(shí)避免被其它任務(wù)或中斷服務(wù)所中斷。 C/OS-定義兩個(gè)宏(macros)來(lái)開(kāi)關(guān)中斷。分別是: 進(jìn)入臨界段:OS_ENTER_CRITICAL() 退出臨界段:OS_EXIT_CRITICAL
3、()。 這兩個(gè)宏的定義取決于所用的微處理器,每種微處理器都有自己的OS_CPU.H文件。,臨界段(Critical Sections),6,任務(wù)(task),一個(gè)任務(wù)通常是一個(gè)無(wú)限的循環(huán): void mytask(void *pdata) do init while (1) do something; waiting; do something; ,7,任務(wù)(task),C/OS-可以管理多達(dá)64個(gè)任務(wù)。 優(yōu)先級(jí)為0-63 優(yōu)先級(jí)號(hào)越低,任務(wù)的優(yōu)先級(jí)越高。 每個(gè)任務(wù)的優(yōu)先級(jí)不能相同。 保留優(yōu)先級(jí): 高優(yōu)先級(jí):0、1、2、3 低優(yōu)先級(jí):OS_LOWEST_PRIO-3、OS_LOWEST_PRI
4、0-2,OS_LOWEST_PRI0-1以及OS_LOWEST_PRI0 用戶可以有多達(dá)56個(gè)應(yīng)用任務(wù)。,8,中斷處理,用戶中斷服務(wù)子程序框架: 1、保存全部CPU寄存器; 2、調(diào)用OSIntEnter或OSIntNesting直接加1; 3、執(zhí)行用戶代碼做中斷服務(wù); 4、調(diào)用OSIntExit(); 5、恢復(fù)所有CPU寄存器; 6、執(zhí)行中斷返回指令;,9,OSIntEnter(),void OSIntEnter (void) OS_ENTER_CRITICAL(); OSIntNesting+; OS_EXIT_CRITICAL(); ,10,OSIntExit,OS_ENTER_CRITI
5、CAL(); if (-OSIntNesting | OSLockNesting) = 0) OSIntExitY = OSUnMapTblOSRdyGrp; OSPrioHighRdy = (INT8U)(OSIntExitY 3) + OSUnMapTblOSRdyTblOSIntExitY); if (OSPrioHighRdy != OSPrioCur) OSTCBHighRdy=OSTCBPrioTblOSPrioHighRdy; OSCtxSwCtr+; OSIntCtxSw(); OS_EXIT_CRITICAL();,11,中斷與時(shí)鐘節(jié)拍,當(dāng)發(fā)生中斷時(shí),首先應(yīng)保護(hù)現(xiàn)場(chǎng),將CPU
6、寄存器入棧,再處理中斷函數(shù),然后恢復(fù)現(xiàn)場(chǎng),將CPU寄存器出棧,最后執(zhí)行中斷返回。 uC/OS中提供了OSIntEnter()和OSIntExit()告訴內(nèi)核進(jìn)入了中斷狀態(tài)。 時(shí)鐘節(jié)拍是一種特殊的中斷,操作系統(tǒng)的心臟。對(duì)任務(wù)列表進(jìn)行掃描,判斷是否有延時(shí)任務(wù)應(yīng)該處于準(zhǔn)備就緒狀態(tài),最后進(jìn)行上下文切換。,12,時(shí)鐘節(jié)拍,C/OS需要用戶提供周期性信號(hào)源,用于實(shí)現(xiàn)時(shí)間延時(shí)和確認(rèn)超時(shí)。節(jié)拍率應(yīng)在說(shuō)10到100Hz。時(shí)鐘節(jié)拍率越高,系統(tǒng)的額外負(fù)荷就越重。 時(shí)鐘節(jié)拍的實(shí)際頻率取決于用戶應(yīng)用程序的精度。時(shí)鐘節(jié)拍源可以是專門(mén)的硬件定時(shí)器,也可以是來(lái)自50/60Hz交流電源的信號(hào)。 用戶必須在多任務(wù)系統(tǒng)啟動(dòng)以后再開(kāi)
7、啟時(shí)鐘節(jié)拍器,也就是在調(diào)用OSStart()之后。,13,OSTickISR,void OSTickISR(void) 保存處理器寄存器的值; 調(diào)用OSIntEnter()或是將OSIntNesting加1; 調(diào)用OSTimeTick(); 調(diào)用OSIntExit(); 恢復(fù)處理器寄存器的值; 執(zhí)行中斷返回指令; ,14,C/OS-初始化,在調(diào)用C/OS-的任何其它服務(wù)之前,C/OS-要求用戶首先調(diào)用系統(tǒng)初始化函數(shù)OSInit()。 OSInit()建立空閑任務(wù)idle task,這個(gè)任務(wù)總是處于就緒態(tài)的??臻e任務(wù)OSTaskIdle()的優(yōu)先級(jí)總是設(shè)成最低,即OS_LOWEST_PRIO。
8、C/OS-還初始化了4個(gè)空數(shù)據(jù)結(jié)構(gòu)緩沖區(qū)。,15,C/OS-初始化后的一些數(shù)據(jù)結(jié)構(gòu)內(nèi)容,16,C/OS-初始化后的緩沖區(qū),17,C/OS-的啟動(dòng),多任務(wù)的啟動(dòng)是用戶通過(guò)調(diào)用OSStart()實(shí)現(xiàn)的。然而,啟動(dòng)C/OS-之前,用戶至少要建立一個(gè)應(yīng)用任務(wù)。 OSInit(); /* 初始化uC/OS-II*/ 調(diào)用OSTaskCreate()或OSTaskCreateExt(); OSStart(); /*開(kāi)始多任務(wù)調(diào)度!永不返回 */,18,OSStart,if (OSRunning = FALSE) y = OSUnMapTblOSRdyGrp; x = OSUnMapTblOSRdyTbly
9、; OSPrioHighRdy = (INT8U)(y 3) + x); OSPrioCur = OSPrioHighRdy; OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy; OSTCBCur = OSTCBHighRdy; OSStartHighRdy(); ,19,任務(wù)狀態(tài),20,任務(wù)控制塊(TCB),任務(wù)控制塊 OS_TCB是一個(gè)數(shù)據(jù)結(jié)構(gòu),保存該任務(wù)的相關(guān)參數(shù),包括任務(wù)堆棧指針,狀態(tài),優(yōu)先級(jí),任務(wù)表位置,任務(wù)鏈表指針等。 一旦任務(wù)建立了,任務(wù)控制塊OS_TCBs將被賦值。 所有的任務(wù)控制塊分為兩條鏈表,空閑鏈表和使用鏈表。,21,任務(wù)控制塊結(jié)構(gòu)的主要成
10、員,OS_STK *OSTCBStkPtr; /*當(dāng)前任務(wù)棧頂?shù)闹羔?/ struct os_tcb *OSTCBNext; /*任務(wù)控制塊的雙重鏈接指針*/ struct os_tcb *OSTCBPrev; /*任務(wù)控制塊的雙重鏈接指針*/ OS_EVENT *OSTCBEventPtr; /*事件控制塊的指針*/ void *OSTCBMsg; /*消息的指針*/ INT16U OSTCBDly; /*任務(wù)延時(shí)*/ INT8U OSTCBStat; /*任務(wù)的狀態(tài)字*/ INT8U OSTCBPrio; /*任務(wù)優(yōu)先級(jí)*/ INT8U OSTCBX; /*用于加速進(jìn)入就緒態(tài)的過(guò)程*/ I
11、NT8U OSTCBY; /*用于加速進(jìn)入就緒態(tài)的過(guò)程*/ INT8U OSTCBBitX; /*用于加速進(jìn)入就緒態(tài)的過(guò)程*/ INT8U OSTCBBitY; /*用于加速進(jìn)入就緒態(tài)的過(guò)程*/,22,任務(wù)就緒表(Ready List),每個(gè)任務(wù)的就緒態(tài)標(biāo)志都放入就緒表中的,就緒表中有兩個(gè)變量OSRdyGrp和OSRdyTbl。 在OSRdyGrp中,任務(wù)按優(yōu)先級(jí)分組,8個(gè)任務(wù)為一組。OSRdyGrp中的每一位表示8組任務(wù)中每一組中是否有進(jìn)入就緒態(tài)的任務(wù)。任務(wù)進(jìn)入就緒態(tài)時(shí),就緒表OSRdyTbl中的相應(yīng)元素的相應(yīng)位也置位。,23,任務(wù)就緒表,24,任務(wù)創(chuàng)建,想讓C/OS-管理用戶的任務(wù),用戶必
12、須要先建立任務(wù)。 用戶可以通過(guò)傳遞任務(wù)地址和其它參數(shù)到以下兩個(gè)函數(shù)之一來(lái)建立任務(wù): OSTaskCreate() OSTaskCreateExt()。 任務(wù)不能由中斷服務(wù)程序(ISR)來(lái)建立。,25,任務(wù)調(diào)度(Task Scheduling),C/OS是搶占式實(shí)時(shí)多任務(wù)內(nèi)核,優(yōu)先級(jí)最高的任務(wù)一旦準(zhǔn)備就緒,則擁有CPU的所有權(quán)開(kāi)始投入運(yùn)行。 C/OS中不支持時(shí)間片輪轉(zhuǎn)法,每個(gè)任務(wù)的優(yōu)先級(jí)要求不一樣且是唯一的,所以任務(wù)調(diào)度的工作就是:查找準(zhǔn)備就緒的最高優(yōu)先級(jí)的任務(wù)并進(jìn)行上下文切換。 C/OS任務(wù)調(diào)度所花的時(shí)間為常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無(wú)關(guān)。,26,任務(wù)調(diào)度(Task Scheduling),
13、C/OS-總是運(yùn)行進(jìn)入就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的那一個(gè)。確定哪個(gè)任務(wù)優(yōu)先級(jí)最高,下面該哪個(gè)任務(wù)運(yùn)行了的工作是由調(diào)度器(Scheduler)完成的。 任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成的。中斷級(jí)的調(diào)度是由另一個(gè)函數(shù)OSIntExt()完成的,這個(gè)函數(shù)將在以后描述。,27,根據(jù)就緒表確定最高優(yōu)先級(jí),通過(guò)OSRdyGrp值確定高3位,假設(shè)OSRdyGrp0 x08,對(duì)應(yīng)OSRdyTbl3,高優(yōu)先級(jí)為2; 通過(guò)OSRdyTbl3的值來(lái)確定低3位,假設(shè)OSRdyTbl30 x3a,最高優(yōu)先級(jí)的任務(wù)為25,28,使任務(wù)進(jìn)入就緒態(tài),如果prio是任務(wù)是優(yōu)先級(jí),也是任務(wù)的識(shí)別號(hào),則將任務(wù)放入就緒表,即使
14、任務(wù)進(jìn)入就緒態(tài)的方法是: OSRdyGrp |=OSMapTblprio3; OSRdyTblprio3 |=OSMapTblprio ,29,使任務(wù)脫離就緒態(tài),將任務(wù)就緒表OSRdyTblprio3相應(yīng)元素的相應(yīng)位清零,而且當(dāng)OSRdyTblprio3中的所有位都為零時(shí),即全組任務(wù)中沒(méi)有一個(gè)進(jìn)入就緒態(tài)時(shí),OSRdyGrp的相應(yīng)位才為零。 if(OSRdyTblprio3,30,任務(wù)調(diào)度器,void OSSched (void) INT8U y; OS_ENTER_CRITICAL(); if (OSLockNesting | OSIntNesting) = 0) y = OSUnMapTbl
15、OSRdyGrp; OSPrioHighRdy = (INT8U)(y 3) + OSUnMapTblOSRdyTbly); if (OSPrioHighRdy != OSPrioCur) OSTCBHighRdy = OSTCBPrioTblOSPrioHighRdy; OSCtxSwCtr+; OS_TASK_SW(); OS_EXIT_CRITICAL(); ,31,任務(wù)切換,將被掛起的任務(wù)寄存器入棧 將較高優(yōu)先級(jí)任務(wù)的寄存器出棧,32,任務(wù)級(jí)的任務(wù)切換OS_TASK_SW(),通過(guò)系統(tǒng)調(diào)用指令完成 保護(hù)當(dāng)前任務(wù)的現(xiàn)場(chǎng) 恢復(fù)新任務(wù)的現(xiàn)場(chǎng) 執(zhí)行中斷返回指令 開(kāi)始執(zhí)行新的任務(wù),33,調(diào)用OS
16、_TASK_SW()前的數(shù)據(jù)結(jié)構(gòu),低優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBCur (1),存貯器低地址,存貯器高地址,堆棧方向,SP,R1,R2,R3,R4,PC,PSW,存貯器低地址,存貯器高地址,高優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBHighRdy (3),(2),CPU,(4),(5),34,保存當(dāng)前CPU寄存器的值,低優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBCur,存貯器低地址,存貯器高地址,堆棧方向,SP,R1,R2,R3,R4,PC,PSW,存貯器低地址,存貯器高地址,高優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBHighRdy (3),(2),CPU,(4),(5),(1),(3),35,重新
17、裝入要運(yùn)行的任務(wù),低優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBCur,存貯器低地址,存貯器高地址,堆棧方向,SP,R1,R2,R3,R4,PC,PSW,存貯器低地址,存貯器高地址,高優(yōu)先級(jí)任務(wù) OS_TCB,OSTCBHighRdy OSTCBCur (1),(2),CPU,(4),(4),(1),(3),(3),(4),36,任務(wù)切換OS_TASK_SW()的代碼,Void OSCtxSw(void) 將R1,R2,R3及R4推入當(dāng)前堆棧; OSTCBCurOSTCBStkPtr = SP; OSTCBCur = OSTCBHighRdy; SP = OSTCBHighRdy OSTCBSTKPt
18、r; 將R4,R3,R2及R1從新堆棧中彈出; 執(zhí)行中斷返回指令; ,37,內(nèi)存管理,在ANSI C中可以用malloc()和free()兩個(gè)函數(shù)動(dòng)態(tài)地分配內(nèi)存和釋放內(nèi)存。在嵌入式實(shí)時(shí)操作系統(tǒng)中,容易產(chǎn)生內(nèi)存碎片。 C/OS-II中,操作系統(tǒng)把連續(xù)的大塊內(nèi)存按分區(qū)來(lái)管理。每個(gè)分區(qū)中包含有整數(shù)個(gè)大小相同的內(nèi)存塊。 在一個(gè)系統(tǒng)中可以有多個(gè)內(nèi)存分區(qū)。這樣,用戶的應(yīng)用程序就可以從不同的內(nèi)存分區(qū)中得到不同大小的內(nèi)存塊。但是,特定的內(nèi)存塊在釋放時(shí)必須重新放回它以前所屬于的內(nèi)存分區(qū)。,38,內(nèi)存分區(qū)示意圖,39,內(nèi)存控制塊,為了便于內(nèi)存的管理,在C/OS-II中使用內(nèi)存控制塊(memory control
19、blocks)的數(shù)據(jù)結(jié)構(gòu)來(lái)跟蹤每一個(gè)內(nèi)存分區(qū),系統(tǒng)中的每個(gè)內(nèi)存分區(qū)都有它自己的內(nèi)存控制塊。 typedef struct void *OSMemAddr; /*分區(qū)起始地址*/ void *OSMemFreeList;/*下一個(gè)空閑內(nèi)存塊*/ INT32U OSMemBlkSize;/*內(nèi)存塊的大小*/ INT32U OSMemNBlks;/*內(nèi)存塊數(shù)量*/ INT32U OSMemNFree;/*空閑內(nèi)存塊數(shù)量 */ OS_MEM;,40,內(nèi)存管理初始化,如果要在C/OS-II中使用內(nèi)存管理,需要在OS_CFG.H文件中將開(kāi)關(guān)量OS_MEM_EN設(shè)置為1。這樣C/OS-II 在啟動(dòng)時(shí)就會(huì)對(duì)內(nèi)
20、存管理器進(jìn)行初始化 (OSMemInit() )。,41,建立一個(gè)內(nèi)存分區(qū),OSMemCreate(),在使用一個(gè)內(nèi)存分區(qū)之前,必須使用OSMemCreate()先建立該內(nèi)存分區(qū)。該函數(shù)共有4個(gè)參數(shù):內(nèi)存分區(qū)的起始地址、分區(qū)內(nèi)的內(nèi)存塊總塊數(shù)、每個(gè)內(nèi)存塊的字節(jié)數(shù)和一個(gè)指向錯(cuò)誤信息代碼的指針。 每個(gè)內(nèi)存分區(qū)必須含有至少兩個(gè)內(nèi)存塊,每個(gè)內(nèi)存塊至少為一個(gè)指針的大小 。 OS_MEM *CommTxBuf; INT8U CommTxPart10032; CommTxBuf = OSMemCreate(CommTxPart, 100, 32, ,42,分配一個(gè)內(nèi)存塊,OSMemGet(),調(diào)用OSMemG
21、et()函數(shù)從已經(jīng)建立的內(nèi)存分區(qū)中申請(qǐng)一個(gè)內(nèi)存塊。該函數(shù)的唯一參數(shù)是指向特定內(nèi)存分區(qū)的指針,該指針在建立內(nèi)存分區(qū)時(shí),由OSMemCreate()函數(shù)返回。 注意的是,用戶可以在中斷服務(wù)子程序中調(diào)用OSMemGet(),因?yàn)樵跁簳r(shí)沒(méi)有內(nèi)存塊可用的情況下,OSMemGet()不會(huì)等待,而是馬上返回NULL指針。,43,釋放一個(gè)內(nèi)存塊,OSMemPut(),應(yīng)用程序不再使用一個(gè)內(nèi)存塊時(shí),必須及時(shí)地把它釋放并放回到相應(yīng)的內(nèi)存分區(qū)中。這個(gè)操作由OSMemPut()函數(shù)完成。 必須注意的是,OSMemPut()并不知道一個(gè)內(nèi)存塊是屬于哪個(gè)內(nèi)存分區(qū)的。 釋放內(nèi)存塊時(shí)必須將它釋放到正確的分區(qū)。,44,時(shí)間管理
22、,C/OS-(其它內(nèi)核也一樣)要求用戶提供定時(shí)中斷來(lái)實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能。這個(gè)定時(shí)中斷叫做時(shí)鐘節(jié)拍,它應(yīng)該每秒發(fā)生10至100次。時(shí)鐘節(jié)拍的頻率越高,系統(tǒng)的負(fù)荷就越重。 與時(shí)鐘管理相關(guān)的系統(tǒng)服務(wù)有: OSTimeDLY() OSTimeDLYHMSM() OSTimeDlyResmue() OStimeGet() OSTimeSet(),45,任務(wù)間通信手段,C/OS中,采用多種方法保護(hù)任務(wù)之間的共享數(shù)據(jù)和提供任務(wù)之間的通信。 提供OS_ENTER_CRITICAL和OS_EXIT_CRITICAL來(lái)對(duì)臨界資源進(jìn)行保護(hù) OSSchedLock( )禁止調(diào)度保護(hù)任務(wù)級(jí)的共享資源。 提供了經(jīng)典
23、操作系統(tǒng)任務(wù)間通信方法:信號(hào)量、郵箱、消息隊(duì)列,事件標(biāo)志。,46,事件控制塊ECB,所有的通信信號(hào)都被看成是事件(event), 一個(gè)稱為事件控制塊(ECB, Event Control Block)的數(shù)據(jù)結(jié)構(gòu)來(lái)表征每一個(gè)具體事件,ECB的結(jié)構(gòu)如下: typedef struct void *OSEventPtr; /*指向消息或消息隊(duì)列的指針*/ INT8U OSEventTblOS_EVENT_TBL_SIZE; /*等待任務(wù)列表*/ INT16U OSEventCnt; /*計(jì)數(shù)器(事件是信號(hào)量時(shí))*/ INT8U OSEventType; /*事件類型:信號(hào)量、郵箱等*/ INT8U
24、OSEventGrp; /*等待任務(wù)組*/ OS_EVENT; 與TCB類似的結(jié)構(gòu),使用兩個(gè)鏈表,空閑鏈表與使用鏈表,47,信號(hào)量semaphore,信號(hào)量在多任務(wù)系統(tǒng)中用于:控制共享資源的使用權(quán)、標(biāo)志事件的發(fā)生、使兩個(gè)任務(wù)的行為同步。 uC/OS中信號(hào)量由兩部分組成:信號(hào)量的計(jì)數(shù)值和等待該信號(hào)任務(wù)的等待任務(wù)表。信號(hào)量的計(jì)數(shù)值可以為二進(jìn)制, 也可以是其他整數(shù)。 系統(tǒng)通過(guò)OSSemPend( )和OSSemPost( )來(lái)支持信號(hào)量的兩種原子操作P()和V()。P()操作減少信號(hào)量的值,如果新的信號(hào)量的值不大于0,則操作阻塞;V()操作增加信號(hào)量的值。,48,總結(jié),不存在一個(gè)內(nèi)核任務(wù)/實(shí)體,內(nèi)核
25、的管理是通過(guò)調(diào)用系統(tǒng)函數(shù)來(lái)實(shí)現(xiàn)的。 每個(gè)任務(wù)有自己的堆棧空間。內(nèi)核對(duì)任務(wù)的占先式調(diào)度不會(huì)干擾每個(gè)任務(wù)的總的運(yùn)行結(jié)果。,49,COS-II在ARM9上的移植,所謂移植,是指使一個(gè)實(shí)時(shí)操作系統(tǒng)能夠在某個(gè)微處理器平臺(tái)上運(yùn)行。COS-II的主要代碼都是由標(biāo)準(zhǔn)的C語(yǔ)言寫(xiě)成的,移植方便。,50,移植COS-II滿足的條件,處理器的C編譯器能產(chǎn)生可重入代碼 在程序中可以打開(kāi)或者關(guān)閉中斷 處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在101000Hz之間) 處理器支承能夠容納一定量數(shù)據(jù)的硬件堆棧 處理器有將堆棧指針和其他CPU寄存器存儲(chǔ)和讀出到堆棧(或者內(nèi)存)的指令,51,打開(kāi)/關(guān)閉中斷,在COS-II中,可以通
26、過(guò): OS_ENTER_CRITICAL () OS_EXIT_CRITICAL() 宏來(lái)控制系統(tǒng)關(guān)閉或者打開(kāi)中斷。這需要處理器的支持。 在ARM7TDMI的處理器上,可以設(shè)置相應(yīng)的寄存器來(lái)關(guān)閉或者打開(kāi)系統(tǒng)的所有中斷。,52,處理器支持中斷并且能產(chǎn)生定時(shí)中斷,COS-II是通過(guò)處理器產(chǎn)生的定時(shí)器的中斷來(lái)實(shí)現(xiàn)多任務(wù)之間的調(diào)度的。ARM7TDMI的處理器上可以產(chǎn)生定時(shí)器中斷。 本系統(tǒng)工作在60MHz的主頻下,定時(shí)器的中斷的頻率為100Hz。也就是系統(tǒng)的響應(yīng)時(shí)間為10ms。,53,處理器支持硬件堆棧,COS-II進(jìn)行任務(wù)調(diào)度的時(shí)候,會(huì)把當(dāng)前任務(wù)的CPU寄存器存放到此任務(wù)的堆棧中,然后,再?gòu)牧硪粋€(gè)任務(wù)的堆棧中恢復(fù)原來(lái)的工作寄存器,繼續(xù)運(yùn)行另一個(gè)任務(wù)。所以,寄存器的入棧和出棧是COS-II多任務(wù)調(diào)度的基礎(chǔ)。 ARM7處理器中有專門(mén)的指令處理堆棧,可以靈活的使用堆棧。,54,例:C/OS-II在S3C2410上的移植,設(shè)置OS_CPU.H中與處理器和編譯器相關(guān)的代碼 用C語(yǔ)言編寫(xiě)六個(gè)操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C) 用匯編語(yǔ)言編寫(xiě)四個(gè)與處理器相關(guān)的函數(shù)(OS_CPU.ASM),55,設(shè)置與處理器和編譯器相關(guān)的代碼,
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鶴崗貨運(yùn)考試題目
- 2025年萊蕪貨運(yùn)資格證安檢考試題
- 小學(xué)二年級(jí)數(shù)學(xué)上口算紙
- 2025年濟(jì)寧道路客貨運(yùn)輸從業(yè)資格證b2考試題庫(kù)
- 2025年焦作道路運(yùn)輸從業(yè)人員從業(yè)資格考試
- 電焊工入職合同(2篇)
- 《北魏政治和北方民族大交融》聽(tīng)課評(píng)課記錄2(新部編人教版七年級(jí)上冊(cè)歷史)
- 2024-2025學(xué)年高中英語(yǔ)Module6TheInternetandTelecommunicationsSectionⅤWriting-正反觀點(diǎn)對(duì)比類議論文教案含解析外研版必修1
- 企業(yè)年終工作總結(jié)報(bào)告
- 公司人事部門(mén)年終工作總結(jié)
- 心理學(xué)基礎(chǔ)知識(shí)考試參考題庫(kù)500題(含答案)
- 北師大版小學(xué)三年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- DCMM練習(xí)題練習(xí)試題
- 《工業(yè)化建筑施工階段碳排放計(jì)算標(biāo)準(zhǔn)》
- GB/T 33761-2024綠色產(chǎn)品評(píng)價(jià)通則
- 地下停車場(chǎng)充電樁技術(shù)方案建議書(shū)
- 幼兒園設(shè)施設(shè)備安全教育
- 廢舊保溫棉處置合同范例
- 《人工智能簡(jiǎn)述》課件
- 《軌道交通工程盾構(gòu)施工技術(shù)》 課件 項(xiàng)目5 盾構(gòu)隧道防水施工
- 2024年數(shù)據(jù)編織價(jià)值評(píng)估指南白皮書(shū)-Aloudata
評(píng)論
0/150
提交評(píng)論