ARM異常中斷返回的幾種情況

2021-06-21 10:40:09 字數 2662 閱讀 8553

arm異常中斷返回的幾種情況

異常中斷返回的幾種情況:

重要基礎知識:r15(pc)總是指向「正在取指」的指令,而不是指向「正在執行」

的指令或正在「解碼」的指令。一般來說,人們習慣性約定將「正在執行的指令作為參考

點」,稱之為當前第一條指令,因此 pc總是指向第三條指令。當 arm 狀態時,每條指令

位置+8;

而 ads 中的 pc,是為了除錯看著方便而修改過的,它指向的是正在執行的指令,即

「真正 pc-8」!

1.swi 和和未定義指令異常中斷的返回:

指令位址

a         pc-8  當前指令為 swi 或未定義指令 此時發生中斷.pc 的值還沒有更新.

a+4       pc-4  中斷時處理器將 pc-4 儲存到 lr。       ;lr!

a+8       pc

返回時,從發生中斷的指令 a(pc-8)的下一條指令 a+4(pc-4)處開始執行,所以直接把 lr 

的值賦給 pc 就行了,具體指令為 mov pc,lr  (pc=a+4=lr)

白話解釋:對於 swi 和未定義指令異常: 發生異常時 pc 沒有更新,根據 arm 的**

流水線原理,pc 沒有更新,仍然等於(a+8); lr = pc – 4(這時處理器決定的,無法

更改!)即 a+4。

由於這類異常返回後應執行下一條指令(a+4),所以返回時,pc = lr 即可。

2.irq 和 fiq 異常中斷處理的返回:

指令位址  對應於 pc

a         pc-8      執行此指令完成後(!)查詢 irq 及 fiq,如果有中斷請求則產生中

斷. a+4       pc-4

a+8       pc         ;lr!

(此時 pc 的值已經更新,指向 a+12.將當前 pc-4,即 a+8 )。

儲存到 lr.返回時,要接著執行 a+4(lr-4)處的指令,所以返回指令為

subs pc, lr,#4(pc=a+4=lr-4)

白話解釋:對於普中斷和快中斷異常,中斷必須在一條指令執行完以後被檢測到,如正在

執行指令甲時發生了中斷,不等指令甲執行完是不會處理該中斷的,發生異常時 pc 已經

更新(a+12); lr = pc – 4(這時處理器決定的,無法更改!)即 a+8 返回後,應執行被

中斷而沒有執行的指令(上面的 a+4),所以返回時,pc = lr-4

3,指令預取中止異常中斷處理的返回:

指令位址

a     pc-8     執行本指令時發生中斷,  

a+4   pc-4     處理器將 a+4(pc-4)儲存到 lr.    ;lr!

a+8   pc

返回時,發生指令預取中止的指令 a(pc-8)處重新執行,所以返回指令為

subs pc, lr,#4(pc=a=lr-4)

白話解釋:對於預取指令中止異常,發生預取指令異常時,是在執行時發生的異常,pc 

未更新,即 pc = a+8;lr = pc – 4(這時處理器決定的,無法更改!)即 a+4 。

由於這類異常返回後應重新執行異常的那個指令(a),所以返回時,pc = lr-4

4,資料訪問中止異常中斷處理的返回:

指令位址

a          pc-8    本指令訪問有問題的資料,產生中斷時,pc 的值已經更新   

a+4        pc-4    中斷發生時 pc=a+12,處理器將 a+8(pc-4)儲存到 lr.

a+8        pc        ;lr!

返回時,要返回到 a 處繼續執行,所以指令為 subs pc,  lr,#8.(pc=a=lr-8)

白話解釋:對於資料訪問中止異常,發生資料訪問中止異常時,是在執行時訪問資料錯誤

導致的異常,pc 已經更新,即 pc = a+12

lr = pc – 4(這時處理器決定的,無法更改!)即 a+8 。深圳專業嵌入式實訓

qq754634522

由於這類異常返回後應重新執行異常的那個指令(a),所以返回時,pc = lr-8

小節:ø 引起 pc 更新的原因一種是資料中止,還有就是中斷了.

ø 中斷必須是在一條指令執行完畢後才能被檢測到,所以它中斷的只是還未執行的那條

指令(pc - 8),所以 pc = lr – 4;

ø 與中斷相同,swi 和未定義指令異常也是返回到下一條指令(pc - 4),只是他們在執行

時,pc 的值並沒有更新,所以 pc = lr;

ø 預取指令中止異常,也沒有發生 pc  更新,但它還得重新執行發生異常的那條指令,

所以 pc = lr – 4;

ø 資料訪問中止異常,發生了 pc  更新,並且它也需要重新執行發生異常的那條指令,

所以 pc = lr – 8。

這裡是【深圳信盈達嵌入式實訓學院】,微控制器培訓、嵌入式arm

培訓、linux

培訓、pcb

培訓、fpga

培訓,彙編

c語言培訓、

android

培訓、數電模電培訓、

cortex-m3

培訓!

技術諮詢:付老師18925083678 qq1841388306

(江夏地鐵

b出口)

更多詳情請登入:

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

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

ARM 異常中斷處理

在arm體系中,程式執行的流程有三種 要了解arm處理異常中斷的流程原理,就要先熟悉一下arm的工作模式與暫存器。如圖,arm有七種工作模式,大多數程式是工作在使用者模式usr下的,其他六種工作模式屬於特權模式,特權模式的存在是為了處理中斷 異常,或者訪問被保護的系統資源。不同模式之間的轉換可以通過...

ARM的異常中斷機制

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