異常是能夠引起程序流偏離正常流程的事件,當異常發生時,正在執行的程序就會被掛起,處理器轉而執行一塊與該事件相關的代碼(異常處理)。事件可以是外部輸入,也可以是內部產生的,外部產生的事件通常被稱作中斷或中斷請求(IRQ)。幾乎所有的現代處理器都支持異常和中斷,微控制器的中斷可以由片上外設或軟件產生。由此可見,通常我們處理的中斷是異常的一種。
每種異常類型都有對應的優先級,有些異常的優先級是固定的,有些是可編程的。
先說幾個概念:
1、不可屏蔽中斷(NMI)
NMI同IRQ類似,只是它不能被禁止,并且優先級僅次于復位,它對于工業控制和汽車之類的高可靠性系統非常有用。根據微控制器設計的不同,NMI可以用于掉電處理,也可以連接到看門狗單元,以便在系統停止響應時將系統復位。由于NMI不能被控制寄存器禁止,其響應的及時性就得到了保證。
2、硬件錯誤
硬件錯誤異常用于處理程序執行時產生的錯誤,這些錯誤可以是試圖執行未知的操作碼、總線接口或存儲器系統的錯誤,也可以是試圖切換至ARM狀態之類的非法操作。
3、SVC(請求管理調用)
SVC指令執行時就會產生SVC異常,其通常用在具有操作系統的系統中,為應用程序提供了訪問系統服務的入口。
4、PendSV(可掛起的系統調用)
PendSV是用于帶OS(操作系統)的應用程序的另外一個異常,SVC異常在SVC指令執行后會馬上開始,PendSV在這點上有所不同,它可以延遲執行,在OS上使用PendSV就要確保高優先級任務完成后才執行系統調度。
5、系統節拍
NVIC中的SysTick定時器為OS應用可以利用的另外一個特性。幾乎所有操作系統的運行都需要上下文切換,而這一過程通常需要依靠定時器產生定時中斷來完成。
6、中斷
中斷信號可以連接到片上外設,也可以通過IO端口連接到外部中斷源上。外部中斷只有在使能后才能使用,如果中斷被禁止了,或者處理器正在運行另外一個相同或更高優先級的異常處理,則該中斷請求會被存儲在掛起狀態寄存器中。當高優先級的中斷處理完成或返回后,掛起的中斷請求才可以執行。NVIC能夠接受的中斷請求信號可以是高邏輯電平,也可以是中斷脈沖。應該注意的是,在微控制器的外部接口中,外部中斷信號可以是高電平也可以是低電平,或者可以通過編程配置。
異常的處理流程:
1、接受異常請求
處理器要接受一個異常,需要滿足的條件:
①對于中斷和SysTick中斷請求,中斷必須使能
②處理器正在執行的異常處理的優先級不能相同或更大
③中斷屏蔽寄存器沒有屏蔽掉異常
特別注意一點:對于SVC異常,如果用到SVC指令的異常處理的優先級與SVC異常本身相同或更大,這種情況就會引起硬件錯誤異常處理的執行。
2、壓棧和出棧
為了使被中斷的程序能正確繼續執行,在程序切換至異常處理前,處理器當前狀態的一部分應該被保存。不同架構處理器的處理方法不同,有的采用硬件自動處理的方法來備份和恢復處理器狀態,看需求,有的是需要程序中增加軟件處理過程。
異常處理過程執行到最后時,將會利用執行特殊值來觸發異常返回機制。處理器還會查看當前是否還有其他異常需要處理,如果沒有,處理器就會恢復之前存儲在棧空間的寄存器值,并繼續執行中斷前的程序。
自動保存和恢復寄存器內容的操作被稱為“壓棧”和“出棧”,這種機制使得異常處理可以跟普通的C函數一樣處理,同時也減小了軟件開銷以及回路大小,因此也降低了系統的功耗。
3、異常返回指令
根據處理器的不同中斷處理返回有的需要特殊指令,一般都是普通的返回指令,加載到PC中的數值則會觸發異常返回,這樣就使得異常處理可以和普通的C函數一樣使用。
兩個不同的指令可以用于異常返回:
BX 《Reg》q ;將寄存器中的值加載到PC中
或
POP {《Reg1》,《Reg1》,。..,PC} ;POP指令,PC也是更新的寄存器之一
當其中一個指令執行,異常返回機制就會啟動。
4、末尾連鎖
如果當其他的異常處理完成后,還有異常處于掛起狀態,這時處理器不會返回到中斷前的程序,而是重新進入異常處理流程,這也被稱作末尾連鎖。當末尾連鎖發生時,處理器不必馬上恢復棧的值,因為如果這么做的話還得重新壓棧。異常的末尾連鎖降低了異常處理的開銷,因此也提高了能耗效率。
責任編輯:haq
-
寄存器
+關注
關注
31文章
5433瀏覽量
124395 -
代碼
+關注
關注
30文章
4900瀏覽量
70671 -
異常
+關注
關注
0文章
23瀏覽量
9372
原文標題:異常和中斷
文章出處:【微信號:gh_e7f294a514ca,微信公眾號:單片機匠人】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
常見處理器故障及解決方法
串口中斷是內部中斷還是外部中斷,串口中斷是怎么觸發的
量子處理器的作用_量子處理器的優缺點
量子處理器是什么_量子處理器原理
EE-192:使用C語言在Blackfin處理器上創建中斷驅動系統

串口通訊異常處理方法 串口設備連接方式
對稱多處理器和非對稱多處理器的區別
處理器指令的獲取過程
微處理器中寄存器的作用
ARM處理器的工作模式和特點
ARM處理器的異常中斷響應過程
ARM處理器和CISC處理器的區別

評論