嵌入式操作系統(tǒng)ucosII的中斷處理過程

嵌入式操作系統(tǒng)ucosII的中斷處理過程

ID:37648192

大?。?013.45 KB

頁數(shù):15頁

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

嵌入式操作系統(tǒng)ucosII的中斷處理過程_第1頁
嵌入式操作系統(tǒng)ucosII的中斷處理過程_第2頁
嵌入式操作系統(tǒng)ucosII的中斷處理過程_第3頁
嵌入式操作系統(tǒng)ucosII的中斷處理過程_第4頁
嵌入式操作系統(tǒng)ucosII的中斷處理過程_第5頁
資源描述:

《嵌入式操作系統(tǒng)ucosII的中斷處理過程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

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

2、UCOSII的中斷過程的示意圖三.具體中斷過程1.中斷到來,如果被CPU識(shí)別,CPU將查中斷向量表,根據(jù)中斷向量表,獲得中斷服務(wù)子程序的入口地址。2.將CPU寄存器的內(nèi)容壓入當(dāng)前任務(wù)的任務(wù)堆棧中(依處理器的而定,也可能壓入被壓入被中斷了的任務(wù)堆棧中。3.通知操作系統(tǒng)將進(jìn)入中斷服務(wù)子程序。即:調(diào)用OSIntEnter()或OSIntNesting直接加1。4.If(OSIntNesting==1){OSTCBCur->OSTCBStrPtr=SP;}/嵌入式操作系統(tǒng)ucosII的中斷處理過程(上篇)轉(zhuǎn)_王文羅的空...http://

3、hi.baidu.com/wangwenluo2gxy/item/da2da05e701c2bdb...四.相關(guān)代碼與編譯器相關(guān)的數(shù)據(jù)類型:typedefunsignedcharBOOLEAN;typedefunsignedcharINT8U;typedefunsignedintOS_STK;//堆棧入口寬度為16位(一)voidOSIntEnter(void)的理解uCOS_II.H中定義:#ifdefOS_GLOBALS#defineOS_EXT#else#defineOS_EXTextern#endif//定義全局宏OS_E

4、XT#ifndefTRUE#defineTRUE1#endifOS_EXTBOOLEANOSRunning;//定義外部BOOLEAN類型全局變量,用來指示//核是否在運(yùn)行OS_EXTINT8UOSIntNesting;//定義外部8位無符號(hào)整型數(shù)全局變量,用來表//示中斷嵌套層數(shù)OS_CORE.C中的OSIntEnter()函數(shù)原型:voidOSIntEnter(void){if(OSRunning==TRUE)//如果內(nèi)核正在運(yùn)行則進(jìn)入if{if(OSIntNesting<255)//如果嵌套層數(shù)小于255,則可以繼//續(xù){第

5、2頁共11頁2013/11/1322:38嵌入式操作系統(tǒng)ucosII的中斷處理過程(上篇)轉(zhuǎn)_王文羅的空...http://hi.baidu.com/wangwenluo2gxy/item/da2da05e701c2bdb...OSIntNesting++;//嵌套層數(shù)加1}}}(二)在中斷服務(wù)子程序中加if(OSIntNesting==1){…}的原因uCOS_II.H中定義:typedefstructos_tcb{OS_STK*OSTCBStkPtr;//聲明指向任務(wù)堆棧棧頂?shù)?6位指針………………}OS_TCB;//定義名為

6、OS_TCB的結(jié)構(gòu)體數(shù)據(jù)類型,即任務(wù)控制塊的數(shù)據(jù)結(jié)構(gòu)OS_EXTOS_TCB*OSTCBCur;//聲明一個(gè)指向任務(wù)控制塊的全局指針變量//用于指向當(dāng)前任務(wù)的任務(wù)控制塊中斷服務(wù)程序中添加的代碼:if(OSIntNesting==1){OSTCBCur->OSTCBStkPtr=SP;//如果是第一層中斷,則將被中斷任務(wù)//的堆棧指針保存在被中斷任務(wù)的任務(wù)//任務(wù)控制塊中}關(guān)于uCOS-II的中斷服務(wù)程序(ISR)中必須加“OSIntNesting==1”的原因==避免調(diào)整堆棧指針. 出現(xiàn)這個(gè)問題的根源是當(dāng)?shù)蛢?yōu)先級(jí)的任務(wù)被中斷,當(dāng)中

7、斷完成后由于有高優(yōu)先級(jí)的任務(wù)就緒,則必須調(diào)度高優(yōu)先級(jí)的任務(wù),原來的低優(yōu)先級(jí)任務(wù)繼續(xù)被中斷著,但是此時(shí)的低優(yōu)先級(jí)任務(wù)的堆棧已經(jīng)被破壞,已不能被調(diào)度程序直接調(diào)度了,要想被調(diào)度而必須調(diào)整堆棧指針。如下圖所示的場(chǎng)景:問題分析:   要想理解加上上面兩句的原因,不妨假設(shè)有下面場(chǎng)景出現(xiàn):voidMyTask(void){...}該任務(wù)在執(zhí)行過程中被中斷打斷,下面是它的服務(wù)子程序voidMyISR(void){第3頁共11頁2013/11/1322:38嵌入式操作系統(tǒng)ucosII的中斷處理過程(上篇)轉(zhuǎn)_王文羅的空...http://hi.ba

8、idu.com/wangwenluo2gxy/item/da2da05e701c2bdb...保存現(xiàn)場(chǎng)(PUSHA)OSIntEnter();//此時(shí)的堆棧指針是正確的,再往下就不對(duì)了,應(yīng)該在此處保存用戶任務(wù)堆棧指針OSIntExit();恢復(fù)現(xiàn)場(chǎng)

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(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)系客服處理。