<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > μC/OSII下的ARM7中斷過(guò)程分析及優(yōu)化方法

μC/OSII下的ARM7中斷過(guò)程分析及優(yōu)化方法

作者: 時(shí)間:2012-04-25 來(lái)源:網(wǎng)絡(luò ) 收藏

LDR R2, =OsEnterSum

;服務(wù)程序要退出,所以OsEnterSum=0

MOV R1, #0

STR R1, [R2]

MSR CPSR_c, #(NoInt | IRQ32Mode) ;切換回模式

LDMFD SP, {R3, SP, LR}^ ;恢復用戶(hù)狀態(tài)的R3、SP、LR

LDR R0, =OSTCBHighRdy

LDR R0, [R0]

LDR R1, =OSTCBCur

LDR R1, [R1]

CMP R0, R1

ADD SP, SP, #4*3

MSR SPSR_cxsf, R3

LDMEQFD SP!, {R0R3, R12, PC}^ ;不進(jìn)行任務(wù)切換

LDR PC, =OSIntCtxSw;進(jìn)行任務(wù)切換

MEND

END

通過(guò)對Handler宏的可知,用戶(hù)的C語(yǔ)言處理程序是在特權模式--系統模式下運行的,并且CPU在執行中斷服務(wù)程序時(shí)中斷都是關(guān)閉的,所以本系統采用的是最為簡(jiǎn)單的非嵌套中斷方式。這種方式的優(yōu)點(diǎn)是,上下文數據不會(huì )被任何順序的中斷所破壞;缺點(diǎn)是,在中斷服務(wù)程序執行時(shí)不能根據中斷優(yōu)先級進(jìn)行中斷嵌套,延時(shí)時(shí)間長(cháng),只有當一個(gè)ISR完全結束并退出中斷后才重新接受中斷,降低了系統的實(shí)時(shí)特性。為提高系統的實(shí)時(shí)性,需要對其中斷進(jìn)行。

3 中斷的

改寫(xiě)μ 內核中 HANDLER 宏可以實(shí)現ARM的中斷嵌套,這樣做雖然提高了系統的實(shí)時(shí)性,但損害了系統運行的穩定性和可移植性。通過(guò)對中斷,下面給出一種編寫(xiě)中斷服務(wù)程序的模板,充分利用ISR執行在特權模式--系統模式這一特點(diǎn)來(lái)實(shí)現中斷嵌套的條件。中斷服務(wù)程序模板如下:

void ISR(void){

OS_ENTER_CRITICAL();//在中斷服務(wù)程序中關(guān)中斷清中斷標志;//防止沒(méi)有清中斷標志使得中斷多次進(jìn)入關(guān)閉低優(yōu)先級;//禁止低優(yōu)先級中斷

S_EXIT_CRITICAL();//在中斷服務(wù)程序中開(kāi)中斷用戶(hù)的C語(yǔ)言代碼;//進(jìn)行用戶(hù)在中斷中要做的工作

VICVectAddr=0;//將中斷服務(wù)程序的入口地址置0

}

由于Handler宏中已將LR、SPSR、返回地址和發(fā)生中斷前的堆棧指針等寄存器入棧保存,所以接下來(lái)要做的就只剩下開(kāi)關(guān)中斷的工作。由于在進(jìn)入C中斷處理程序之前進(jìn)入的是關(guān)中斷系統模式,所以必須在C語(yǔ)言中重新打開(kāi)中斷,而C語(yǔ)言是不能進(jìn)行寄存器操作的,因此必須調用軟中斷OS_EXIT_CRITICAL()重新打開(kāi)中斷。在開(kāi)中斷之前,要判斷將全局變量OsEnterSum減1后是否為0,所以必須在調用開(kāi)中斷之前調用軟中斷OS_ENTER_CRITICAL()將OsEnterSum變成1。在臨界區中可以進(jìn)行一些處理,如清中斷標志、關(guān)低優(yōu)先級中斷等。進(jìn)行C語(yǔ)言中斷服務(wù)程序之后要將VICVectAddr置位為0,這是處理器核的要求必須進(jìn)行這樣的編寫(xiě),否則會(huì )導致一些錯誤(如不能第2次進(jìn)入中斷等)。

結語(yǔ)

“μ+ ”是當前嵌入式系統中廣泛應用的一款平臺,適合于復雜度不是很高的中小型嵌入式系統。本文在深入”μ+ ”中斷機制的基礎上,對IRQ中斷響應機制進(jìn)行了改進(jìn),提出了方案。實(shí)驗證明,此可以實(shí)現中斷的嵌套并且提高系統實(shí)時(shí)性,具有一定的應用價(jià)值。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>