<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM中斷處理分析

          作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          中斷是CPU提供的一個基本的功能;

          中斷的基本含義應(yīng)該是允許CPU在執(zhí)行某個代碼序列的過程中停下來執(zhí)行另外一個代碼序列,這里有兩層意思,一個是要切換到另一個場景,另一個是當(dāng)執(zhí)行完畢之后必須能夠恢復(fù)原來的場景。

          本文引用地址:http://www.ex-cimer.com/article/201611/316860.htm

          首先討論如何才能切換到一個新的場景,

          當(dāng)一條指令的執(zhí)行完之后,CPU會檢查有沒有中斷產(chǎn)生,如果有就halt當(dāng)前流水線。重載PC寄存器后重新啟動流水線。

          ARM7一般為3級流水線價格,分別是取指、譯碼和執(zhí)行。PC寄存器中存放的是當(dāng)前時刻(CPU機(jī)器時鐘周期)取指操作的目標(biāo)地址,即CPU即將執(zhí)行的指令的地址由PC寄存器指定,正常情況下PC指針的內(nèi)容是CPU自動調(diào)整的——每個時鐘周期自動+4,在發(fā)生跳轉(zhuǎn)時,可以通過直接執(zhí)行修改PC值的指令來實現(xiàn)。中斷的本質(zhì)就是一次跳轉(zhuǎn),跟函數(shù)調(diào)用其實沒有什么分別(只不過增加了一些硬件支持),所以這里第一步是將PC值寫成對應(yīng)的中斷入口地址,比如IRQ就是0x18.

          接下來還需要切換ARM的內(nèi)核模式到相應(yīng)的中斷模式。寫完P(guān)C值以后,下一個時鐘周期流水線就開始從0x18處取指,然后譯碼、執(zhí)行。中斷入口地址處存放的是中斷向量表,所謂中斷向量就是另一個跳轉(zhuǎn)指令,比如LDR PC, [PC,#24] ,執(zhí)行完這個跳轉(zhuǎn)之后理論上CPU就已經(jīng)從一個新的地址開始執(zhí)行了。這個過程的實現(xiàn)是軟硬件結(jié)合的結(jié)果,硬件負(fù)責(zé)第一次加載PC,而軟件負(fù)責(zé)再次修改PC值,將程序指向指定的代碼序列。

          還必須考慮如何恢復(fù)原執(zhí)行場景,這里跟剛才一樣,一部分工作由硬件實現(xiàn),另一部分必須由軟件負(fù)責(zé)實現(xiàn)。因為第一次修改PC到中斷入口地址是硬件完成的,所以第一次保存中斷現(xiàn)場的工作也只能由硬件完成,這個工作包括將PC被修改前的值保存到LR_irq寄存器中,并將當(dāng)前PSR寄存器的值保存到SPSR_irq中。為了實現(xiàn)中斷嵌套,可能硬件還需要將當(dāng)前中斷信息壓棧(硬件棧,而不是內(nèi)存)以便當(dāng)嵌套發(fā)生時用于恢復(fù)。

          當(dāng)程序執(zhí)行到ISR后,硬件的工作基本完成,軟件代碼將在當(dāng)前CPU模式下運(yùn)行,這可能會修改LR和PSR等寄存器,所以在執(zhí)行中斷處理代碼之前需要對這兩個寄存器進(jìn)行保護(hù),否則一旦被破壞以后就無法恢復(fù)。這里同樣需要保護(hù)的還包括工作寄存器等。

          軟件的職責(zé)還包括清掉設(shè)備中斷標(biāo)志。

          最后,當(dāng)ISR結(jié)束時,軟件負(fù)責(zé)將CPU恢復(fù)到中斷前的狀態(tài),然后利用已保存的LR地址跳轉(zhuǎn)到中斷時執(zhí)行代碼的下一行代碼開始繼續(xù)執(zhí)行。

          當(dāng)涉及到中斷嵌套的情況時,重復(fù)上述過程,只是硬件此時不需要在改變CPU的工作模式。

          當(dāng)涉及到有操作系統(tǒng)的時候,這個過程會變得稍微復(fù)雜一些。

          首先在進(jìn)入中斷之前OS需要記錄當(dāng)前中斷嵌套的層數(shù),并且在中斷退出之后恢復(fù)到被中斷上下文之前做一次判斷,因為中斷程序可能改變當(dāng)前就緒態(tài)優(yōu)先級最高的任務(wù),如果此時優(yōu)先級最高的任務(wù)不再是先前被中斷的任務(wù)時,得到恢復(fù)并繼續(xù)執(zhí)行的將是該當(dāng)前優(yōu)先級最高的就緒態(tài)的任務(wù)。

          這里只有在中斷嵌套層數(shù)為0時OS才會提供這樣一次機(jī)會,否則將恢復(fù)到被中斷的ISR中繼續(xù)執(zhí)行中斷處理程序。



          關(guān)鍵詞: ARM中斷處

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();