1. 程式人生 > >ARM異常處理方式簡單介紹

ARM異常處理方式簡單介紹

1 什麼是異常

  • 正常工作之外的流程都叫異常。
  • 異常會打斷正在執行的工作,並且一般我們希望異常處理完成後繼續回來執行原來的工作。
  • 中斷是異常的一種。

2 異常向量表

  • 所有的CPU都有異常向量表,這是CPU設計時就設定好的,是硬體決定的。
  • 當異常發生時,CPU會自動動作(PC跳轉到異常向量處處理異常,有時伴有一些輔助動作)。
  • 異常向量表是硬體向軟體提供的處理異常的支援。

3 ARM異常處理機制

這裡寫圖片描述

當異常產生時, ARM core:

  • 拷貝 CPSR 到 SPSR(新的異常模式)
  • 設定適當的 CPSR 位:
    • 改變處理器狀態進入 ARM 態
    • 改變處理器模式進入相應的異常模式
    • 設定中斷禁止位禁止相應中斷 (如果需要)
    • 儲存返回地址到 LR(新的異常模式)
    • 設定 PC 為相應的異常向量

返回時, 異常處理需要:

  • 從 SPSR(新的異常模式)恢復CPSR
  • 從LR(新的異常模式)恢復PC
  • Note:這些操作只能在 ARM 態執行

思考如下問題:為什麼在使用者模式下即可把CPSR拷貝到異常模式?CPSR已經恢復到使用者模式,如何將儲存在異常模式下的地址值恢復到PC呢?是因為這些都是硬體自動完成的原因麼?

4 總結

  • 異常處理中有一些是硬體自動做的,有一些是程式設計師需要自己做的。需要搞清楚哪些是需要自己做的,才知道如何寫程式碼。

  • 以上說的是CPU設計時提供的異常向量表,一般成為一級向量表。有些CPU為了支援多箇中斷,還會提供二級中斷向量表,處理思路類似於這裡說的一級中斷向量表。