uCOSii中斷處理過程詳解(一)

uCOSii中斷處理過程詳解(一)

ID:37691975

大?。?02.00 KB

頁數(shù):21頁

時間:2019-05-28

uCOSii中斷處理過程詳解(一)_第1頁
uCOSii中斷處理過程詳解(一)_第2頁
uCOSii中斷處理過程詳解(一)_第3頁
uCOSii中斷處理過程詳解(一)_第4頁
uCOSii中斷處理過程詳解(一)_第5頁
資源描述:

《uCOSii中斷處理過程詳解(一)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、一.??UCOSII的中斷過程簡介系統(tǒng)接收到中斷請求后,如果CPU處于開中斷狀態(tài),系統(tǒng)就會中止正在運行的當(dāng)前任務(wù),而按中斷向量的指向去運行中斷服務(wù)子程序,當(dāng)中斷服務(wù)子程序運行完成后,系統(tǒng)會根據(jù)具體情況返回到被中止的任務(wù)繼續(xù)運行,或轉(zhuǎn)向另一個中斷優(yōu)先級別更高的就緒任務(wù)。由于UCOSII是可剝奪型的內(nèi)核,所以中斷服務(wù)程序結(jié)束后,系統(tǒng)會根據(jù)實際情況進行一次任務(wù)調(diào)度,如果有優(yōu)先級更高的任務(wù),就去執(zhí)行優(yōu)先級更高的任務(wù),而不一定要返回被中斷了的任務(wù)。二.UCOSII的中斷過程的示意圖三.具體中斷過程1.中斷到來,如果被CPU識別,CP

2、U將查中斷向量表,根據(jù)中斷向量表,獲得中斷服務(wù)子程序的入口地址。2.將CPU寄存器的內(nèi)容壓入當(dāng)前任務(wù)的任務(wù)堆棧中(依處理器的而定,也可能壓入被壓入被中斷了的任務(wù)堆棧中。3.通知操作系統(tǒng)將進入中斷服務(wù)子程序。即:調(diào)用OSIntEnter()或OSIntNesting直接加1。4.If(OSIntNesting==1){OSTCBCur->OSTCBStrPtr=SP;}//如果是第一層中斷,則將堆棧指針保存到被中斷任務(wù)的任務(wù)控制塊中5.清中斷源,否則在開中斷后,這類中斷將反復(fù)的打入,導(dǎo)致系統(tǒng)崩貴6.執(zhí)行用戶ISR7.中斷服務(wù)

3、完成后,調(diào)用OSIntExit().如果沒有高優(yōu)先級的任務(wù)被中斷服務(wù)子程序激活而進入就緒態(tài),那么就執(zhí)行被中斷了的任務(wù),且只占用很短的時間.8.恢復(fù)所有CPU寄存器的值.9.執(zhí)行中斷返回指令.?四.相關(guān)代碼???????與編譯器相關(guān)的數(shù)據(jù)類型:???????typedefunsignedcharBOOLEAN;???????typedefunsignedcharINT8U;???????typedefunsignedintOS_STK;//堆棧入口寬度為16位(一)void?OSIntEnter(void)的理解uCOS_I

4、I.H中定義:#ifdef??OS_GLOBALS#define?OS_EXT#else#define?OS_EXT?extern#endif????//定義全局宏OS_EXT#ifndef?TRUE#define?TRUE??1#endif????????????OS_EXT?BOOLEAN??OSRunning;//定義外部BOOLEAN類型全局變量,用來指示//核是否在運行???????????OS_EXT?INT8U??OSIntNesting;//定義外部8位無符號整型數(shù)全局變量,用來表?????????????

5、???????????????????????????//示中斷嵌套層數(shù)OS_CORE.C中的OSIntEnter()函數(shù)原型:void?OSIntEnter(void){????????????????????if(OSRunning==TRUE)//如果內(nèi)核正在運行則進入if{?????????????????????????????if(OSIntNesting<255)//如果嵌套層數(shù)小于255,則可以繼//續(xù){?????????????????????????????????????OSIntNesting++;

6、//嵌套層數(shù)加1??????????????????????????????????}??????????????????????????}}????????(二)在中斷服務(wù)子程序中加if(OSIntNesting==1){…}的原因???????????uCOS_II.H中定義:typedefstructos_tcb{?????????????OS_STK???*OSTCBStkPtr;//聲明指向任務(wù)堆棧棧頂?shù)?6位指針??………………}OS_TCB;//定義名為OS_TCB的結(jié)構(gòu)體數(shù)據(jù)類型,即任務(wù)控制塊的數(shù)據(jù)結(jié)構(gòu)OS

7、_EXT?OS_TCB??*OSTCBCur;//聲明一個指向任務(wù)控制塊的全局指針變量??????????????????????????//用于指向當(dāng)前任務(wù)的任務(wù)控制塊中斷服務(wù)程序中添加的代碼:if(OSIntNesting==1){?????????????????????OSTCBCur->OSTCBStkPtr=SP;//如果是第一層中斷,則將被中斷任務(wù)???????????????????????????????????????????????????????//的堆棧指針保存在被中斷任務(wù)的任務(wù)?????????

8、???????????????????????????????????????//任務(wù)控制塊中?????????????????????????????????????????????????????????????????????????????????????????????????????????

當(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)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。