久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

windowsCE異常和中斷服務(wù)程序初探


1。中斷/異常相量的裝入和執(zhí)行方式。     
      中斷和異常都是異步發(fā)生的事件,當(dāng)該事件發(fā)生,系統(tǒng)將停止目前正在執(zhí)行的代碼轉(zhuǎn)而執(zhí)行事件響應(yīng)的服務(wù)程序。而事件服務(wù)程序的入口點就是中斷/異常向量所在的位置。arm的中斷向量可以是0x0開始的低地址向量,也可以是在ffff0000位置的高向量地址。wince下使用高地址作為trap區(qū),所以在ce下arm使用高地址向量。下面我們來了解一下中斷/異常向量的安裝和執(zhí)行過程。
在kernelstart的過程中通過程序?qū)⑷缦麓a復(fù)制到ffff0000的位置.
vectorinstructions
        ldr     pc, [pc, #0x3e0-8]              ; reset
        ldr     pc, [pc, #0x3e0-8]              ; undefined instruction
        ldr     pc, [pc, #0x3e0-8]              ; svc
        ldr     pc, [pc, #0x3e0-8]              ; prefetch abort
        ldr     pc, [pc, #0x3e0-8]              ; data abort
        ldr     pc, [pc, #0x3e0-8]              ; unused vector location
        ldr     pc, [pc, #0x3e0-8]              ; irq
        ldr     pc, [pc, #0x3e0-8]              ; fiq

  而在ffff03e0的位置放上如下的數(shù)據(jù),每一項(32bit)對應(yīng)一個異常的跳轉(zhuǎn)地址也就是wince的異常/中斷向量跳轉(zhuǎn)表。該表項的內(nèi)容就是發(fā)生異常后將要執(zhí)行的服務(wù)程序的入口地址。具體如下。
vectortable
        dcd     -1                              ; reset
        dcd     undefexception                  ; undefined instruction
        dcd     swihandler                      ; svc
        dcd     prefetchabort                   ; prefetch abort

        if :def:armv4t :lor: :def:armv4i
        dcd     oemdataaborthandler             ; data abort
        else
        dcd     dataaborthandler                ; data abort
        endif

        dcd     -1                              ; unused vector
        dcd     irqhandler                      ; irq
        dcd     fiqhandler                      ; fiq
      在上面的這些代碼/數(shù)據(jù)在內(nèi)存空間上按照上述要求放置好以后,每次觸發(fā)一個異常就自動運行到相應(yīng)跳轉(zhuǎn)表項所對應(yīng)的地址執(zhí)行。
 
2.異常/中斷服務(wù)程序
  在arm下,由于有7種異常狀態(tài)包括reset、undef exception、software interrupt(swi)、prefech abort、dataabort、irq、fiq七種異常/中斷。reset僅在復(fù)位時發(fā)生,其他6種都是在系統(tǒng)運行時發(fā)生。當(dāng)任何一個異常發(fā)生并得到響應(yīng)時,arm 內(nèi)核自動完成以下動作:
拷貝 cpsr 到 spsr_<mode>
設(shè)置適當(dāng)?shù)?cpsr 位:
改變處理器狀態(tài)進入 arm 狀態(tài)
改變處理器模式進入相應(yīng)的異常模式
設(shè)置中斷禁止位禁止相應(yīng)中斷
更新 lr_<mode>
設(shè)置 pc 到相應(yīng)的異常向量
同時不管異常發(fā)生在arm 還是thumb 狀態(tài)下,處理器都將自動進入arm 狀態(tài)。并且中斷使能會自動被關(guān)閉。在這個時候由于部分通用寄存器是不同模式公用的,所以還需要保存這些將會被破壞的寄存器,待到處理完成的時候恢復(fù)這些寄存器被中斷前的狀態(tài)。另外在進入異常模式后,lr的值不一定就是我們所需恢復(fù)執(zhí)行的位置,該位置受到異常類型和流水線誤差的影響。在swi模式下,lr就是返回值。在irq和fiq中l(wèi)r=lr-4,dataabort下lr=lr-8;具體原因我們就不討論了,有興趣可以參看<基于arm 的嵌入式程序開發(fā)要點>一文。下面分別對這些服務(wù)程序進行分析。
  
2-1.undef exception服務(wù)程序
     
undef exception在執(zhí)行到過非法的指令時產(chǎn)生,通常來模擬一些處理器不支持的功能,如浮點運算。簡單說一下undef exception的過程:當(dāng)當(dāng)前指令為一條處理器不支持的指令時,處理器會自動動將該指令送交各協(xié)處理器(如mmu、fpu)處理,如果這些協(xié)處理器都無法識別這條指令的時候,就產(chǎn)生該異常。下面開始看相應(yīng)的代碼。
        nested_entry  &

COPYRIGHT(C) 2011 廈門永宏亞得機電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生