ARM BL或中斷返回需要注意的一些細節問題

2021-05-25 08:42:04 字數 738 閱讀 6340

上圖為arm處理器的各個狀態下的暫存器示意圖

1: arm3級流水線

由arm7-tdmi-s技術參考手冊p2可知,arm的流水線結構為:

取指----->解碼------>執行

arm**: pc         pc- 4      pc - 8

0x1008 0x1004   0x1000

在此頁,還註明,pc是指向被取指的指令,而不是正在執行的指令。(也就是說在此 pc值為0x1008 ?)

3:中斷

(1)當發生中斷的時候,把是暫存器pc當前值存入lr(此時的lr是中斷模式下的lr),所以返回時,應該是將lr-4賦值給pc。(0x1004)注:有些異常中斷可能要將lr-8或lr賦值給pc。詳細請仔細看arm資料手冊。

(2)當發生irq或fiq後,系統要進入相應的異常模式進行處理,這些是由硬體實現的。

產生異常後,arm核會做以下工作:

<1>. 將當前的位址加4或者加8存到lr暫存器裡,即把當前狀態下下一條指令的位址存入lr

<2>. 將cpsr複製到spsr,

<3>. 然後將異常模式的狀態強制寫入cpsr

<4>. 強制pc從相關的異常向量處取指!!

中斷結束後:

1. 將spsr複製回cpsr

2. 開中斷

3. 返回原程式,ldr pc,lr

4:因為每個模式下面都有lr,所以當返回原來模式時,原來模式下的lr並沒有被破壞。

ARM BL或中斷返回,一些細節!

上面的圖是7處理器的暫存器示意圖。摘自網路 1,arm3級流水線 由arm7 tdmi s技術參考手冊p2可知,arm的流水線結構為 取指 解碼 執行 arm pc pc 4 pc 8 0x1008 0x1004 0x1000 在此頁,還註明,pc是指向被取指的指令,而不是正在執行的指令。也就是說在...

android或 java記憶體洩漏需要注意的地方

根據個人經驗總結 1.盡量避免使用 static 其生命週期是與應用程式共存亡的 宣告變數。2.使用後要及時 bitmap recycle 3.集合用完盡量賦值為null 4.使用內部類是,盡量使用靜態內部類 因為非靜態內部類都持有外部類的乙個強引用。若不使用不能使用靜態內部類,就提出此類,使用弱應...

c 返回類的指標需要注意的問題

問題是在刷劍指 offer時發現的 具體問題如下 定義了類treenode struct treenode 遞迴實現由先序遍歷和中序遍歷構造二叉樹 問題出在構建類物件和返回指向類的指標上 line6 和 最後的return,構造過程中會出現記憶體溢位,訪問到不合法位置 treenode recons...