異常優先順序
異常處理流程
中斷處理
異常就是在程式執行過程中(user mode),出現了一些異常情況,而中斷是異常的一種情況.
如圖:上圖需要特別注意的就是,如果在程式執行過程中需要進行系統呼叫(程式正常執行在user模式,而核心執行在svc模式,user模式無法直接執行svc模式的指令,因此需要通過異常的方式進入到特權模式. 故這裡就通過swi實現.),即 swi軟中斷–>svc.
儲存在記憶體固定區域,表中每乙個表項都對應乙個異常型別,存了乙個跳轉指令:ldr pc, handle(將需要呼叫的函式位址放到pc中,即可跳轉到指定的位址執行)
reset
data abort(資料異常)
fiqirq
prefetch abort(指令預取異常)
swi(軟體中斷)
undefined instruction(未定義指令)
拷貝進入異常前的模式的cpsr—->spsr_< mode>(對應的異常模式的spsr,用以退出異常時恢復到當前現場);
在異常處理中,再重新設定異常模式的cpsr:
儲存當前模式(user)的返回位址到異常模式中的lr_< mode>(lr_swi);
返回位址: 這個返回位址指的是,異常到達時,正在執行的指令的下一條指令的位址;
這裡cpu進入異常處理時,預設操作為:lr= pc-4
(結合**流水線)
因此,針對不同的異常在恢復pc時操作是不一樣的:
設定pc為相應的異常向量;
從spsr_< mode> 恢復 cpsr;(切換會原來的狀態)
從lr_< mode> 恢復 pc;(讓pc指向lr_swi)
這些操作只能在arm態下才能執行.
arm有兩級中斷fiq,irq.
fiq之所以快的原因:
arm中斷保護和恢復 ARM中斷異常處理的返回
舉個小例子,下面是一段arm彙編 0x3000bl add 0x3004mov r0,0 0x3008mov r1,1 0x300cmov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r0,0 mov r...
arm中斷保護和恢復 ARM中斷異常處理的返回
舉個小例子,下面是一段arm彙編 位址指令 0x3000 bl add 0x3004 mov r0,0 0x3008 mov r1,1 0x300c mov r2,2 area test,code,readonly entry start mov r0,1 mov r1,1 bl add mov r...
ARM中的異常和中斷
arm處理器中主要有7個異常 2個中斷異常 1 復位異常 在以arm為核的微控制器中,常把下列事件作為引起復位的原因。上電復位 在上電後,復位使內部達到預定的狀態,特別是程式跳到初始入口 復位引腳上的復位脈衝 這是由外部其他控制訊號引起的 對系統電源檢測發現過壓或欠壓 時鐘異常復位。arm處理器復位...