下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
當(dāng)異常產(chǎn)生時,ARM拷貝cpsr到設(shè)置中斷位相應(yīng)中斷(如果需要從spsr_<mode>恢復(fù)?異常的返回地址也是需要我們注意的地方,不同的異常模式返回地址也是存在差異的,這主要是因?yàn)楦鞣N異常產(chǎn)生的機(jī)理存在差別所導(dǎo)致的。這樣我們的需要在異常進(jìn)入處理函數(shù)之前或者在返回時調(diào)整返回地址,一般采用進(jìn)入異常處理函數(shù)前進(jìn)行手動調(diào)整。下面每一種異常r14保存的值都給了出來,其中也包含了cpu自動處理的部分,根據(jù)保存的r14就可以知道怎樣實(shí)現(xiàn)地址的返回。movspc,movspc,由于cpu會自動跳轉(zhuǎn)到對應(yīng)的異常向量中,因此只需要在在各個異常向量中存放對應(yīng)的操作,最簡單的都是存放一個b指令跳轉(zhuǎn)到對應(yīng)的異常處理函數(shù)的操作即可。但由于b指令的跳轉(zhuǎn)返回只有±32M,而異常處理函數(shù)的地址可能會超過±32M,因此可以采用另式實(shí)現(xiàn)方式:在異常向量中保存一條指令ldrpc,[addr]其中的addr中就保存了異常處理函數(shù)的地址,當(dāng)然addr的相對地址要小于±32M這樣也就解決了跳轉(zhuǎn)范圍的問題。接下來就是異常處理函數(shù)對應(yīng)的操作,可以在進(jìn)入異常處理之前就進(jìn)行返回地址的調(diào)整,這樣后面就不用進(jìn)行處理,當(dāng)然也可以在返回過程中再調(diào)整。進(jìn)行壓棧操作,保存對應(yīng)的環(huán)境變量。調(diào)用實(shí)際的處理過程等。出棧,恢復(fù)cpu的狀態(tài)和寄存器的值。由于第一步中已經(jīng)調(diào)整好返回地址,這一步不需要再次調(diào)整。當(dāng)然如果之前沒有調(diào)整,這里則需要進(jìn)行相應(yīng)的調(diào)整。 ldrpc,Reset_Handlerldrrn 開始的字節(jié)內(nèi)容是復(fù)位處理函數(shù)Reset_Handler的地址0x ,跳到第1行語句執(zhí)行。ldrpc,Reset_Addr把0X ldr 條產(chǎn)生異常的指令,通過這兩條指令可以用軟件的方法實(shí)現(xiàn)異常,其中一個就是中斷指令swi,另一個是bkpt(斷點(diǎn)中斷指令,產(chǎn)生一個預(yù)取異常,它常被用來設(shè)置軟件斷點(diǎn),在程序調(diào)試的時候十分有用)。軟中斷是利用硬件中斷的概念,用軟件方式進(jìn)行模擬,實(shí)現(xiàn)從用戶模式切換到模式并執(zhí)行程序的機(jī)制硬件中斷是由電平的物理特性決定,在電平變化時中斷操作,而軟中斷是通過一條具體指令si,中斷操作,也就是說用戶程序里可以通過寫入swi指令來切換到模式,當(dāng)cpu執(zhí)行到swi指令時會從用戶模式切換到管理模式下,執(zhí)行軟件中斷處理。由于swi指令由操作系統(tǒng)提供的API封裝起來,并且軟件中斷處理程序也是操作系統(tǒng)編寫者提前寫好的,因此用戶程序調(diào)用API時就是將操作權(quán)限交給了操作系統(tǒng),所以用戶程序還是不能隨意硬件。軟件中斷指令(SoftwareIntuSWI)用于產(chǎn)生軟中斷,實(shí)現(xiàn)從用戶模式變換到管理模式,cpsr保存到管理模式的spsrswi向量。在其他模式下也可以使用swiswi{cond}imme 序到底想要做什么?swi指令后面的24位用來做用戶程序和軟中斷處理程序之間的接頭暗號。通過該軟中斷立即數(shù)來區(qū)分用戶不同操作,執(zhí)行不同內(nèi)核函數(shù)。如果用戶程序調(diào)用系統(tǒng)調(diào)用時傳遞參數(shù),根據(jù)ATPCSC語言與匯編混合編程規(guī)則將參數(shù)放入r0~r4即可。處理程序要通過引起軟件中斷的swi指令,以取得24為立即數(shù)。、指令中24位的立即數(shù)指定了用戶請求的服務(wù)類型,中斷服務(wù)的參數(shù)通過通用寄存器傳遞。如下面這個程序產(chǎn)生一個中斷號位12的軟中斷:movr0,# 、指令中的24位立即數(shù)被忽略,用戶請求的服務(wù)類型有寄存器R0的值決定,參數(shù)通過其他的通用寄存器傳遞。如下面的例子通過R0傳遞中斷號,R1傳遞中斷的子功能號:movr0,# movr1,#34 swi0下面的例子通過系統(tǒng)調(diào)用函數(shù)intled_on(intled_no)實(shí)現(xiàn)點(diǎn)亮第led_no個LED燈,由于C語言里沒有swi指令對應(yīng)的語句,因此這兒要用到C語言與匯編混合編程,led_on函數(shù)里將參數(shù)led_no的值傳遞給r0,通過軟中斷swi指令切換到軟中斷管理模式,同時r0軟中斷方式點(diǎn)亮LED燈,用戶通過swi#1指令可以點(diǎn)燈,具體點(diǎn)亮哪個燈,通過r0保存參數(shù)傳遞,如果亮燈成功返回對應(yīng)LED號。 //軟中斷號1,調(diào)用管理模式下的do_led_onintled_on(int{int C程序中沒有SWImovr0, //根據(jù)ATPCS規(guī)則,r0 //產(chǎn)生SWI軟中斷,中斷號為movret, //軟中斷處理結(jié)束,取得中斷處理返回值,傳遞給ret}return //將ret返回給調(diào)用led_on} 軟中斷處理中通過stmfdsp!,{r0-r12,lr} 要保存程序執(zhí)行現(xiàn)場,將r0~r12通用寄存器數(shù)據(jù)保存在管理模式sp棧內(nèi),lr由硬件自動保存軟中斷指令下一條指令的地址(后面利用lr的地址取得swi指令編碼),該寄存器值也保存sp棧內(nèi),將來處理完畢之后返回.由swi指令編碼知識可知,swi指令低24位保存有軟中斷號,通過ldrr4lr4]指令,取得swi指令編碼(lr為硬件自動保存swixxx指令的下一條指令地址,lr–4就是swi指令地址),將其保存在r4寄存器中。通過bicr4,r4,#0xff000000指令將SWI指令高8位清除掉,只保留低24位立即數(shù),取得swi燈操作do_led_on。如果24位立即數(shù)為2,表示led_off系統(tǒng)調(diào)用產(chǎn)生的軟中斷,則調(diào)用滅燈操作do_led_on,根據(jù)ATPCS調(diào)用規(guī)則,r0~r3做為參數(shù)傳遞寄存器,在軟中斷處理中沒有使用這4個寄存器,而是使用r4作為操作寄存器的。執(zhí)行完系統(tǒng)調(diào)用操作之后,返回到swi_return(在調(diào)用對應(yīng)系統(tǒng)操作時,通過ldreqlr,=swi_return設(shè)置了返回地址),執(zhí)行返回處理,通過ldmiasp!,{r0-r12,pc}^指令將用戶寄存器數(shù)據(jù)恢復(fù)到r0~r12,將進(jìn)入軟中斷處理時保存的返回地址lr的值恢復(fù)給pc,實(shí)現(xiàn)程序返回,同時還恢;0x00:復(fù)位Reset ;0x04:未定義異常(未處理 ;0x08:軟件中斷異常,跳往軟件中斷處理函數(shù)HandleSWI ……為了達(dá)到這個目的,操作系統(tǒng)會將硬件的操作權(quán)限交給內(nèi)核來管理,用戶程序不能隨意使用硬件,使用硬件(對硬件寄存器進(jìn)行讀寫)系統(tǒng)發(fā)出請求,操作系統(tǒng)內(nèi)核幫助用戶程序?qū)崿F(xiàn)其操作,也就是說用戶程序不會直接操作硬件,而是提供給用戶程序一些具備預(yù)定功能的內(nèi)核函數(shù),通過一組稱為系統(tǒng)調(diào)用的(systemcall)的接口呈現(xiàn)給用戶,系統(tǒng)調(diào)用把應(yīng)用程序的請求傳給內(nèi)核,調(diào)用相應(yīng)的內(nèi)核函數(shù)完成所需的處理,將處理結(jié)果返回給應(yīng)用程序。這好比我們?nèi)ャy行取款,用戶自己的銀行帳戶不可能隨意操作,必須要有一個安全的操作流程和規(guī)范,銀行里的布局通常被分成兩部分,中間用透明玻璃分隔開,只留一個小窗口,面向用戶的是用戶服務(wù)區(qū),工作人員
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024學(xué)校教官服務(wù)與管理工作協(xié)議
- ??飘厴I(yè)答辯模板
- 澳洲訂貨合同范本
- 抵押汽車貸款擔(dān)保協(xié)議2024年正
- 2024年鋼筋構(gòu)造詳細(xì)設(shè)計協(xié)作協(xié)議
- 2024小產(chǎn)權(quán)房產(chǎn)交易協(xié)議樣式
- 二手貨車買賣協(xié)議模板2024
- 2024教師招聘教師資格考試面試說課稿小學(xué)體育站立式跑
- 2024教師招聘教師資格考試面試試講稿小學(xué)數(shù)學(xué)原理14小數(shù)點(diǎn)移動引起小數(shù)大小的變化
- 興趣愛好制定心理健康保障計劃200字
- 項(xiàng)目進(jìn)度管理培訓(xùn)(-)課件
- 高考語文 如何讀懂詩歌 課件(32張PPT)
- 中壓交聯(lián)電纜電纜正、負(fù)和零序計算
- 3C戰(zhàn)略三角模型
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)示范工程質(zhì)量管理體系與措施
- 學(xué)生頂崗實(shí)習(xí)安全教育課件
- 公司組織架構(gòu)圖模板課件
- 遼寧省葫蘆島市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 植物種子的傳播方式課件
- 電纜敷設(shè)施工方案及安全措施
- 百合干(食品安全企業(yè)標(biāo)準(zhǔn))
評論
0/150
提交評論