嵌入式實驗報告(答案)_第1頁
嵌入式實驗報告(答案)_第2頁
嵌入式實驗報告(答案)_第3頁
嵌入式實驗報告(答案)_第4頁
嵌入式實驗報告(答案)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

實驗報告ARM嵌入式系統(tǒng)原理及應用開發(fā)目錄實驗一ARM匯編指令實驗1 1實驗二ARM匯編指令實驗2 4實驗三匯編與C語言的相互調(diào)用實驗 8實驗一ARM匯編指令實驗1一、實驗目的1.初步學會使用EmbestIDEforARM開發(fā)環(huán)境及ARM軟件模擬器;2.通過實驗掌握簡單ARM匯編指令的使用方法。二.實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發(fā)環(huán)境。Windows98/2000/NT/XP。三.實驗內(nèi)容1.熟悉開發(fā)環(huán)境的使用,并使用LDR/STR和MOV等指令訪問存放器或存儲單元。2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成根本數(shù)學/邏輯運算。四.實驗原理ARM處理器共有37個存放器:31個通用存放器,包括程序計數(shù)器〔PC〕,這些存放器都是32位;6個狀態(tài)存放器,這些存放器也是32位,但只使用了其中的12位。1.ARM通用存放器通用存放器〔R0~R15〕可分為3類,即不分組存放器R0~R7.分組存放器R8~R14.程序計數(shù)器R15。存儲器格式ARM體系結(jié)構(gòu)將存儲器看作是從零地址開始的字節(jié)的線性組合。字節(jié)0~3存放第一個字,字節(jié)4~7存放第2個字,以此類推。 ARM體系結(jié)構(gòu)可以用兩種方法存儲字數(shù)據(jù),分別稱為大端格式和小端格式。GNU根底知識EmbestIDE集成了GNU匯編器as、編譯器gcc和鏈接器ld。因此,編寫程序要符合CNU的語法和規(guī)那么。關于as.gcc和ld的具體使用,請參照EmbestIDE所帶的電子文檔ProgRef.chm。五.實驗操作步驟1.實驗A〔1〕新建工程:先建一個文件夾如:H:\test1。然后運行ADS1.2集成開發(fā)環(huán)境,選擇File→New菜單項,彈出一個對話框,然后出來圖1.1新建工程類型選擇對話框,選擇project,在“Projectname〞中輸入工程文件名〞test1〞,點擊確定,同時創(chuàng)立一個與工程名相同的工作區(qū)?!?〕建立源程序并添加到工程.在File的菜單項中選擇“New〞,彈出一個對話框,點擊“file〞,在“filename〞中輸入文件名test1.s編輯完后,點確定?!?〕添加源文件:選擇Project→AddToProject→File項,或單擊工程管理窗口中的相應右鍵快捷菜單命令,翻開文件選擇對話框,在工程目錄下選擇剛剛建立的源并添加到文件test1.s。在“AddFiles〞對話框中選擇“DebugRel〞〔4〕根本設置:設置中只需設置“entrypoint〞〔5〕生成目標代碼:按下列圖標生成目標代碼?!?〕調(diào)試設置:按下列圖標。首先編譯和鏈接之后,在工程test1所在的目錄下生成一個名為“test_data的目錄,同時翻開對話框使用Debugrel目標,選擇生成的test.axf用于調(diào)試?!?〕翻開存儲器窗口,觀察地址0x1000~0x101F的內(nèi)容.〔8〕單步執(zhí)行程序并觀察和記錄存放器與存儲器值的變化。〔9〕結(jié)合實驗內(nèi)容和相關資料,觀察程序運行,通過實驗加深理解ARM指令。2.實驗B(1)在工作區(qū)窗口工作區(qū)名稱上右擊鼠標,在彈出的快捷菜單中選擇“AddNewProjecttoWorkspace…〞?!?〕參照實驗A及相應的實驗參考程序,建立工程〔3〕參照實驗A的步驟完成目標代碼的生成與調(diào)試。六.實驗參考程序1.實驗A參考程序X EQU 45 /*定義變量x,并賦值為45*/Y EQU 64 /*定義變量y,并賦值為64*/STACK_TOP EQU 0x1000 /*定義棧頂0x1000*/ AREAInit,CODE,READONLY CODE32 ENTRYSTART /*程序代碼開始標志*/ MOV SP,#STACK_TOP MOV R0,#X /*x的值放入R0*/ STR R0,[SP] /*R0的值保存到堆棧*/ MOV R0,#Y /*y的值放入R0*/ LDR R1,[SP] /*取堆棧中的數(shù)到R1*/ ADD R0,R0,R1 STR R0,[SP]STOP B STOP /*程序結(jié)束,進入死循環(huán)*/END實驗B參考程序X EQU 45 /*定義變量x,并賦值為45/Y EQU 64 /*定義變量y,并賦值為64*/Z EQU 87 /*定義變量z,并賦值為87*/STACK_TOP EQU 0x1000 /*定義棧頂0x1000*/ AREAInit,CODE,READONLY CODE32 ENTRYSTART MOV R0,#X /*x的值放入R0*/ MOV R0,R0,LSL#8 /*R0的值乘以2的8次方*/ MOV R1,#Y /*y的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/ MOV SP,#0x1000 STR R2,[SP] /*R2的值0x2D20放在0x1000的地址中*/ MOV R0,#Z /*z的值放入R0*/ AND R0,R0,#0xff /*取R0的低八位*/ MOV R1,#Y /*y的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/ LDR R0,[SP] /*SP的值〔0X2D20〕放入R1*/ MOV R1,#0x01 /*R1賦值0x01*/ ORR R0,R0,R1 /*該指令設置R0的0位,其余位保持不變*/ MOV R1,R2 /*R2的值放入R1*/ ADD R2,R0,R1,LSR#1 /*R1的值除以2加上r0的值放入R2*/STOP B STOP /*程序結(jié)束,進入死循環(huán)*/ END七.實驗報告〔1〕畫出程序A、程序B的實現(xiàn)框圖,并說明實驗A、B程序?qū)崿F(xiàn)的功能是什么?實驗A:最后的值0x6D放在0x1000的地址中,實現(xiàn)的是兩數(shù)的想加45+64=109(0x6D)實驗B:0x1000的地址:64/2+45*2^8=11552(0x2D20)R1:〔64/2+87〕=0x77R0:0x2D20+0x01=0x2D21R2:0x77/2+0x2D21=0x2D5C〔2〕記錄程序A和程序B單步運行時有關存放器與存儲器的值,并分析有關結(jié)果是否正確。實驗1A實驗B地址:0x2D20放在0x1000的地址中,0x77放在R1中,0x2D21放在R0中,0x2D5C放在R2中實驗二ARM匯編指令實驗2一、實驗目的通過實驗掌握使用LDM/STM、B和BL等指令完成較為復雜的存儲區(qū)訪問和程序分支,學習使用條件碼,加強對CPSR的認識。二、實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發(fā)環(huán)境。Windows98/2000/NT/XP。三、實驗內(nèi)容1.熟悉開發(fā)環(huán)境的使用并完成一塊存儲區(qū)的拷貝;2.完成分支程序設計,要求判斷參數(shù),根據(jù)不同參數(shù),調(diào)用不同的子程序。四、實驗原理1.ARM程序狀態(tài)存儲器在所有處理器模式下,都可以訪問當前程序狀態(tài)存放器CPSR。CPSR包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態(tài)和控制信息。每種異常模式都有一個程序狀態(tài)保存存放器SPSR。當異常出現(xiàn)時,SPSR用于保存CPSR的狀態(tài)。CPSR和SPSR的格式如下:313029282726876543210NZCVQDNM(RAZ)IFTMMMMM2.本實驗涉及到得as語法及規(guī)那么1〕標號的使用標號由一個符號后跟一個冒號組成,它表示程序中當前的指令或者數(shù)據(jù)地址。如果在程序中出現(xiàn)兩個相同的標號,匯編器會產(chǎn)生一個警告,同時,只有第一個標號有效。2)幾個偽指令〔1〕LDRLDR偽指令講一個32位常數(shù)或者一個地址值讀取到存放器中。當需要讀取到存放器中的數(shù)據(jù)超過了MOV或者MNV指令可以操作的范圍時,可以使用LDR偽指令將該數(shù)據(jù)讀取到存放器中。在匯編編譯器處理源程序時,如果該常數(shù)沒有超過MOV或者MNV可以操作的范圍,那么LDR指令被這兩條指令中的一條所替代;否那么,該常數(shù)將被放在最近的一個文字池〔LiteralPool〕內(nèi),同時,本指令被一條基于PC的LDR指令代替。語法格式LDR<register>,=<expression>其中,expression為需要讀取的32位常數(shù)。Register為目標存放器。例如LDRr1,=0xffLDRr0,=0xfff0000(2)ADRADR指令將基于PC的地址值或者給予存放器的地址值讀取到存放器中。在匯編編譯器處理源程序時,ADR偽指令被編譯器替換成一條適宜的指令。通常,編譯器用一條ADD指令或者SUB指令來實現(xiàn)該偽指令的功能。如果標號超出范圍或者標號在他那個一文件〔和同一段〕內(nèi)沒有定義,那么會產(chǎn)生一個錯誤,該指令不使用文字池。語法格式ADR<register><label>其中,register為目標存放器。Label為基于PC或者存放器的地址表達式。例如Label1:MOVr0,#25ADRr2,label1(3).ltorg.ltorg偽操作用于在當前段〔一般是.Text段〕的當前地址〔字對準地址〕產(chǎn)生一個文字池。語法格式.ltorg五、實驗操作步驟1.實驗A前面的步驟重復實驗一?!?〕翻開存儲器窗口,觀察地址0x104C~0x105F的內(nèi)容,以及地址0x1060~0X1073的內(nèi)容。〔2〕單步執(zhí)行程序并觀察和記錄存放器與存儲器值的變化,注意觀察的地址中的內(nèi)容變化。當執(zhí)行STMFD、LDMFD、LDMIA和STMIA指令時,注意觀察其后面的參數(shù)所指的地址段或存放器段的內(nèi)容變化?!?〕結(jié)合實驗內(nèi)容和相關資料,觀察程序運行,通過實驗加深理解ARM指令的使用。2.實驗B〔1〕創(chuàng)立新的工程,工程名為test2.mcp。〔2〕按照參考程序,重新編寫源代碼文件,并保持為test2.s,并把它們參加工程中?!?〕按照編譯→匯編器設置→鏈接器設置→調(diào)試器設置來設置新工程,并編譯、鏈接工程?!?〕下載調(diào)試文件,翻開Memrory/Register/Watch/Variable/CallStack窗口,單步執(zhí)行程序。通過以上窗口,跟蹤程序運行,觀察分析并記錄運行結(jié)果,通過實驗學會使用ADS1.2進行應用程序的開發(fā)與調(diào)試。六、實驗參考程序1實驗A參考程序NUM EQU 20 AREAInit,CODE,READONLY CODE32 ENTRYSTART LDRR0,=SRC LDRR1,=DST MOV R2,#NUM MOVSP,#0x400BLKCOPY MOVS R3,R2,LSR#3 BEQ COPYWORDS STMFD SP!,{R4-R11}OCTCOPY LDMIA R0!,{R4-R11} STMIA R1!,{R4-R11} SUBS R3,R3,#1 BNE OCTCOPY LDMFD SP!,{R4-R11}COPYWORDS ANDS R2,R2,#7 BEQ STOPWORDCOPY LDRR3,[R0],#4 STRR3,[R1],#4 SUBSR2,R2,#1 BNEWORDCOPYSTOP B STOPSRC DCB1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,10,11,12,13DST DCB0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0END七、實驗報告〔1〕畫出程序A的實現(xiàn)框圖,并說明實驗A程序?qū)崿F(xiàn)的功能是什么?功能:將0x104c~0x109b的20個子數(shù)據(jù)復制到目標地址區(qū)0x109c~0x10eb同時先將源數(shù)據(jù)區(qū)的起始地址R0和目標數(shù)據(jù)區(qū)的R1以及總的子數(shù)據(jù)個數(shù)R2,第一次次批量8個批量復制到中間的存放器R4~R11,再將中間存放器的數(shù)據(jù)批量存儲到目的數(shù)據(jù)存儲區(qū),然后進行數(shù)據(jù)復制是否完畢的判斷,假設未復制完畢,修改有關數(shù)據(jù)的地址,并重復前面的數(shù)據(jù)復制工作,再批量一次復制8個數(shù)到中間的存放器R4~R11,再將中間存放器的數(shù)據(jù)批量存儲到目的數(shù)據(jù)存儲區(qū)。剩下4個進行一個字的復制,通過R3復制4次最終到目標地址區(qū)?!?〕記錄程序A和程序B單步運行時有關存放器與存儲器的值,并分析有關結(jié)果是否正確。1.第一次運行R3=22,再一次運行R3=03.最后復制完畢123456781234567810111213實驗三匯編與C語言的相互調(diào)用實驗一、實驗目的1.閱讀EmbestS3CEV40啟動代碼,觀察處理器啟動過程。2.學會使用EmbestIDE輔助信息窗口來分析判斷調(diào)試過程和結(jié)果3.學會在EmbestIDE環(huán)境中編寫、編譯與調(diào)試匯編和C語言相互調(diào)用的程序。二、實驗設備1.硬件:PC機;2.軟件:EmbestIDE2004集成開發(fā)環(huán)境。Windows98/2000/NT/XP。三、實驗內(nèi)容使用匯編完成一個隨機數(shù)產(chǎn)生函數(shù),通過C語言調(diào)用該函數(shù),產(chǎn)生一系列隨機數(shù),存放到數(shù)組中。四、實驗原理1.ARM過程調(diào)用ATPCS(ARM)ATPCS是一系列規(guī)定應用程序之間相互調(diào)用的根本規(guī)那么,包括:支持數(shù)據(jù)棧限制檢查;支持只讀段位置無關〔ROPI〕;支持可讀/寫段位置無關〔RWPI〕;支持ARM程序和Thumb程序的混合使用;處理浮點運算。使用以上規(guī)定的ATPCS規(guī)那么是,應用程序必須遵守如下:程序編寫遵守ATPCS;變量傳遞以中間存放器和數(shù)據(jù)棧完成;匯編器使用-apcs開關選項。關于其他ATPCS規(guī)那么,用戶可以參考ARM處理器相關書籍或登錄ARM公司網(wǎng)站。程序只要遵守ATPCS相應規(guī)那么,就可以使用不同的源代碼來編寫程序。程序間的相互調(diào)用最主要的是解決參數(shù)傳遞問題。應用程序之間使用中間及數(shù)據(jù)棧來傳遞參數(shù),其中,第1~4個參數(shù)使用R0~R3,多用4個參數(shù)數(shù)據(jù)棧進行傳遞。這樣,接受參數(shù)的應用程序必須知道參數(shù)的個數(shù)。但是,在應用程序被調(diào)用時,一般無從知道所傳遞參數(shù)的個數(shù)。用不同語言編寫的應用程序在調(diào)用時可以自定義傳遞的約定。使用具有一定意義的形式來傳遞,可以很好地解決參數(shù)個數(shù)的問題。常用方法是把第1個或最后1個參數(shù)作為參數(shù)個數(shù)〔包括個數(shù)本身〕傳遞給應用程序。ATPCS中存放器的相應關系如表3.1所列。表3.1ATPCS規(guī)那么中存放器列表ARM

存放器ATPCS

別名ATPCS存放器說明ARM

存放器ATPCS

別名ATPCS存放器說明R0~R3a1~a4參數(shù)/結(jié)果/scratch存放器1~4R10v7、slARM狀態(tài)局部變量存放器7,數(shù)據(jù)棧限制指針存放器R4v1局部變量存放器1R11v8ARM狀態(tài)局部變量存放器8R5v2局部變量存放器2R12ip子程序內(nèi)部調(diào)用的臨時(scratch)存放器R6v3局部變量存放器3R13sp數(shù)據(jù)棧指針存放器R7v4、wr局部變量存放器4

Thumb狀態(tài)工作存放器R14lr鏈接存放器R8v5ARM狀態(tài)局部變量存放器5R15PC程序計數(shù)器R9v6、sbARM狀態(tài)局部變量存放6

RWPI的靜態(tài)基址存放器五、實驗操作步驟1.首先先創(chuàng)立一個新的工程randomnumber.mcp。2.再把實驗中提供的程序?qū)⒃次募andtest.c、init.s、random.s和ldscript.scf參加到新的工程里面。3.按照編譯→匯編器設置→鏈接器設置→調(diào)試器設置來設置新工程,并編譯、鏈接工程。4.下載調(diào)試文件,翻開Memrory/Register/Watch/Variable/CallStack窗口,單步執(zhí)行程序。通過以上窗口,跟蹤程序運行,觀察分析并記錄運行結(jié)果,通過實驗學會使用ADS1.2進行應用程序的開發(fā)與調(diào)試。六、實驗參考程序1.randtest.c參考源代碼#include<stdio.h>externunsignedintrandomnumber(void);intmain(){ inti; intnTemp; unsignedintrandom[14]; for(i=0;i<14;i++) { nTemp=randomnumber(); random[i]=nTemp; } return(0);}2.init.s參考源代碼 AREAInit,CODE,READONLY CODE32 ENTRYSTART BReset_HandlerUndefined_Handler BUndefined_HandlerSWI_Handler BSWI_HandlerPrefetch_Handler BPrefetch_HandlerAbort_Handler BAbort_Handler NOP IRQ_Handler BIRQ_HandlerFIQ_Handler BFIQ_HandlerReset_Handler LDR SP,=0x00002000 IMPORTmain _main EXPORT_main ldrr0,=main mov

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論