版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、浙江大學(xué)城市學(xué)院實(shí)驗(yàn)報(bào)告課程名稱: 嵌入式操作系統(tǒng)實(shí)驗(yàn)4 實(shí)驗(yàn)名稱: ARM中斷處理與調(diào)試 學(xué)生姓名: 專業(yè): 學(xué)號(hào): 同組學(xué)生姓名: 指導(dǎo)老師: 成績: 一、實(shí)驗(yàn)?zāi)康模?掌握的異常處理過程。) 理解程序的結(jié)構(gòu)。) 掌握從應(yīng)用程序中調(diào)用異常方法。二、實(shí)驗(yàn)內(nèi)容) 使用異常設(shè)計(jì)字符串輸出程序) 設(shè)計(jì)異常處理程序三、實(shí)驗(yàn)設(shè)備1教學(xué)實(shí)驗(yàn)箱,PentiumII 以上的PC 機(jī),硬件多功能仿真器。2PC操作系統(tǒng)WIN98或WIN2000或WINXP,ADS1.2集成開發(fā)環(huán)境,仿真器驅(qū)動(dòng)程序。四、實(shí)驗(yàn)步驟任務(wù)1:使用異常設(shè)計(jì)字符串輸出程序 (注意:建立工程模仿下列步驟做,但要求工程名為自己的學(xué)號(hào)a)1 新建
2、工程2 把匯編程序添加到工程中SYS_WRITECEQU&3AREASTR_OUT,CODE,READONLYENTRYSTARTMOVSP,#0xD000MOVR1,#0xB000ADRR2,TEXTBLSTROUTMOVR0,#0x18LDRR1,=0x20026SWI0x123456STROUTSTMFDSP!,R0-R3,LRCHROUTLDRBR3,R2,#1CMPR3,#0STRR3,R1MOVR0,#SYS_WRITECSWINE0x123456BNECHROUTLDMFDSP!,R0-R3,PCLTORGTEXTDCB"Hello World!",0
3、x0a,0x0d,0x0END3 設(shè)置)ssembler選項(xiàng)中的arget選項(xiàng)卡()4 編譯5 打開調(diào)試器,ptions->Configure Target選項(xiàng),打開hoose Target對(duì)話框,在hoose Target中選擇,點(diǎn)擊Configger按扭,選擇處理器ARM7TDMI,點(diǎn)擊。6 載入映像文件*.axf7 根據(jù)工作需要打開相應(yīng)處理處理器觀察窗口并作設(shè)置)選擇rocessor Views->Disassembly,打開ARM反匯編窗口;)選擇rocessor Views->egisters,打開ARM寄存器窗口;)選擇rocessor Views->ow
4、Level Symbols ,打開ARM符號(hào)列表窗口,找到輸出字符串的地址;)選擇rocessor Views->Memory,打開ARM存儲(chǔ)器窗口;在emory Start Address地址欄中分別輸入從符號(hào)列表窗口找到輸出字符串的地址(0x00008040),確認(rèn)后,觀察輸出字符串的地址上的內(nèi)容。) 選擇rocessor Views->Console,打開控制臺(tái)窗口;8 單步運(yùn)行程序,觀察寄存器、存儲(chǔ)空間和工作模式的變化情況。9 完成下列表格:序號(hào)執(zhí)行指令指令執(zhí)行后的變化情況寄存器值(進(jìn)制表示)存儲(chǔ)空間工作模式R13_svcR14_svcR13_usrR14_usrR15CP
5、SR0xF0000000-任務(wù)2:設(shè)計(jì)異常 (注意:建立工程模仿下列步驟做,但要求工程名為自己的學(xué)號(hào)b).新建工程 2 把匯編程序添加到工程中例11.2T_BITEQU0x20EXPORTSWI_HandlerINPORTC_SWI_HandlerAREASWI_AREA,CODE,READONLYSWI_HandlerSTMFDSP!,R0-R3,R12,LRMOVR1,SPMPSR0,SPSRSTMFDSP!,R0TSTR0,#T_BITLDRNEHR0,LR,#-2BICNER0,R0,#0xFF00LDREQR0,LR,#-4BICEQR0,R0,#0xFF000000BLC_SWI_
6、HandlerLDMFDSP!,R0MSRSSPSR_cf,R0LDMFDSP!R0-R3,R12,PCEND例11.3void C_SWI_Handler(int swi_num,int *reqs)switch(swi_num)case0;regs0=regs0+regs1break;case1;regs0=regs0+regs1break;case2;regs0=(regs0+regs1)+(regs2+regs3)break;case3;int w,x,y,z;w=regs0;x=regs1;y=regs2;z=regs3;regs0=w+x+y+z;regs1=w-x-y-z;reg
7、s2=w*x*y*z;regs=(w+x)*(y-z);break;例11.4#include<stdio>#include"swi.h"unsigned * swi_vec=(unsigned * )0x08;extern void SWI_Handler(void);unsigned Install_Handler(unsigned routine,unsigned*vector)unsigned vec,old_vec;vec=(routine-(unsigned)vector-8)>>2;if(vec&0xff000000)print
8、f("Handler greater than 32MBytes from vector");vec=0xea000000-vecold_vec=*vector;*vector=vec;return(old_vec);int main(void)int result1,result2;struct four_results res_3;Insall_Handler(unsigned)SWI_Handler,swi_vec);printf("result1=multiply_two(2,4) = %dn",result1=multiply_two(2,4)
9、;printf("result2=multiply_two(3,6) = %dn",result2=multiply_two(3,6);printf("add_two(result1,result2) = %dn",add_two(result1,result2);printf("add_multiply_two(2,3,4,6) = %dn",add_multiply_two(2,3,4,6);res_3=many_operations(12,4,3,1);printf("res_3.a=*%dn",res_3.
10、a);printf("res_3.b=*%dn",res_3.b);printf("res_3.c=*%dn",res_3.c);printf("res_3.d=*%dn",res_3.d);return 0; 3設(shè)置)ssembler選項(xiàng)中的arget選項(xiàng)卡() 4.編譯 5.打開調(diào)試器,ptions->Configure Target選項(xiàng),打開hoose Target對(duì)話框,在hoose Target中選擇,點(diǎn)擊Configger按扭,選擇處理器ARM7TDMI,點(diǎn)擊。 6.載入映像文件*.axf 7.觀察處理器窗口選擇ro
11、cessor Views->Disassembly,打開ARM反匯編窗口;8單步運(yùn)行程序,觀察寄存器、存儲(chǔ)空間和工作模式的變化情況。9完成下列表格: 序號(hào)執(zhí)行指令指令執(zhí)行后的變化情況寄存器值(進(jìn)制表示)存儲(chǔ)空間工作模式R13_svcR14_svcR13_usrR14_usrR15CPSR0xF0000000- 問題:1的異常有哪些?2異常處理(硬件邏輯)的一般過程如何?3異常處理(軟件邏輯)的一般過程如何?4閱讀五、實(shí)驗(yàn)步驟記錄 6、 實(shí)驗(yàn)心得介紹個(gè)中斷使用swi模式特權(quán)模式superisor svc供OS使用的一個(gè)保護(hù)模式其實(shí)也是一個(gè)中斷,對(duì)于硬件用戶不可干擾確切的來說是用戶定義中斷模
12、式1.了解正常狀態(tài)USER狀態(tài)的可用寄存器R0R7通用 R8R12獨(dú)立寄存器有些模式寄存器組是獨(dú)立 R13-SP各自獨(dú)立 R14-LR獨(dú)立 PC通用 CPSR獨(dú)立r0r7通用寄存器同PC下的通用寄存器一樣R8R12 作為備份寄存器 ,可以使用r0r7均可使用他們r(jià)13作為堆棧指針r14作為連接寄存器存放當(dāng)前子程序返回的地址PC ARM是三級(jí)流水線所以PC總是為當(dāng)前執(zhí)行指令+8處 ARM下指令是字對(duì)齊所以低兩位為0CPSR 就是當(dāng)前狀態(tài)寄存器保存當(dāng)前執(zhí)行的各種情況 2.了解一下特權(quán)模式在PC處理時(shí)發(fā)生的事情正常執(zhí)行指令PC+4(均指ARM狀態(tài)下)發(fā)生函數(shù)調(diào)用時(shí)STMFD SP!, REGISTE
13、R, LR STMFD SP!, REGISTER, PC 來進(jìn)行寄存器入棧和LR連接寄存器函數(shù)返回地址入棧完成后進(jìn)行寄存器出棧和將LR的值即返回地址賦給PC返回遇到中斷指SWI(FIQ, IRQ)有所不同時(shí)(a)保存CPU當(dāng)前狀態(tài) 將CPSR->特權(quán)模式下的SPSR(B)設(shè)置當(dāng)前模式下CPRS的相應(yīng)的位 比如進(jìn)FIQ模式禁止FIQ中斷.(c)特權(quán)模式下獨(dú)立連接寄存器 LR保存中斷返回地址(d)PC設(shè)置為當(dāng)前中斷向量地址跳轉(zhuǎn)執(zhí)行中斷代碼3. 中斷返回時(shí)的工作(a)恢復(fù)當(dāng)前處理器狀態(tài)SPSR->正常模式的CPSR(b)恢復(fù)PC,LR->當(dāng)前PC4.SWI中斷是本身執(zhí)行指令產(chǎn)生
14、所以當(dāng)產(chǎn)生中斷時(shí)PC值不會(huì)更新為當(dāng)前指令+8地址處 所以PC-4為恢復(fù)中斷地址。這里是要注意的5._swi 修飾用于SWI中斷調(diào)用 中斷不返回形式 void _swi(swi_num) swi_name(arguments); 返回一個(gè)結(jié)果R0中 int _swi(swi_num) swi_name(arguments); 可以用結(jié)構(gòu)最多返回四個(gè)結(jié)果r0-r3 struct type int a, b, c, d; ; type(返回類型) _value_in_regs(返回多個(gè)結(jié)果的修飾符) _swi(swi_num) swi_name(arguments); 然后開始EXAMPLE建立sw
15、i.h文件存放結(jié)構(gòu)和swi函數(shù)聲明_swi(0) int test1(int,int); /兩個(gè)參數(shù)返回r0,地址偏移為0struct mystruct /定義返回結(jié)構(gòu)體 int a; int b; int c; int d;_swi(1) _value_in_regs struct mystruct test2(int,int,int,int); /聲明1自定義中斷建立中斷一及處理文件handle.s IMPORT c_handle_swi /引入二及中斷 處理 EXPORT SWI_Handle /到出中斷處理函數(shù) AREA SWIHandle,CODE,READONLY SWI_Hand
16、le STMFD SP!, r0-r3, r12, lr ;保存SPSR_svc mov r1, sp MRS r0, spsr /保存spsr STMFD sp!, r0 /入棧 LDR r0, lr, #-4 BIC r0, r0, #0xFF000000/得到24立即數(shù)放到R0中 BL c_handle_swi /二及調(diào)用 LDMFD SP!, r0 MSR spsr_cf, r0 LDMFD SP!, r0-r3, r12, pc END建立lib.c文件提供中斷函數(shù)處理代碼 void c_handle_swi( int swi_num, int *regs ) switch(swi_
17、num) case 0: /_swi(0) regs0 = regs0*regs1; break; case 1: /_swi(1) int x, y, z, p; x = regs0; y = regs1; z = regs2; p = regs3; regs0 = x + y + z + p; regs1 = x + y - z - p; regs2 = x*y + z*p; regs3 = (x + y)*(z + p); default: break; 提供主處理函數(shù) #include <stdio.h>#include "swi.h"unsigned *swi_vec = (unsigned*) 0x08;extern void SWI_Handle(void);unsigned Install_Handler( unsigned routine, unsigned *vector) unsigned vec, old_vec; vec = ( routine - (unsigned)vector - 8)>>2; if(vec&0xFF000000) printf("Handler greater than 32MByte f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度環(huán)保節(jié)能設(shè)備產(chǎn)品授權(quán)銷售代理合同4篇
- 二零二五年度草原生態(tài)旅游開發(fā)與生態(tài)環(huán)境保護(hù)合同3篇
- 2025年度創(chuàng)業(yè)園區(qū)入駐企業(yè)孵化合作協(xié)議3篇
- 二零二五年度國際人才引進(jìn)與培養(yǎng)合作協(xié)議
- 二零二五年度車輛質(zhì)押典當(dāng)風(fēng)險(xiǎn)評(píng)估與控制合同4篇
- 2025年中國花蕊保濕玫瑰水市場調(diào)查研究報(bào)告
- 核能產(chǎn)業(yè)技術(shù)創(chuàng)新-深度研究
- 二零二四年度裝修工程保證合同2篇
- 水稻種子質(zhì)量提升策略-深度研究
- 二零二五年度停薪留職員工技能培訓(xùn)與就業(yè)安置服務(wù)協(xié)議
- 《社區(qū)康復(fù)》課件-第五章 脊髓損傷患者的社區(qū)康復(fù)實(shí)踐
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫附答案
- 【可行性報(bào)告】2023年電動(dòng)自行車相關(guān)項(xiàng)目可行性研究報(bào)告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測與維修專業(yè)課程體系
- 浙江省安全員C證考試題庫及答案(推薦)
- 目視講義.的知識(shí)
- 房地產(chǎn)公司流動(dòng)資產(chǎn)管理制度
評(píng)論
0/150
提交評(píng)論