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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM的工作模式和狀態(tài)

          ARM的工作模式和狀態(tài)

          作者: 時間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
          ARM的兩種工作狀態(tài):
          ARM狀態(tài): 32位的字對齊,運行ARM指令
          Thumb狀態(tài):16位的半字對齊的Thumb指令
          注:CPU在兩種狀態(tài)中切換時并不影響CPU的工作模式和相應(yīng)的寄存器中的內(nèi)容。

          ARM的7種工作模式
          3種正常運行態(tài):
          用戶模式(User):大部分任務(wù)(比如用戶應(yīng)用程序)執(zhí)行在這種模式。
          系統(tǒng)模式(System):運行操作系統(tǒng)的特權(quán)任務(wù)。
          管理模式(Supervisor):當(dāng)復(fù)位或者軟中斷指令執(zhí)行時將會進(jìn)入這種模式。
          2種中斷模式
          快速中斷模式(FIQ--First Interrupt Request):當(dāng)一個高優(yōu)先級中斷(FIQ)產(chǎn)生時會進(jìn)入這種模式。
          外部中斷模式(IRQ--Interrupt Request):當(dāng)一個低優(yōu)先級(Normal)中斷產(chǎn)生時進(jìn)入這種模式。
          注:FIQ和IRQ的區(qū)別---FIQ模式必須盡快處理,處理結(jié)束后離開這個模式;IRQ模式可以被FIQ模式中斷,但I(xiàn)RQ不能中斷FIQ模式;為使FIQ模式響應(yīng)更快,F(xiàn)IQ模式具有更多的影子(Shadow)寄存器(硬件自動完成相應(yīng)寄存器的數(shù)據(jù)備份)。ARM的FIQ模式提供了更多的banked寄存器,r8到r14還有SPSR,而IRQ模式就沒有那么多,R8,R9,R10,R11,R12對應(yīng)的banked的寄存器就沒有,這就意味著在ARM的IRQ模式下,中斷處理程序自己要保存R8到R12這幾個寄存器,然后退出中斷處理時程序要恢復(fù)這幾個寄存器,而FIQ模式由于這幾個寄存器都有banked寄存器,模式切換時CPU自動保存這些值到banked寄存器,退出FIQ模式時自動恢復(fù),所以這個過程FIQ比IRQ快。
          2種異常模式
          數(shù)據(jù)訪問終止模式(Abort):當(dāng)數(shù)據(jù)或指令預(yù)取終止時進(jìn)入這種模式。
          未定義指令終止模式(Undef):當(dāng)執(zhí)行未定義指令時進(jìn)入這種模式。
          對于Cortex A系列的ARM處理器來說,還有一種特有的Minitor模式:
          1種特有模式:
          Monitor模式:是為了安全而擴展出的用于執(zhí)行安全監(jiān)控代碼的模式,也是一種他特權(quán)模式。


          關(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); })();