什么是異常
??正常工作之外的流程都叫異常
??異常會打斷正在執(zhí)行的工作,并且一般我們希望異常處理完后繼續(xù)回來執(zhí)行原工作
??中斷是異常的一種
異常向量表
??所有的CPU都有異常向量表,這是CPU設(shè)計(jì)時就設(shè)定好的,是硬件決定的。
??當(dāng)異常發(fā)生時,CPU會自動動作(PC跳轉(zhuǎn)到異常向量處處理異常,有時伴有一些輔助動作)
??異常向量表是硬件向軟件提供的處理異常的支持。
ARM的異常處理機(jī)制
當(dāng)異常產(chǎn)生時, ARM core:
(1)將CPSR的值保存到將要執(zhí)行的異常中斷對應(yīng)的SPSR中,以實(shí)現(xiàn)對處理器當(dāng)前狀態(tài)、中斷屏蔽及各標(biāo)志位的保護(hù)。
(2)設(shè)置當(dāng)前狀態(tài)寄存器CPSR的相應(yīng)位。設(shè)置CPSR中的M4~M0的5位,進(jìn)入相應(yīng)工作模式,設(shè)置I=1禁止IRQ中斷,如果進(jìn)入復(fù)位模式或FIQ模式,還要設(shè)置F=1以禁止FIQ中斷。
(3)將引起異常指令的下一條地址(斷點(diǎn)地址)保存到 LR(R14)中,使異常處理程序執(zhí)行完后正確返回原來程序處繼續(xù)向下執(zhí)行。
(4)給程序計(jì)數(shù)器PC強(qiáng)制賦值,轉(zhuǎn)入向量地址,以便執(zhí)行相應(yīng)的處理程序。
每種中斷異常模式對應(yīng)兩個寄存器SP和LR。
從中斷返回。如果是復(fù)位異常,系統(tǒng)自動從0x00000000開始重新執(zhí)行程序,無需返回
(1)首先恢復(fù)原來被保護(hù)的用戶寄存器。
(2)將SPSR寄存器復(fù)制到CPSR中,使得原來CPSR狀態(tài)從相應(yīng)的SPSR中恢復(fù),——恢復(fù)被中斷的程序狀態(tài)。
(3)根據(jù)異常類型將PC值恢復(fù)成斷點(diǎn)地址,以繼續(xù)執(zhí)行用戶原來運(yùn)行著的程序。
(4)清除CPSR中的中斷禁止標(biāo)志I和F,開放外部中斷和快速中斷。
注意:
(1)程序狀態(tài)寄存器及斷點(diǎn)地址的恢復(fù)必須同時進(jìn)行。
(2)由于異常隨機(jī)發(fā)生,所以要對異常向量進(jìn)行初始化,即在異常向量的地址處放置一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到異常處理程序。文章來源:http://www.zghlxwxcb.cn/news/detail-679332.html
更多嵌入式學(xué)習(xí)筆記、實(shí)戰(zhàn)項(xiàng)目,點(diǎn)擊這里即可免費(fèi)領(lǐng)取文章來源地址http://www.zghlxwxcb.cn/news/detail-679332.html
到了這里,關(guān)于嵌入式學(xué)習(xí)筆記(3)ARM的異常處理方式介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!