最新設(shè)計(jì)資源

嵌入式Linux中斷現(xiàn)場(chǎng)保護(hù)的優(yōu)化[嵌入式技術(shù)][其他]

時(shí)鐘中斷是操作系統(tǒng)中比較重要的一個(gè)部分,也是實(shí)時(shí)性要求較高的部分,在UNIX中時(shí)鐘中斷的優(yōu)先級(jí)定義為6,僅次于最高優(yōu)先級(jí)。以µC/OS-II時(shí)鐘中斷處理為例,中斷處理過(guò)程如圖3。µC/OS-II時(shí)鐘中斷服務(wù)中,首先要對(duì)中斷嵌套計(jì)數(shù)器OSIntNesting進(jìn)行加1操作,防止在嵌套的中斷中進(jìn)行任務(wù)調(diào)度;隨后調(diào)用OSTimeTick()對(duì)每個(gè)睡眠任務(wù)的OSTCBDly進(jìn)行減1以及對(duì)系統(tǒng)時(shí)間OSTime加1操作;最后調(diào)用OSIntExit()進(jìn)行任務(wù)調(diào)度,如果不需要任務(wù)切換則返回到中斷服務(wù)程序中??梢?jiàn)在時(shí)鐘中斷處理中,操作最多的集中在OSTimeTick()和OSIntExit()這兩個(gè)函數(shù)上。通過(guò)armCC編譯器的-s選項(xiàng)對(duì)兩者進(jìn)行編譯,在得到的匯編代碼中,前者需要使用R0、R1、R4-R7,后者需要R0-R3,沒(méi)有使用R8-R12,而OSIntNesting++的操作也完全可以使用R0-R7進(jìn)行,這樣,在進(jìn)入中斷處理時(shí),需要保存的通用寄存器僅僅為R0-R7。因此對(duì)圖3中的①進(jìn)行改寫(xiě)得到的保護(hù)中斷現(xiàn)場(chǎng)的代碼如圖4所示。

發(fā)表于:10/23/2011