ucosii中的中斷

ucosii中的中斷

ID:37713275

大小:29.63 KB

頁數(shù):7頁

時間:2019-05-29

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

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

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

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

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

4、sting<255u){OSIntNesting++;/*IncrementISRnestinglevel*/}}};這個函數(shù)的作用就是把SIntNesting加一,來記錄嵌套層數(shù),并為調(diào)度器加鎖。它經(jīng)常運行在中斷服務(wù)程序保護(hù)用戶被中斷任務(wù)的端點數(shù)據(jù)之后,運行用戶中斷服務(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ù)返回一個地址,地址里存的是新創(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)建一個指向OS_EVENT結(jié)構(gòu)體類型的指針pevent;系統(tǒng)初始化時會創(chuàng)建一個空事件控制塊鏈表,而創(chuàng)建的空事件控制塊的數(shù)目由常數(shù)O

6、SEventMax來決定。OSEventFreeList就指向這個空事件控制塊鏈表的第一個,所以上面的程序里把OSEventFreeList賦給了pevent,也就是讓pevent指向第一個空事件控制塊,然后又讓OSEventFreeList指向了空事件控制鏈表中的第二個。也就是從空事件鏈表中摘出了第一個給事件使用。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;以上就是對新創(chuàng)建的空任務(wù)控制塊的各個量進(jìn)行初始化。OS_EventWaitListInit(pevent);;通過調(diào)用OSEventWaitListInit()對事件控制塊中的等待任務(wù)列表進(jìn)行初始化。該函

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

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

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