對異常中斷分析

異常返回

1、  從SWI和未定義 返回

內核在計算LR(返回地址)時沒有更新PC  因此                                        MOVS  PC ,LR

當前lr=pc-4  (mov pc pc-4)=movs pc.lr

2、  從FIQ IRQ和預取 返回                                                                                                     SUBSPC, LR ,#4

內核計算LR時更新了PC  movs pc, pc-8  =movs pc , pc-4-4 =movs pc,lr-4

3、從數據異常返回(有硬件/軟件產生的 爲保證數據完整性)                      SUBS PC, LR,#8

PC movs pc,  pc-12  =movs pc , pc-4-8 =movs pc, lr-8

中斷處理程序

從向量表中直接跳轉到中斷

HandleIRQ:                                 跳轉到中斷

         stmfd sp!, {r0-r12, lr}      保護現場

         bl  do_irq                        跳過異常處理函數

         ldmfd sp!, {r0-r12, pc}^   回覆現場

       subs    pc,  lr,  #4       計算返回地址

 

 

 

 

 

中斷編程流程

•          啓動代碼

•        建立異常向量表

•        關閉看門過

•        初始化系統時鐘

•        Main函數入口

•        異常中斷入口

HandleIRQ:

 stmfd sp!, {r0-r12, lr}

 bl do_irq

 ldmfd sp!, {r0-r12, pc}^

 subs pc, lr, #4

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章