版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)一 ADS開發(fā)環(huán)境實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握ADS開發(fā)環(huán)境的使用;2、了解ADSModule工程基本結(jié)構(gòu)和內(nèi)容;3、掌握在ADS下建立工程進(jìn)行開發(fā)的基本技巧。二、實(shí)驗(yàn)內(nèi)容1、熟悉ADS開發(fā)環(huán)境中的各個(gè)組件;2、建立并編譯一個(gè)HELLOWORLD工程;三、實(shí)驗(yàn)設(shè)備1、硬件:DM2410C實(shí)驗(yàn)系統(tǒng);PC機(jī);2、軟件:PC機(jī)操作系統(tǒng)(WINDOWS 2000);ARM Developer Suite v1.2;四、預(yù)備知識1、了解ARM和S3C2410體系結(jié)構(gòu);2、了解ARM和S3C2410匯編語言;3、掌握C、C+語言。4、已閱讀過DM2410實(shí)驗(yàn)系統(tǒng)使用說明五、基礎(chǔ)知識1、ADS簡介ADS是一
2、個(gè)使用方便的集成開發(fā)環(huán)境,全稱是“ARM Developer Suite”,它是由ARM公司提供的專門用于ARM相關(guān)應(yīng)用開發(fā)和調(diào)試的綜合性軟件。它在易用性上比上一代的SDT開發(fā)環(huán)境有較大提高,是一套功能強(qiáng)大又易于使用的開發(fā)環(huán)境,目前的版本號是1.2。ADS囊括了一系列的應(yīng)用,并有相關(guān)的文檔和實(shí)例的支持。使用者可以用它來編寫和調(diào)試各種基于ARM家族RISC處理器的應(yīng)用。你可以使用ADS來編輯、編譯、調(diào)試包括C、C+以及ARM匯編語言編寫的程序。ADS主要由以下部分構(gòu)成:ANSI C 編譯器-armccand tccISO / Embedded C+ 編譯器
3、-armcppand tcppARM / Thumb 匯編器-armasmLinker -armlinkWindows 集成開發(fā)環(huán)境-CodeWarriorDebugger -AXDarmsd 可向前兼容格式轉(zhuǎn)換器-fromelf庫管理器-armarC and C+ 庫指令級仿真器-ARMulator同時(shí)包含ARM Firmware SuiteARM App
4、lication LibraryRealMonitor圖1-1 ADS各組件之間的關(guān)系在實(shí)驗(yàn)中我們接觸最多,最直接的就是CodeWarrior和AXD Debugger這兩個(gè)組件。在本節(jié)實(shí)驗(yàn)中我們主要會講解如何在CodeWarrior 下建立工程,進(jìn)行編譯和連接,最終生成二進(jìn)制文件。下一節(jié)會著重介紹如何用AXD Debugger進(jìn)行下載和調(diào)試仿真。我們沒有對其他組件進(jìn)行詳細(xì)介紹并不意味著其他模塊沒有發(fā)揮作用或者不重要,例如我們在編譯生成二進(jìn)制鏡象的時(shí)就是ANSI C 編譯器-armccand tcc,ISO / Embedded C+ 編譯器-armcppand tcpp,
5、ARM / Thumb 匯編器-armasm以及Linker armlink這些組件在完成這項(xiàng)工作。只是由于我們通過CodeWarrior環(huán)境進(jìn)行操作可以在GUI界面下完成絕大部分工作,而不必直接和這些組件打交道,這是我們目前知道的在ARM下最方便最快捷的開發(fā)方式,關(guān)于其他組件的詳細(xì)資料可以參見ADS下幫助文檔或者直接訪問ARM公司的網(wǎng)站。圖1-2 CodeWarrior基本界面六、實(shí)驗(yàn)說明1、ADSModule工程基本結(jié)構(gòu)一個(gè)能夠獨(dú)立運(yùn)行的工程中首先應(yīng)該包括對硬件設(shè)備進(jìn)初始化的代碼,其次是一些輔助性代碼,例如輔助調(diào)試代碼,和工程應(yīng)用性代碼,為這些代碼服務(wù)的頭文件以及為整個(gè)工程相配套輔助文件,
6、如編譯控制文件和工程文件等。在實(shí)驗(yàn)光盤BSP目錄下的ADSModule工程就是我們?yōu)檫@個(gè)實(shí)驗(yàn)系統(tǒng)定制的一個(gè)工程模板,實(shí)驗(yàn)系統(tǒng)ADS下的實(shí)驗(yàn)都是在ADSModule工程的基礎(chǔ)上做相應(yīng)的修改,添加應(yīng)用部分實(shí)現(xiàn)的。如果針對這個(gè)實(shí)驗(yàn)系統(tǒng)做二次開發(fā),也可以在這個(gè)工程的基礎(chǔ)上很方便的進(jìn)行。打開ADSModule文件夾,可以看到12個(gè)文件:12410init.s采用ARM匯編實(shí)現(xiàn),包含了系統(tǒng)初始化部分中最開始的部分,也是最關(guān)鍵部分的代碼,完成了對S3C2410 Exception向量,中斷向量表,內(nèi)存,內(nèi)存控制器和堆棧的初始化,同時(shí)又通過Main函數(shù)接口給調(diào)用后面的代碼留出了接口。22410slib.h采用
7、ARM匯編實(shí)現(xiàn),主要完成了與MMU和CPSR相關(guān)的一系列輔助性函數(shù)。32410slib.s42410Main.cC語言編寫,完成功能。52410lib.h用C語言實(shí)現(xiàn)了串口調(diào)用函數(shù),字符串處理函數(shù),端口初始化函數(shù),CPU主頻調(diào)整函數(shù),Watchdog控制函數(shù)等一系列輔助函數(shù)。62410lib.c72410addr.h分別使用匯編和C實(shí)現(xiàn),定義了S3C2410芯片的特殊寄存器地址以及特殊寄存器的相應(yīng)設(shè)定值。82410addr.inc9Memcfg.inc根據(jù)實(shí)驗(yàn)系統(tǒng)的硬件,定義了每個(gè)BANK內(nèi)存控制器相關(guān)的設(shè)定值,在2410init.s中被用來初始化內(nèi)存控制器10Option.h定義了一系列S3
8、C2410可選擇使用的主頻,以及與之相配的寄存器設(shè)置參數(shù),被用于2410init.s文件中設(shè)定S3C2410芯片主頻11Option.inc12Def.h13reset.ini14ScatADS編譯時(shí)控制編譯器和連接器按照一定的內(nèi)存結(jié)構(gòu)進(jìn)行。2、關(guān)鍵代碼分析:2.1 Exception Vectors代碼分析 ASSERT :DEF:ENDIAN_CHANGE ENDIAN_CHANGE ASSERT :DEF:ENTRY_BUS_WIDTH ENTRY_BUS_WIDTH=32 b ChangeBigEndian ;DCD 0xea000007 ENTRY_BUS_WIDTH=16 ande
9、q r14,r7,r0,lsl #20 ;DCD 0x0007ea00 ENTRY_BUS_WIDTH=8 streq r0,r0,-r10,ror #1 ;DCD 0x070000ea | b ResetHandler b HandlerUndef ;handler for Undefined mode b HandlerSWI ;handler for SWI interrupt b HandlerPabort ;handler for PAbort b HandlerDabort ;handler for DAbort b . ;reserved b HandlerIRQ ;handle
10、r for IRQ interrupt b HandlerFIQ ;handler for FIQ interrupt這段代碼經(jīng)過編譯后將會被放在S3C2410芯片內(nèi)部4K的BootSRAM開始處,也就是說這其實(shí)系統(tǒng)啟動后會被最早調(diào)入內(nèi)存和執(zhí)行的代碼,他完成了最關(guān)鍵的Exception Vectors初始化。Exception VectorsAddressExceptionMode in Entry0x00000000ResetSupervisor0x00000004Undefined instructionUndefined0x00000008 Software InterruptSuper
11、visor0x0000000CAbort(prefetch)Abort0x00000010Abort (data)Abort0x00000014 ReservedReserved0x00000018 IRQIRQ0x0000001CFIQFIQ2.2 中斷跳轉(zhuǎn)代碼分析IsrIRQ sub sp,sp,#4 stmfd sp!,r8-r9 ldr r9,=INTOFFSET; 獲得中斷號 ldr r9,r9 ldr r8,=HandleEINT0;獲得中斷向量表基地址 add r8,r8,r9,lsl #2 ;計(jì)算偏移量 ldr r8,r8 str r8,sp,#8 ldmfd sp!,r8-r
12、9,pc; 跳轉(zhuǎn)進(jìn)入中斷處理函數(shù)上面的代碼通過INTOFFSET獲得中斷寄存器當(dāng)中的中斷號,然后通過HandleEINT0獲得中斷處理向量的基地址,根據(jù)中斷號進(jìn)行偏移,最終跳轉(zhuǎn)到中斷處理函數(shù)當(dāng)中。2.3 scat文件分析LDR1 0x00000000 ROM1 0x00000000 0x1000/ 將鏡象的第一部分限制在4K長度,從0地址開 / 始,剛好和芯片內(nèi)部的4K BootRAM印合 2410init.o (Init, +First)/ 限定這段內(nèi)存當(dāng)中只存放2410init.s編譯形成的二進(jìn)制代碼 LDR2 0x30000000/ 鏡象的第二部分從0x30000000開始,符合符合實(shí)驗(yàn)
13、系統(tǒng)的硬件狀況 RAM2 0x30000000 * (+RO) / 將其他全部的ReadOnly和ReadWrite屬性的代* (+RW)/ 碼放在這部分內(nèi)存中0x30000000-0x30500000 RAM3 0x30500000 * (+ZI)/ Zero Init屬性的代碼存放在0x30500000開始位置的內(nèi)存中 七、實(shí)驗(yàn)步驟1、新建一個(gè)工程Step1: 啟動ADS點(diǎn)擊桌面à開始à程序àARM Developer Suite v1.2 à CodeWarrior for ARM Developer Suite,彈出CodeWarrior for
14、 ARM Developer Suite的界面。圖1-3 從“程序”啟動CodeWarrior圖1-4 CodeWarrior啟動界面Step2: 建立新的工程點(diǎn)擊FileàNew,彈出新建工程對話框。如圖1-x新建工程后點(diǎn)擊“確定”, 進(jìn)入工程編輯界面。圖1-5 選擇新建工程圖1-6 新建工程對話框注意:在選擇建立工程的文件夾時(shí)只需要指定到“D:ADS實(shí)驗(yàn)”即可,ADS將自動建立工程文件夾。圖1-7 工程編輯界面Step3: 拷貝工程相配套輔助文件將“實(shí)驗(yàn)說明”中提到的“光盤目錄BSPADSmodel”文件夾下的12個(gè)文件拷貝到這個(gè)新建的文件夾中。我們可以看到這時(shí)文件夾中除了這十二
15、個(gè)文件以外還有一個(gè)HELLOWORLD.mcp工程項(xiàng)目文件和一個(gè)HELLOWORLD_Data文件夾,這個(gè)文件夾是用來保存編譯好的二進(jìn)制文件和編譯臨時(shí)文件。再從光盤上ADSmodel的工程文件夾中將reset.ini和scat兩個(gè)文件拷貝到這個(gè)工程文件夾下,其中scat就是上面講到的編譯控制文件,reset.ini是一段初始化代碼,將在“JTAG下載和調(diào)試實(shí)驗(yàn)”一節(jié)中具體講解它的用途。Step4: 在項(xiàng)目中添加文件。在CodeWarrior for ARM Developer Suite的工程項(xiàng)目窗口中點(diǎn)擊右鍵,選中“Add files ”,彈出文件選擇框。找到我們新建的工程文件夾,選中所有的
16、*.C和*.S文件并確定。圖1-8 向工程中添加文件圖1-9 文件選擇對話框圖1-10 文件目標(biāo)對話框注意:只要工程沒有特殊要求,添加文件的時(shí)候應(yīng)該選種全部的Target,這樣才能保證文件被包含在所有的工程模式下,從而保證整個(gè)工程能夠被成功編譯。圖1-11 添加文件后的工程注意:*.h和*.inc文件不用直接添加,CodeWarrior會自動在設(shè)定的目錄下尋找它們,并在編譯的時(shí)候包含它們。這樣一個(gè)工程項(xiàng)目的基本框架就建成了。但是這個(gè)項(xiàng)目沒有任何功能,我們要給它添加可以完成的功能。Step5: 在項(xiàng)目中新建HELLOWORLDE.c選擇FileàNew新建一個(gè)文件HELLOWORLDE
17、.c,并選中Add to project,如圖:圖1-12 新建一個(gè)文件并加入工程圖1-13 添加HELLOWORLDE.c文件后的工程Step6: 在HELLOWORLDE.c文件中添加代碼。雙擊打開這個(gè)文件,可以加入自己的代碼。我們在這里創(chuàng)建一個(gè)文件在串口終端上打印歡迎信息。(有關(guān)串口終端等概念將在實(shí)驗(yàn)二 JTAG下載和調(diào)試實(shí)驗(yàn)中講到)/=/名稱:HELLOWORLDE/功能:打印“HELLOWORLDE”字符串/=void HELLOWORLDE(void) Uart_Printf("HELLOWORLDE!");/在串口終端打印字符串圖1-14 添加代碼后的HELL
18、OWORLDE.c文件如果不知道Uart_Printf()函數(shù)的用法和功能可以選中這個(gè)函數(shù)并點(diǎn)擊右鍵,在菜單中選擇Go to functiong 一項(xiàng),跳轉(zhuǎn)至2410lib.c中對這個(gè)函數(shù)的定義加以參考。這是ADS修改程序的一種方法。這里需要提到的是,相對與SDT來說ADS增加了很多程序修改編譯的功能,但是仍有不盡人意的地方,創(chuàng)建和修改程序進(jìn)行建議使用Source Insight等工具軟件。Step7: 添加調(diào)用代碼在2410Main.c中的Main()函數(shù)的結(jié)尾處添加一行對HELLOWORLD函數(shù)的調(diào)用代碼。到現(xiàn)在我們的整個(gè)工程的代碼才算完整。圖1-15 修改后的Main函數(shù)圖1-16 工程
19、管理對話框按鈕1:編譯鏈接按鈕按鈕2:工程設(shè)置按鈕按鈕3:編譯選擇按鈕Step8: 設(shè)置新工程。點(diǎn)擊 工程管理對話框 中2按鈕打開設(shè)置窗口,進(jìn)行如下設(shè)置:圖1-17 Target設(shè)置圖1-18 ARM 匯編語言設(shè)置圖1-19 ARM C語言設(shè)置圖1-20 ARM C+語言設(shè)置圖1-21 Thumb C語言設(shè)置圖1-22 Thumb C+語言設(shè)置圖1-23 鏈接器設(shè)置注意:上圖中的scat.scf文件就是前面復(fù)制到工程目錄下的scat文件。當(dāng)選中后可以將其改為相對地址下的scat.scf,如圖1-23,這樣工程不論程序拷貝到任何地方都可以被自動鏈接。Step9:編譯連接工程。點(diǎn)擊工程管理對話框中
20、的編譯鏈接按鈕。工程管理對話框中的按鈕3是編譯選擇按鈕,也可以直接點(diǎn)擊下面窗口中文件名前面的部分,設(shè)置文件需要被重新編譯和鏈接。如果工程中的文件被修改過,即使是它所包含的頭文件被修改了,CodeWarrior會自動設(shè)置該文件需要重新被編譯鏈接。圖1-24 選擇文件編譯圖1-25 編譯結(jié)果對話框其中左上角標(biāo)號為1的圓內(nèi)表示程序中的錯誤數(shù),必須錯誤數(shù)為0才可以正確編譯。標(biāo)號為2的圓內(nèi)表示警告,提示程序中可能存在的錯誤或不合理的問題。標(biāo)號為3的圓內(nèi)的窗口列出了具體錯誤的位置、類型和錯誤的可能原因,同時(shí)列出了項(xiàng)目的一些數(shù)據(jù)。單擊窗口中報(bào)錯的條目,會在下面標(biāo)號為5的圓內(nèi)的窗口中顯示出錯誤所在的位置。我們看到是報(bào)錯語句前一句沒有表示結(jié)束的分號。將其修改并保存,重新編譯直至沒有錯誤為止。這樣我
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024特許加盟合同協(xié)議范本
- 2025年度礦產(chǎn)資源整合采礦權(quán)抵押交易合同樣本3篇
- 2025年度圓通快遞快遞員權(quán)益保障及培訓(xùn)合同3篇
- 2025年度工業(yè)園區(qū)廠房及倉儲場地租賃合同范本2篇
- 2025年度物流數(shù)據(jù)分析與挖掘服務(wù)合同4篇
- 2024美容美發(fā)連鎖加盟合同
- 2024裝飾工程承包合同書
- 2025年度物流車輛數(shù)據(jù)信息服務(wù)合同4篇
- 2024版設(shè)備銷售與服務(wù)合同
- 2025年度MCN藝人品牌合作推廣合同3篇
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊
- 農(nóng)發(fā)行案防知識培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級管理方案
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024年九年級上德育工作總結(jié)
- 2024年儲罐呼吸閥項(xiàng)目可行性研究報(bào)告
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機(jī)組水輪機(jī)安裝概述與流程
- 新加坡SM2數(shù)學(xué)試題
- 畢業(yè)論文-水利水電工程質(zhì)量管理
評論
0/150
提交評論