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的值是下一條指令的位址,即每執行一條...