ARM異常處理流程

2021-07-24 16:43:46 字數 1369 閱讀 3520

在學習與開發arm處理器的過程中,乙個不能繞開的話題就是異常處理流程。它在arm的體系架構中,佔據著不可動搖的重要地位。此處就以coterx-a系列的arm處理器簡單分析一下異常中斷處理流程。

說異常處理流程之前,我們先說一下arm處理器的工作模式和異常源。

在coterx-a系列之前的arm處理器,一共有個基本工作模式:

user : 非特權模式,大部分任務執行在這種模式;

fiq : 當乙個高優先順序(fast) 中斷產生時將會進入這種模式;

irq : 當乙個低優先順序(normal) 中斷產生時將會進入這種模式;

supervisor :當復位或軟中斷指令執行時將會進入這種模式;

abort : 當訪問異常時將會進入這種模式;

undef : 當執行未定義指令時會進入這種模式;

system : 使用和user模式相同暫存器集的特權模式;

而coterx-a系列處理器則多了一種工作模式:

monitor : 是為了安全而擴充套件出的用於執行安全監控**的模式;

在coterx-a處理器的8 種基本工作模式中,有6種異常處理模式:fiq、irq、svc、abort、undef、monitor。arm core中定義了七種異常源,和其中的五種異常處理模式相對應。

簡單介紹完異常源和工作模式後,就分析一下異常處理流程。

而在arm核心規定的異常處理流程也採用了類似的流程。

當異常產生時, arm core:

拷貝 cpsr 到 spsr_

設定適當的 cpsr 位:

改變處理器狀態進入arm態

改變處理器模式進入相應的異常模式

設定中斷禁止位禁止相應中斷 (如果需要)

儲存返回位址到 lr_

設定 pc 為相應的異常向量

返回時, 異常處理需要:

從 spsr_恢復cpsr

從lr_恢復pc

以上所有的操作都是在arm態下進行的。大家看看這個流程是否符合我們從實際生活中所總結的流程。

異常發生時,arm core自動儲存cpsr->spsr(對應的異常模式下的spsr暫存器)、儲存返回位址->lr(對應的異常模式下的lr暫存器),這些操作都是為了儲存現場,以便將來返回。而設定cpsr則是為了處理異常。儲存的返回位址則是異常發生前正在執行指令的下一條指令的位址,即此時的(pc-4)。

處理完成時,我們自己需要恢復cpsr、pc則是為了繼續執行異常發生前的指令。

而arm彙編中的跳轉指令的執行也才用了同樣的流程。大家有興趣的話,可以自己編寫**除錯,觀察現象。

文章選自華清遠見嵌入式培訓

>>>更多優秀技術博文每日更新

arm異常處理流程

1.什麼是異常?cpu正常執行的時候,出現一些突發事件,我們的cpu就必須暫停當前程式的執行,去處理這些異常 2.cpu中有哪些異常?1.reset 上電 重啟 2.undef 流水線中某個非法指令到達執行狀態的時候執行 3.swi 軟中斷指令 4.prefetch 當乙個指令被從記憶體中預取時,由...

ARM異常處理

arm支援7種型別的異常,它們是 復位異常 未定義指令異常 軟中斷指令異常 預取指令異常 資料中止訪問異常 中斷異常 快速中斷異常 arm異常向量表 當異常發生時,arm將做如下事情 1 將異常發生處下條指令位址儲存到相應工作模式下lr暫存器中 2 將cpsr暫存器值複製到相應異常模式下的spsr暫...

arm 異常處理結構

概念 正常的程式執行過程中發生暫時的停止稱為異常,如果發現異常情況,將會進行異常處理 作用 快速響應使用者的行為,提高cpu的響應能力 異常型別 異常處理的三個步驟 1 保護現場 工作模式儲存 cpsr spsr 自動完成 自能儲存在spsr中,其他暫存器不行 資料的儲存 stmfd sp 需手動完...