ucosii中的中斷

ucosii中的中斷

ID:37713275

大小:29.63 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2019-05-29

ucosii中的中斷_第1頁(yè)
ucosii中的中斷_第2頁(yè)
ucosii中的中斷_第3頁(yè)
ucosii中的中斷_第4頁(yè)
ucosii中的中斷_第5頁(yè)
資源描述:

《ucosii中的中斷》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、UC/OS-II中斷相關(guān)的問題要弄清楚以下函數(shù)的意義:OSTimeTick()在OS_CORE.C中,為時(shí)鐘管理函數(shù)。OSTickISR()在OS_CPU_A.S中以匯編的形式編寫。任何計(jì)算機(jī)系統(tǒng)都應(yīng)該有一系統(tǒng)時(shí)鐘,UCOS系統(tǒng)的系統(tǒng)時(shí)鐘是通過硬件定時(shí)器產(chǎn)生中斷來實(shí)現(xiàn)的,這個(gè)中斷會(huì)產(chǎn)生一個(gè)時(shí)鐘中斷服務(wù)程序,時(shí)鐘中斷服務(wù)程序也叫做節(jié)拍服務(wù)。各個(gè)任務(wù)運(yùn)行都需要一個(gè)周期性的信號(hào)指示,即每一個(gè)任務(wù)允許運(yùn)行的時(shí)間片是多少,必須規(guī)定好。這個(gè)時(shí)間片就是系統(tǒng)時(shí)鐘節(jié)拍UCOS系統(tǒng)響應(yīng)中斷的過程:系統(tǒng)正在運(yùn)行任務(wù),此時(shí)有中斷發(fā)生,且系統(tǒng)收到了中斷請(qǐng)求(系統(tǒng)如何收到中斷請(qǐng)求,中斷以何種方式告知

2、操作系統(tǒng)?)。如果處理器處于中斷允許狀態(tài),系統(tǒng)就中止當(dāng)前任務(wù)的運(yùn)行,而按照中斷向量去執(zhí)行相應(yīng)的中斷服務(wù)程序;中斷服務(wù)自程序結(jié)束前,會(huì)進(jìn)行一次任務(wù)調(diào)度。這樣中斷結(jié)束后,系統(tǒng)將會(huì)根據(jù)情況返回到被中止的任務(wù)繼續(xù)運(yùn)行,或者轉(zhuǎn)到另外一個(gè)具有更高優(yōu)先級(jí)的就緒任務(wù)上運(yùn)行。全局變量OSIntNesting有兩個(gè)用途:第一是用來記錄中斷嵌套的層數(shù),中斷嵌套也就是說當(dāng)?shù)谝粋€(gè)中斷發(fā)生而沒有結(jié)束的時(shí)候,又發(fā)生了第二個(gè)更重要的中斷,依次類推,此時(shí)OSIntNesting就用來表示嵌套的層數(shù),也就是有多少個(gè)中斷在發(fā)生或者等待處理,也就是說每當(dāng)有中斷發(fā)生時(shí),就將OSIntNesting加1,有中斷結(jié)束

3、的時(shí)候,就將OSIntNesting減1;第二是作為調(diào)度器是否可進(jìn)行調(diào)度的標(biāo)志,以保證調(diào)度器不會(huì)在中斷服務(wù)程序中進(jìn)行任務(wù)調(diào)度,也就是當(dāng)OSIntNesting大于0的時(shí)候,將調(diào)度器加鎖,OSIntNesting等于0的時(shí)候,調(diào)度器解鎖。(這樣理解調(diào)度器的加鎖和解鎖,是否正確?中斷服務(wù)自程序結(jié)束前,會(huì)進(jìn)行一次任務(wù)調(diào)度。這個(gè)時(shí)候調(diào)度器不是鎖上的嗎?如何調(diào)度呢?)UCOS用兩個(gè)函數(shù)OSIntEnter(void)和OSIntExit(void)來處理變量SIntNesting。voidOSIntEnter(void){if(OSRunning==TRUE){if(OSIntNe

4、sting<255u){OSIntNesting++;/*IncrementISRnestinglevel*/}}};這個(gè)函數(shù)的作用就是把SIntNesting加一,來記錄嵌套層數(shù),并為調(diào)度器加鎖。它經(jīng)常運(yùn)行在中斷服務(wù)程序保護(hù)用戶被中斷任務(wù)的端點(diǎn)數(shù)據(jù)之后,運(yùn)行用戶中斷服務(wù)代碼之前,通常叫做進(jìn)入中斷服務(wù)函數(shù)。消息量函數(shù)分析OS_EVENT*OSSemCreate(INT16Ucnt)消息量函數(shù)分析OS_EVENT*OSSemCreate(INT16Ucnt)OS_EVENT*OSSemCreate(INT16Ucnt);該函數(shù)返回的數(shù)據(jù)類型為指針,指針指向的數(shù)據(jù)類型為OS_

5、EVENT(事件的數(shù)據(jù)類型為結(jié)構(gòu)體)。也就是函數(shù)返回一個(gè)地址,地址里存的是新創(chuàng)建的結(jié)構(gòu)體類型所占據(jù)的內(nèi)存的首地址。OS_EVENT*pevent;pevent=OSEventFreeList;if(OSEventFreeList!=(OS_EVENT*)0){/*SeeifpooloffreeECBpoolwasempty*/OSEventFreeList=(OS_EVENT*)OSEventFreeList->OSEventPtr;};首先創(chuàng)建一個(gè)指向OS_EVENT結(jié)構(gòu)體類型的指針pevent;系統(tǒng)初始化時(shí)會(huì)創(chuàng)建一個(gè)空事件控制塊鏈表,而創(chuàng)建的空事件控制塊的數(shù)目由常數(shù)O

6、SEventMax來決定。OSEventFreeList就指向這個(gè)空事件控制塊鏈表的第一個(gè),所以上面的程序里把OSEventFreeList賦給了pevent,也就是讓pevent指向第一個(gè)空事件控制塊,然后又讓OSEventFreeList指向了空事件控制鏈表中的第二個(gè)。也就是從空事件鏈表中摘出了第一個(gè)給事件使用。if(pevent!=(OS_EVENT*)0){/*Getaneventcontrolblock*/pevent->OSEventType=OS_EVENT_TYPE_SEM;pevent->OSEventCnt=cnt;/*Setsemaphorevalu

7、e*/pevent->OSEventPtr=(void*)0;/*UnlinkfromECBfreelist*/#ifOS_EVENT_NAME_SIZE>1pevent->OSEventName[0]='?';/*Unknownname*/pevent->OSEventName[1]=OS_ASCII_NUL;#endif;以上就是對(duì)新創(chuàng)建的空任務(wù)控制塊的各個(gè)量進(jìn)行初始化。OS_EventWaitListInit(pevent);;通過調(diào)用OSEventWaitListInit()對(duì)事件控制塊中的等待任務(wù)列表進(jìn)行初始化。該函

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。