日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ARM的异常处理

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM的异常处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

經(jīng)典ARM微處理器包括7種異常:

1、 復(fù)位異常

2、 未定義指令異常

3、 軟件中斷異常

4、 預(yù)取指令異常

5、 數(shù)據(jù)異常

6、 IRQ(中斷)

7、 FIQ(快速中斷)

異常,單片機(jī)為中斷,籠統(tǒng)來(lái)講可以把異常類似的看作中斷,本質(zhì)上兩者還是有區(qū)別的。異常/中斷是硬件和軟件進(jìn)行異步工作的一種方式。

經(jīng)典ARM微處理器發(fā)生異常時(shí),ARM微處理器會(huì)自動(dòng)調(diào)用預(yù)先寫(xiě)好的異常處理程序。為了讓ARM核能自動(dòng)的調(diào)用異常處理程序,必須規(guī)定一個(gè)位置,存放異常處理程序入口。ARM微處理器設(shè)計(jì)者把7種異常的入口放到一起,稱為異常向量表,每種異常在異常向量表種占4個(gè)字節(jié)。如下圖所示:

圖:ARM異常向量表

異常向量表占32個(gè)字節(jié),其中有一個(gè)預(yù)留的(0x14),ARM異常向量表地址默認(rèn)在地址0,有些處理器可以設(shè)置為0xFFFF0000地址處,具體要看CPU手冊(cè)。由于每個(gè)異常入口在向量表中只有4個(gè)字節(jié),所以在異常向量表中每種異常都只放一條ARM跳轉(zhuǎn)指令(發(fā)生異常后,處理器自動(dòng)切換到ARM狀體),跳轉(zhuǎn)到對(duì)應(yīng)的異常處理程序處繼續(xù)執(zhí)行。

當(dāng)異常發(fā)生時(shí),硬件自動(dòng)做如下動(dòng)作:

圖:ARM異常發(fā)生時(shí)硬件做哪些工作

看到這里我們回想一個(gè)問(wèn)題:

1、 為什么ARM微處理器用戶和系統(tǒng)模式?jīng)]有SPSR寄存器,而其他5種異常模式卻有SPSR寄存器?

異常發(fā)生后,ARM微處理器會(huì)自動(dòng)進(jìn)入到ARM狀體,并且自動(dòng)切換到異常對(duì)應(yīng)的模式運(yùn)行。這就需要修改CPSR寄存器(T位,Mode位),我們都知道,當(dāng)異常處理程序執(zhí)行完畢后我們需要恢復(fù)“現(xiàn)場(chǎng)”,即將相關(guān)寄存器恢復(fù)到異常發(fā)生前的值,以保證之前的代碼依然能夠正確執(zhí)行。同樣,CPSR也需要恢復(fù)到異常發(fā)生前的值,所以硬件在修改CPSR之前需要先保存其值,ARM就為每種異常模式設(shè)計(jì)了一個(gè)SPSR寄存器,用于異常發(fā)生時(shí)保存CPSR寄存器的值,保證異常處理完畢能恢復(fù)其值。

同理,用戶和系統(tǒng)模式只能通過(guò)指令主動(dòng)切換到該模式,不會(huì)由硬件通過(guò)異常自動(dòng)進(jìn)入,也就不需要硬件備份CPSR寄存器的值,所以沒(méi)必要設(shè)計(jì)一個(gè)SPSR寄存器。

2、為什么每種異常模式都有一個(gè)物理上獨(dú)立的R14/LR寄存器?

異常發(fā)生后,ARM微處理器會(huì)自動(dòng)跳轉(zhuǎn)到異常入口(向量)處執(zhí)行代碼,當(dāng)異常處理完畢,需要返回到之前發(fā)生異常的地方繼續(xù)執(zhí)行代碼,如何知道之前在哪個(gè)地址執(zhí)行代碼呢?

異常發(fā)生時(shí),在跳轉(zhuǎn)到異常入口前,需要保存PC寄存器的值,PC是取指的地址,也就間接的代表著執(zhí)行位置,為了在硬件修改PC前保存PC,所以設(shè)計(jì)者為每種異常模式設(shè)計(jì)了一個(gè)物理上獨(dú)立的R14/LR寄存器,用于保存返回地址。

異常返回:

異常發(fā)生時(shí),ARM微處理器會(huì)自動(dòng)做些保護(hù)現(xiàn)場(chǎng)的工作,但是返回時(shí)完全靠軟件來(lái)處理。

ARM異常處理完畢,軟件需要做:

1、 恢復(fù)CPSR寄存器的值

2、 根據(jù)R14/LR寄存器恢復(fù)PC的值

異常向量表能放哪些指令?

圖:異常向量表中可以放哪些ARM指令

如上圖,異常向量表中通常存放一條ARM跳轉(zhuǎn)指令。放不同的指令,有不同的限制。比如使用mov指令,異常程序地址必須以8位圖立即數(shù)的形式給出,這樣異常處理程序地址必須固定;使用B指令只能相對(duì)跳轉(zhuǎn)32M Bytes的范圍內(nèi);使用LDR加載指令時(shí),其偏移量只能使用立即數(shù)的形式,加載范圍是4K字節(jié)。放那種指令需要根據(jù)自己系統(tǒng)需要。

異常發(fā)生后到異常處理程序返回的大致流程:

圖:ARM異常處理流程示例

異常優(yōu)先級(jí):

圖:ARM異常優(yōu)先級(jí)

ARM中斷:

ARM有兩種中斷,FIQ快速中斷,IRQ中斷,FIQ優(yōu)先級(jí)高于IRQ。ARM微處理器有兩個(gè)中斷觸發(fā)腳,對(duì)應(yīng)的腳上是低電平時(shí),觸發(fā)相應(yīng)的中斷,如果ARM核沒(méi)有關(guān)閉該中斷,則處理器響應(yīng)該中斷,執(zhí)行對(duì)應(yīng)的中斷處理程序。

圖:ARM中斷框圖

FIQ vs IRQ:

圖:FIQ vs IRQ

ARM異常處理程序返回指令:

圖:ARM異常返回指令參考

總結(jié)

以上是生活随笔為你收集整理的ARM的异常处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。