




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗一、ARMSDT2.5開發環境一、實驗目的熟悉ARMSDT2.5開發環境,學會ARM并行口仿真器的使用。使用SDT編譯,下載,調試,并跟蹤一段已有的程序。了解嵌入式開發的基本思想和過程。二、實驗內容本次試驗使用ARMSDT2.5集成開發環境。新建一個基于操作系統的工程文件,并編譯這個工程。學習ARM并行口仿真器的使用和開發環境的設置。下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量,為調試應用程序打下基礎。三、預備知識C語言的基礎知識、程序調試的基礎知識和方法四、實驗設備及工具(包括軟件調試工具)硬件:ARM嵌入式開發板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上軟件:PC機操作系統win2000、ARMSDT2.51集成開發環境、仿真器驅動程序五、實驗步驟1、運行ARMSDT2.5集成開發環境(ARMProjectManager)。選擇File|New菜單,在對話框中選擇Project,并在如圖1-1所示,新建一個工程文件(work1.apj)。圖1-1“新建工程”對話框2、在新建的工程中,如圖1-2所示,選中工程樹的“根部”。使用菜單Project|ToolConfigurationforwork1.apj|<asm>=armasm|Set,對整個工程的匯編進行設置。圖1-23、因為開發板上的嵌入式處理器ARM7TDMI沒有浮點處理器,所以,如圖1-3所示,在彈出的對話框中設置FloatingPointProcessor為none。保持其它的設置不變。圖1-34、選中工程樹的“根部”,通過菜單Project|ToolConfigurationforwork1.apj|asmlink|Set,對整個工程的連接方式進行設置。5、在彈出的對話框中,選中EntryBase選項卡,如圖1-4所示,設置連接的Read-Only(只讀)和Read-Write(讀寫)地址。地址0xC000000是開發板上SDRAM的真實地址,是由系統的硬件決定的;0xC600000指的是系統可讀寫的內存的地址。也就是說,在0xC000000—0xC5ffffff之間是只讀區域,存放程序的代碼段,在0xC600000開始是程序的數據段。圖1-46、選擇LinkerConfiguration的ImageLayout選項卡,如圖1-5所示,設置程序的入口模塊。指定在生成的代碼中,程序是從44binit.s開始運行的。圖1-57、選中工程樹中DebugRel子樹,用Delete鍵刪除,同樣,選中工程樹中Release子樹,用Delete鍵刪除,提示:在系統工程樹中Debug子樹是下面生成的是應用程序的調試版本,在生成的目標代碼中,包含了系統的調試信息。Release子樹是應用程序的發行版本,生成的代碼中不包括調試信息,而且編譯器還針對速度和代碼的大小進行優化。DebugRel子樹是一個折衷版本,通常用不到,本實驗中均只考慮Debug子樹。8、按以下步驟步驟使編譯器輸出bios.bin文件。選擇工程樹的“根部”,選擇Project—>EditVariablesforwork1.apj…彈出圖1-6的窗口,將變量build_target的值<$projectname.axf>改為<$projectname.bin>,單擊ok。圖1-6選擇Project—>EditProjectTemplate…彈出圖1-7,單擊EditDetails…將標題改為Rom。單擊New…新加一個CreateRome構建過程。如圖1-8所示。圖1-7圖1-8選擇Project—>EditVariablesforwork1.apj…在Name和Value項中如圖1-9填寫,點擊OK;在下圖窗口中,將$$Projectname的值改為bios。圖1-99、至此,工程文件設置完畢。因為設置過程比較繁瑣,可以保存此工程,下次新建項目的時候復制即可。提示:可以使用File|SaveasTamplete菜單把當前工程的設置保存為模板,比如,Rom.apj文件。把此文件復制到ARMSDT編譯器的\ARM251\Template目錄下,以后創建工程的時候,就可以直接選擇使用此模板了。模板文件也是一個工程文件(*.apj),但是,模板文件中不包括工程中文件的信息,只有編譯器環境的設置。10、把\bsp及其子目錄和main.c復制到work1的目錄下。如圖1-10所示。選中工程樹中Debug子樹的Sources選項。通過菜單Project|AddFilestoSources,把bsp\bspinit.c,bsp\cpu\44binit.s,bsp\cpu\44blib.c,bsp\uart\uart.c和main.c文件加入工程的源文件中,如圖1-10所示。圖1-1011、選中工程樹中Debug子樹,通過Project|Buildwork1.apj“Debug”菜單(或者工具欄中的相應按鈕)編譯整個工程。12、把ARM的JTAG仿真器連接到PC機的并行口和開發板上,打開開發板的電源,將光盤中jtag目錄拷貝到C:\下,按照“C:\jtag\SDT251在線調試方法.pdf”中的要求安裝仿真器的驅動程序,然后在開始->運行中輸入cmd命令,在彈出窗口中輸入cdc:\jtag,和winntjtag起動仿真器連接程序。13、使用Project|Debugwork1.apj“Debug”菜單(或者工具欄中的相應按鈕)啟動ARMDebugger軟件調試程序。14、在ARMDebugger中,通過Options|ConfigureDebugger菜單設置仿真器。如圖1-9所示,在彈出的對話框中,設置TargetEnvironment為Remote_A圖1-1115、單擊Configure按鈕,按照如圖1-10所示,設置仿真器,添加本機的IP地址。圖1-1216、出現如下提示以后,請先按開發板復位按鈕,然后點YES,ARMDebbuger開始通過仿真器裝載程序。如圖1-11所示。圖1-1317、裝載完畢以后,通過Option|Addsearchpath設置工程文件路徑,然后點擊View|Sourcefiles,會看到工程中的文件信息,如圖1-14所示。圖1-1418、通過Execute|Go菜單(或者工具欄中的相應按鈕)運行程序。程序運行的時候,可以使用Execute|Stop菜單(或者工具欄中的相應按鈕)暫停運行程序。如圖1-12所示,在Execute窗口中將顯示出程序暫停的位置。圖1-1519、通過Execute|Step菜單(或者工具欄中的相應按鈕)可以單步運行程序。也可以使用StepIn、StepOut菜單命令進入或者跳出函數的調用。20、在源文件列表中打開Main.c文件。選擇源文件中的某一行,右擊鼠標,如圖1-14所示,用ToggleBreakpoint快捷菜單命令可以設置斷點,使程序運行到這里停下來。圖1-1621、使用在View菜單下的Registers、Variables和Memory命令可以查看工作寄存器或者內存變量。讀者可以逐一的嘗試,為以后調試程序打下基礎。實驗二:開發基本的嵌入式應用程序一、實驗目的學習使用UltraEditC代碼文本編輯器。掌握Uart_Printf()函數的用法。學會使用ppcboot,tftp和超級終端進行嵌入式應用開發。二、實驗內容使用UltraEditC代碼文本編輯器,編寫一段程序,在串口顯示“Helloworld”等文本。利用ppcboot與tftp將程序下載到ARM板。三、預備知識用ARMSDT2.5集成開發環境,編寫和調試程序的基本過程。四、實驗設備及工具(包括軟件調試工具)硬件:ARM嵌入式開發板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上,串口線。軟件:PC機操作系統win2000、ARMSDT2.51集成開發環境、仿真器驅動程序、UltraEdit、tftp。五、實驗步驟在ARMSDT2.51中,打開實驗一中創建好的工程work1。啟動UltraEdit,通過UltraEdit的Files|Open菜單(或者相應的工具欄按鈕)打開eg1\main.c。可以看到,UltraEdit是一個很方便的C代碼閱讀和編輯工具,它會自動區分C語言的語法,把變量、函數和宏定義等都特殊的顯示出來便于閱讀。很適合于編輯大型軟件。花20分鐘熟悉一下UltraEdit,同時閱讀main.c文件的代碼。3、重點分析Main函數中的代碼,了解系統的啟動過程。Main函數的代碼如下:voidMain(void){ Bsp_Init(); while(1) { Uart_Printf("HelloWorld!\n"); Delay(10000); }}4、系統從bsp\cpu\44binit.s開始執行,進行簡單的初始化后即進入main()函數,Bsp_Init()用于初始化ARM板,然后進行while(1)死循環(注意系統任務都是死循環形式,沒有返回)。Uart_Printf()的格式可以參看bsp\uart\uart.h。5、讀者可以將Uart_Printf()中的內容變更,看運行后超級終端有什么不同。6、編譯并下載程序,調試程序。開啟tftp服務程序,設置bios.bin(此即為將要下到ARM板運行的映象文件)的路徑,如圖2-1圖2-17、運行windows系統下的超級終端(HyperTerminal)應用程序,如圖2-2所示新建一個終端通訊,取名為arm。單擊確定按鈕。圖2-28、選擇終端的連接的串口(比如:串行口1),如圖2-3所示,設置通訊的格式和協議。圖2-39、設置完成超級終端以后,就可和嵌入式開發板中固化的ppcboot建立通訊。按嵌入式開發板系統的復位按鈕,使系統通過BIOS引導,通過PC機鍵盤可以和嵌入式開發板通訊,按回車鍵,此時超級終端等待命令輸入。輸入tftpc000000,終端顯示下載完畢,再輸入goc000000開始程序運行。如圖2-4。關于ppcboot的詳細使用可參看“ppcboot的移植與使用”。實驗三、μCOSII在ARM上的移植一、實驗目的1.了解UC/OS-II內核的主要結構。2.掌握將UC/OS-II內核移植到ARM7處理器上的基本方法。二、實驗內容1.將UC/OS-II內核移植到ARM7處理器上。2.按鍵盤上的任意鍵,在超級終端上顯示對應的鍵值。三、預備知識1.掌握在ARMSDT2.5集成開發環境中編寫和調試程序的基本過程。2.會使用UltraEdit編輯C語言源程序。3.了解ARM7處理器的結構。4.了解利用ppcboot和tftp進行下載文件的方法。5.了解UC/OS-II系統結構。四、實驗設備及工具硬件:ARM嵌入式開發板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上,串口線。軟件:PC機操作系統win2000、ARMSDT2.51集成開發環境、仿真器驅動程序、UltraEdit、tftp。五、實驗原理所謂移植,指的是一個操作系統可以在某個微處理器或者微控制器上運行。雖然μCOS-II的大部分源代碼是用C語言寫成的,但是,仍需要用C語言和匯編語言完成一些與處理器相關的代碼。比如:μCOS-II在讀寫處理器寄存器時只能通過匯編語言來實現。因為μCOS-II在設計的時候就已經充分考慮了可移植性,所以,μCOS-II的移植還是比較容易的。要使μCOS-II可以正常工作,處理器必須滿足如下要求:1.處理器的C編譯器能產生可重入代碼。可重入的代碼指的是一段代碼(比如:一個函數)可以被多個任務同時調用,而不必擔心會破壞數據。也就是說,可重入型函數在任何時候都可以被中斷執行,過一段時間以后又可以繼續運行,而不會因為在函數中斷的時候被其他的任務重新調用,影響函數中的數據。下面的兩個例子可以比較可重入型函數和非可重入型函數:程序1:可重入型函數voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}程序2:非可重入型函數inttemp;voidswap(int*x,int*y){temp=*x;*x=*y;*y=temp;}程序1中使用的是局部變量temp作為變量,通常的C編譯器,把局部變量分配在棧中。所以,多次調用同一個函數,可以保證每次的temp互不影響。而程序2中temp定義的是全局變量,多次調用函數的時候,必然受到影響。代碼的可重入性是保證完成多任務的基礎,除了在C程序中使用局部變量以外,還要C編譯器的支持。筆者使用的是ARMSDT的集成開發環境,可以生成可重入的代碼。2.在程序中可以打開或關斷中斷。在μCOS-II中,可以通過OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏來控制系統關閉或者打開中斷。這需要處理器的支持。在ARM7TDMI的處理器上,可以設置相應的寄存器來關閉或者打開系統的所有中斷。3.處理器支持中斷,并能產生定時中斷(通常在10Hz~1000Hz之間)μCOS-II是通過處理器產生的定時器的中斷來實現多任務之間的調度的。在ARM7TDMI的處理器上可以產生定時器中斷。4.處理器支持能夠容納一定量數據(可能是幾千字節)的硬件堆棧。5.處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧或內存中的指令。移植工作包括以下幾個內容:1.用#define設置一個常量的值(OS_CPU.H)。2.聲明10個數據類型(OS_CPU.H)。3.用#define聲明三個宏(OS_CPU.H)。4.用C語言編寫六個簡單的函數(OS_CPU_C.C)。5.編寫四個匯編語言函數(OS_CPU_A.ASM)。μCOS-II進行任務調度的時候,會把當前任務的CPU寄存器存放到此任務的堆棧中,然后,再從另一個任務的堆棧中恢復原來的工作寄存器,繼續運行另一個任務。所以,寄存器的入棧和出棧是μCOS-II多任務調度的基礎。在移植過程中,INCLUDES.H使得用戶項目中的每個.C文件不用分別去考慮它實際上上需要那些頭文件。使用INCLUDES.H的唯一缺點是,它可能會包括一些實際不相關的頭文件。這意味著每個文件的編譯時間可能會增加。但由于它增強了代碼的可移植性,所以我們還是決定使用這一方法。用戶可以通過編輯INCLUDES.H來增加自己的頭文件,但用戶的頭文件必須添加在頭文件列表的最后。圖15-1uC/OS硬件和軟件體系結構六、實驗步驟1.設置OS_CPU.H中與處理器和編譯器相關的代碼/**********************************************************************與編譯器相關的數據類型*********************************************************************/typedefunsignedchar BOOLEAN;typedefunsignedchar INT8U;//8位無符號整數typedefsignedchar INT8S;//8位有符號整數typedefunsignedshort INT16U;//16位無符號整數typedefsignedshort INT16S;//16位有符號整數typedefunsignedlong INT32U;//32位無符號整數typedefsignedlong INT32S;//32位有符號整數typedeffloat FP32;//單精度浮點數typedefdouble FP64;//雙精度浮點數typedefunsignedint OS_STK;//堆棧入口寬度為16位#defineBYTE INT8S//字節型#defineUBYTE INT8U//為了與uC/OSV1.xx.兼容#defineWORD INT16S//...uC/OS-II.#defineUWORD INT16U#defineLONG INT32S#defineULONG INT32U/*********************************************************************與ARM處理器相關的代碼********************************************************************/#defineOS_ENTER_CRITICAL()ARMDisableInt()/*關閉中斷*/#defineOS_EXIT_CRITICAL()ARMEnableInt()/*開啟中斷*//*設施堆棧的增長方向*/#defineOS_STK_GROWTH1/*堆棧由高地址向低地址增長*/2.用C語言編寫六個操作系統相關的函數(OS_CPU_C.C)void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,INT16Uopt){unsignedint*stk;opt=opt;/*'opt'isnotused,preventwarning*/stk=(unsignedint*)ptos;/*Loadstackpointer*//*buildacontextforthenewtask*/*--stk=(unsignedint)task;/*pc*/*--stk=(unsignedint)task;/*lr*/*--stk=0;/*r12*/*--stk=0;/*r11*/*--stk=0;/*r10*/*--stk=0;/*r9*/*--stk=0;/*r8*/*--stk=0;/*r7*/*--stk=0;/*r6*/*--stk=0;/*r5*/*--stk=0;/*r4*/*--stk=0;/*r3*/*--stk=0;/*r2*/*--stk=0;/*r1*/*--stk=(unsignedint)pdata;/*r0*/*--stk=(SVC32MODE|0x0); /*cpsrIRQ,FIQdisable*/*--stk=(SVC32MODE|0x0); /*spsrIRQ,FIQdisable*/return((void*)stk);}voidOSTaskCreateHook(OS_TCB*ptcb){ptcb=ptcb;//防止編譯時出現警告}voidOSTaskDelHook(OS_TCB*ptcb){ptcb=ptcb;//防止編譯時出現警告}voidOSTaskSwHook(void)voidOSTaskStatHook(void)voidOSTimeTickHook(void)后5個函數為鉤子函數,可以不加代碼。3.用匯編語言編寫四個與處理器相關的函數(OS_CPU.ASM)(1)OSStartHighRdy();運行優先級最高的就緒任務;BL OSTaskSwHook;Calluser-definedhookfunctionLDR r4,addr_OSRunning;IndicatethatmultitaskinghasstartedMOV r5,#1STRB r5,[r4];OSRunning=trueLDR r4,addr_OSTCBHighRdy;GethighestprioritytaskTCBaddressLDR r4,[r4];getstackpointerLDR sp,[r4];switchtothenewstackLDMFD sp!,{r4};popnewtasksspsrMSR SPSR_cxsf,r4LDMFD sp!,{r4};popnewtaskspsrMSR CPSR_cxsf,r4LDMFD sp!,{r0-r12,lr,pc};popnewtasksr0-r12,lr&pc(2)OSCtxSw();任務級的任務切換函數STMFD sp!,{lr};pushpc(lrisactuallybepushedinplaceofPC)STMFD sp!,{r0-r12,lr};pushlr®isterfileMRS r4,CPSRSTMFD sp!,{r4};pushcurrentpsrMRS r4,SPSRSTMFD sp!,{r4};pushcurrentspsr_OSCtxSwLDR r4,=OSPrioCur;OSPrioCur=OSPrioHighRdyLDR r5,=OSPrioHighRdyLDRB r6,[r5]STRB r6,[r4]LDR r4,=OSTCBCur;GetcurrenttaskTCBaddressLDR r5,[r4]STR sp,[r5];storespinpreemptedtaskssTCB;BL OSTaskSwHook;callTaskSwitchHookLDR r6,=OSTCBHighRdy;GethighestprioritytaskTCBaddressLDR r6,[r6]LDR sp,[r6];getnewtasksstackpointerSTR r6,[r4];setnewcurrenttaskTCBaddressLDMFD sp!,{r4};popnewtaskspsrMSR SPSR_cxsf,r4LDMFD sp!,{r4};popnewtaskcpsrMSR CPSR_cxsf,r4LDMFD sp!,{r0-r12,lr,pc};popnewtaskr0-r12,lr&pc(3)OSIntCtxSw();中斷級的任務切換函數STMDBsp!,{r0-r1}LDR r0,addr_OSIntCtxSwFlag;OSIntCtxSwFlag=trueMOV r1,#1STR r1,[r0]LDMIA sp!,{r0-r1}MOV pc,lr;return(4)OSTickISR();中斷服務函數 SUB lr,lr,#4 STMDBsp!,{r0-r12,lr};pushr0-r12registerfileandlr(pcreturnaddress) MRS r4,SPSR STMFD sp!,{r4};pushcurrentspsr_irq(=cpsr_svc) ;interruptdisable(notnessary) mrs r0,CPSR orr r0,r0,#0x80 ;andsetIRQdisableflag msr CPSR_cxsf,r0 BL OSIntEnter BL do_irq;heredo_IRQisusedtoclearsomevirtual-hardwareflags BL OSIntExit LDR r0,addr_OSIntCtxSwFlag;checkifOSIntCtxFlagismarkedastrue LDR r1,[r0] CMP r1,#1 LDREQ pc,=_IntCtxSw ;ifOSIntCtxFlag=true,thenjumpto_IntCtxSw LDMFD sp!,{r4};getcpsr_svcfromstack MSRSPSR_cxsf,r4;preparespsrtoreturnsvcmode LDMFD sp!,{r0-r12,pc}^ ;recoverr0-r12andpcfromstack,cpsralso_IntCtxSwMOV r1,#0;clearOSIntCtxSwFlag=flaseSTR r1,[r0] LDMFD sp!,{r4} ;restorespsr_irq MSR SPSR_cxsf,r4 LDMFD sp!,{r0-r12,lr} ;reco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告引入機制管理辦法
- 工廠高效會議管理辦法
- 小區內出入境管理辦法
- 小區防疫門禁管理辦法
- 完善稅務業務管理辦法
- 宜昌商務接待管理辦法
- 鹽城市面包車管理辦法
- 客戶管理辦法運行原理
- 福利中心入住管理辦法
- 吉首概算調整管理辦法
- 《數字貿易》課程教學大綱
- 會展策劃考試試題及答案
- 2025零基礎應用DeepSeek手冊
- 建筑節能與環保培訓課件
- 微弱的光亮(2024年山東煙臺中考語文試卷記敘文閱讀試題)
- 2024高考物理一輪復習專題93機械振動和機械波練習含解析新人教版
- 廣西現代物流集團招聘筆試沖刺題2025
- 中職班主任班級管理經驗分享
- 大學英語六級大綱詞匯正序版
- 《計算機圖形學》課后習題參考答案
- 初三第一學期家長會
評論
0/150
提交評論