ARM 異常中斷處理

2021-10-08 04:42:15 字數 2629 閱讀 1157

在arm體系中,程式執行的流程有三種:

要了解arm處理異常中斷的流程原理,就要先熟悉一下arm的工作模式與暫存器。

如圖,arm有七種工作模式,大多數程式是工作在使用者模式usr下的,其他六種工作模式屬於特權模式,特權模式的存在是為了處理中斷、異常,或者訪問被保護的系統資源。不同模式之間的轉換可以通過軟體來切換,或者是發生各類中斷、異常時cpu自動進入相應的模式。在特權模式下可以程式設計操作cpsr暫存器直接進入其他模式,使用者模式下不可以通過寫程式進入其他模式(只能通過發生各類中斷、異常時cpu自動進入相應的模式)。

各種模式的簡要介紹如下:

arm體系中的異常中斷種類如下圖:

可以看出,異常中斷的種類與arm的模式基本對應。

arm中要進入異常中斷的處理程式,首先要觸發異常中斷的條件,然後通過異常中斷向量表跳轉到相應的異常中斷處理程式的位址中去執行程式,當同時觸發多個異常中斷,就涉及到異常中斷的優先順序問題了。

中斷向量表中指定了異常中斷及其處理程式的對應關係,通常存放在儲存位址低端,arm體系中,異常中斷向量表的大小是32位元組,每個異常中斷佔據4個位元組大小。這4位元組大小的空間中一般存放乙個跳轉指令或者是乙個向pc賦值的資料訪問指令(這樣也可以跳轉程式),具體的向量表如下:

在相應的位址中,存放著程式跳轉指令,當發生異常中斷時,程式就會指向向量表中的相應位址(與中斷種類對應),然後執行位址中的指令,通過位址中的程式跳轉指令跳轉到異常中斷處理程式中,或者是執行重啟等相關操作。

當有多個異常中斷同時發生的時候,就要給不同的異常中斷規定不同的優先順序了,各異常中斷的優先順序如下:

關於不同異常中斷有相同的優先順序問題,是因為有些異常中斷是不可能同時發生的。

不同的arm模式下對應的暫存器也是不一樣的,而且在處理異常中斷的時候保持現場、轉換模式、恢復現場等操作的實現都需要用到暫存器。

arm920t中有31個通用暫存器和6個程式狀態暫存器,一共37個暫存器,37個暫存器分為七組(與七種模式相對應),進入哪個模式就使用哪組的暫存器,有些暫存器是共用的、有些暫存器在不同的模式下有獨有的副本,這些獨有的暫存器稱為備份暫存器,在圖中用灰色三角做了標記:

通用暫存器

r0~r15的暫存器都可以直接訪問,除了r15都是通用暫存器,通用暫存器既可以用於儲存資料也可以儲存位址,其中r13、r14這兩個暫存器比較特殊。r13又稱為棧指標暫存器sp,常用於儲存棧指標。r14又稱為程式連線暫存器lr,用於儲存發生異常時的指令位址,在程式跳轉的時候lr得到pc的備份,以便於恢復現場。

程式狀態暫存器

每種模式下除了r0~r15暫存器之外,還共有乙個程式狀態暫存器cpsr,顧名思義cpsr暫存器中位用來標識當前模式的狀態。當程式切換工作模式的時候,要將原來工作模式的資訊(也就是cpsr)儲存在spsr中進行儲存,以便恢復現場。cpsr暫存器中每個位相應的作用如下:

其中條件**解釋如下:

控制位解釋如下:

另外,psr中的其餘位是保留的。在更改psr的標誌或控制位時,必須確保這些未使用的位沒有被更改

1.將下一條指令的位址儲存在相應的鏈結暫存器lr中。如果從arm狀態輸入了異常,那麼下一條指令的位址將被複製到鏈結暫存器(即當前pc + 4或pc + 8,這取決於異常)。

2.將當前的cpsr拷貝到spsr中。

3.根據異常中斷修改cpsr中對應的值。

4.強制pc從異常中斷向量表中跳轉到異常中斷處理程式。

注意:還可以設定中斷禁用標誌,以防止異常的難以管理的巢狀

lr與pc的偏移量的關係如示:

從異常中斷中返回時的操作與進入異常中斷時的操作對稱的:

1.將lr暫存器減去適當的偏移量,賦值給pc,恢復到原來的指令位址中。

2.將spsr中保留的值返回給cpsr,恢復原來的cpsr。

3.清除中斷禁用標誌(如果它們是在進入時設定的)。

ARM的異常中斷機制

在我們平時使用計算機時我們敲擊鍵盤,計算機會對我做出響應。這是什麼原因呢?處理器又是如何響應外圍請求的呢?其實這都是通過處理器的中斷機制實現的。arm又是怎樣的中斷機制?讓我們一起 吧 在arm處理器裡主要是通過3中情況在控制程式執行的 1.流水方式執行程式,pc的值是下一條指令的位址,即每執行一條...

arm中斷保護和恢復 ARM異常中斷返回的幾種情況

重要基礎知識 r15 pc 總是指向 正在取指 的指令,而不是指向 正在執行 的指令或正在 解碼 的指令。一般來說,人們習慣性約定將 正在執行的指令作為參考點 稱之為當前第一條指令,因此 pc總是指向第三條指令。當 arm 狀態時,每條指令為 4 位元組長,所以 pc 始終指向該指令位址加 8 位元...

arm中斷保護和恢復 ARM異常中斷的原因及處理措

當arm異常中斷發生時,系統執行完當前指令後,將跳轉到相應的異常中斷處理程式處執行。當異常中斷處理程式執行完成後,程式返回到發生中斷指令的下條指令處執 行。在進入異常中斷處理程式時,要儲存被中斷程式的執行現場,從異常中斷處理程式退出時,要恢復被中斷程式的執行現場。1 引起異常的原因 對於arm核,可...