版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)一 ADS開(kāi)發(fā)環(huán)境實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握ADS開(kāi)發(fā)環(huán)境的使用;2、了解ADSModule工程基本結(jié)構(gòu)和內(nèi)容;3、掌握在ADS下建立工程進(jìn)行開(kāi)發(fā)的基本技巧。二、實(shí)驗(yàn)內(nèi)容1、熟悉ADS開(kāi)發(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ù)備知識(shí)1、了解ARM和S3C2410體系結(jié)構(gòu);2、了解ARM和S3C2410匯編語(yǔ)言;3、掌握C、C+語(yǔ)言。4、已閱讀過(guò)DM2410實(shí)驗(yàn)系統(tǒng)使用說(shuō)明五、基礎(chǔ)知識(shí)1、ADS簡(jiǎn)介ADS是一
2、個(gè)使用方便的集成開(kāi)發(fā)環(huán)境,全稱是“ARM Developer Suite”,它是由ARM公司提供的專門用于ARM相關(guān)應(yīng)用開(kāi)發(fā)和調(diào)試的綜合性軟件。它在易用性上比上一代的SDT開(kāi)發(fā)環(huán)境有較大提高,是一套功能強(qiáng)大又易于使用的開(kāi)發(fā)環(huán)境,目前的版本號(hào)是1.2。ADS囊括了一系列的應(yīng)用,并有相關(guān)的文檔和實(shí)例的支持。使用者可以用它來(lái)編寫(xiě)和調(diào)試各種基于ARM家族RISC處理器的應(yīng)用。你可以使用ADS來(lái)編輯、編譯、調(diào)試包括C、C+以及ARM匯編語(yǔ)言編寫(xiě)的程序。ADS主要由以下部分構(gòu)成:ANSI C 編譯器-armccand tccISO / Embedded C+ 編譯器
3、-armcppand tcppARM / Thumb 匯編器-armasmLinker -armlinkWindows 集成開(kāi)發(fā)環(huán)境-CodeWarriorDebugger -AXDarmsd 可向前兼容格式轉(zhuǎn)換器-fromelf庫(kù)管理器-armarC and C+ 庫(kù)指令級(jí)仿真器-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)中我們主要會(huì)講解如何在CodeWarrior 下建立工程,進(jìn)行編譯和連接,最終生成二進(jìn)制文件。下一節(jié)會(huì)著重介紹如何用AXD Debugger進(jìn)行下載和調(diào)試仿真。我們沒(méi)有對(duì)其他組件進(jìn)行詳細(xì)介紹并不意味著其他模塊沒(méi)有發(fā)揮作用或者不重要,例如我們?cè)诰幾g生成二進(jìn)制鏡象的時(shí)就是ANSI C 編譯器-armccand tcc,ISO / Embedded C+ 編譯器-armcppand tcpp,
5、ARM / Thumb 匯編器-armasm以及Linker armlink這些組件在完成這項(xiàng)工作。只是由于我們通過(guò)CodeWarrior環(huán)境進(jìn)行操作可以在GUI界面下完成絕大部分工作,而不必直接和這些組件打交道,這是我們目前知道的在ARM下最方便最快捷的開(kāi)發(fā)方式,關(guān)于其他組件的詳細(xì)資料可以參見(jiàn)ADS下幫助文檔或者直接訪問(wèn)ARM公司的網(wǎng)站。圖1-2 CodeWarrior基本界面六、實(shí)驗(yàn)說(shuō)明1、ADSModule工程基本結(jié)構(gòu)一個(gè)能夠獨(dú)立運(yùn)行的工程中首先應(yīng)該包括對(duì)硬件設(shè)備進(jìn)初始化的代碼,其次是一些輔助性代碼,例如輔助調(diào)試代碼,和工程應(yīng)用性代碼,為這些代碼服務(wù)的頭文件以及為整個(gè)工程相配套輔助文件,
6、如編譯控制文件和工程文件等。在實(shí)驗(yàn)光盤(pá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)的。如果針對(duì)這個(gè)實(shí)驗(yàn)系統(tǒng)做二次開(kāi)發(fā),也可以在這個(gè)工程的基礎(chǔ)上很方便的進(jìn)行。打開(kāi)ADSModule文件夾,可以看到12個(gè)文件:12410init.s采用ARM匯編實(shí)現(xiàn),包含了系統(tǒng)初始化部分中最開(kāi)始的部分,也是最關(guān)鍵部分的代碼,完成了對(duì)S3C2410 Exception向量,中斷向量表,內(nèi)存,內(nèi)存控制器和堆棧的初始化,同時(shí)又通過(guò)Main函數(shù)接口給調(diào)用后面的代碼留出了接口。22410slib.h采用
7、ARM匯編實(shí)現(xiàn),主要完成了與MMU和CPSR相關(guān)的一系列輔助性函數(shù)。32410slib.s42410Main.cC語(yǔ)言編寫(xiě),完成功能。52410lib.h用C語(yǔ)言實(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中被用來(lái)初始化內(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)過(guò)編譯后將會(huì)被放在S3C2410芯片內(nèi)部4K的BootSRAM開(kāi)始處,也就是說(shuō)這其實(shí)系統(tǒng)啟動(dòng)后會(huì)被最早調(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; 獲得中斷號(hào) 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ù)上面的代碼通過(guò)INTOFFSET獲得中斷寄存器當(dāng)中的中斷號(hào),然后通過(guò)HandleEINT0獲得中斷處理向量的基地址,根據(jù)中斷號(hào)進(jìn)行偏移,最終跳轉(zhuǎn)到中斷處理函數(shù)當(dāng)中。2.3 scat文件分析LDR1 0x00000000 ROM1 0x00000000 0x1000/ 將鏡象的第一部分限制在4K長(zhǎng)度,從0地址開(kāi) / 始,剛好和芯片內(nèi)部的4K BootRAM印合 2410init.o (Init, +First)/ 限定這段內(nèi)存當(dāng)中只存放2410init.s編譯形成的二進(jìn)制代碼 LDR2 0x30000000/ 鏡象的第二部分從0x30000000開(kāi)始,符合符合實(shí)驗(yàn)
13、系統(tǒng)的硬件狀況 RAM2 0x30000000 * (+RO) / 將其他全部的ReadOnly和ReadWrite屬性的代* (+RW)/ 碼放在這部分內(nèi)存中0x30000000-0x30500000 RAM3 0x30500000 * (+ZI)/ Zero Init屬性的代碼存放在0x30500000開(kāi)始位置的內(nèi)存中 七、實(shí)驗(yàn)步驟1、新建一個(gè)工程Step1: 啟動(dòng)ADS點(diǎn)擊桌面à開(kāi)始à程序àARM Developer Suite v1.2 à CodeWarrior for ARM Developer Suite,彈出CodeWarrior for
14、 ARM Developer Suite的界面。圖1-3 從“程序”啟動(dòng)CodeWarrior圖1-4 CodeWarrior啟動(dòng)界面Step2: 建立新的工程點(diǎn)擊FileàNew,彈出新建工程對(duì)話框。如圖1-x新建工程后點(diǎn)擊“確定”, 進(jìn)入工程編輯界面。圖1-5 選擇新建工程圖1-6 新建工程對(duì)話框注意:在選擇建立工程的文件夾時(shí)只需要指定到“D:ADS實(shí)驗(yàn)”即可,ADS將自動(dòng)建立工程文件夾。圖1-7 工程編輯界面Step3: 拷貝工程相配套輔助文件將“實(shí)驗(yàn)說(shuō)明”中提到的“光盤(pán)目錄BSPADSmodel”文件夾下的12個(gè)文件拷貝到這個(gè)新建的文件夾中。我們可以看到這時(shí)文件夾中除了這十二
15、個(gè)文件以外還有一個(gè)HELLOWORLD.mcp工程項(xiàng)目文件和一個(gè)HELLOWORLD_Data文件夾,這個(gè)文件夾是用來(lái)保存編譯好的二進(jìn)制文件和編譯臨時(shí)文件。再?gòu)墓獗P(pán)上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 文件選擇對(duì)話框圖1-10 文件目標(biāo)對(duì)話框注意:只要工程沒(méi)有特殊要求,添加文件的時(shí)候應(yīng)該選種全部的Target,這樣才能保證文件被包含在所有的工程模式下,從而保證整個(gè)工程能夠被成功編譯。圖1-11 添加文件后的工程注意:*.h和*.inc文件不用直接添加,CodeWarrior會(huì)自動(dòng)在設(shè)定的目錄下尋找它們,并在編譯的時(shí)候包含它們。這樣一個(gè)工程項(xiàng)目的基本框架就建成了。但是這個(gè)項(xiàng)目沒(méi)有任何功能,我們要給它添加可以完成的功能。Step5: 在項(xiàng)目中新建HELLOWORLDE.c選擇FileàNew新建一個(gè)文件HELLOWORLDE
17、.c,并選中Add to project,如圖:圖1-12 新建一個(gè)文件并加入工程圖1-13 添加HELLOWORLDE.c文件后的工程Step6: 在HELLOWORLDE.c文件中添加代碼。雙擊打開(kāi)這個(gè)文件,可以加入自己的代碼。我們?cè)谶@里創(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中對(duì)這個(gè)函數(shù)的定義加以參考。這是ADS修改程序的一種方法。這里需要提到的是,相對(duì)與SDT來(lái)說(shuō)ADS增加了很多程序修改編譯的功能,但是仍有不盡人意的地方,創(chuàng)建和修改程序進(jìn)行建議使用Source Insight等工具軟件。Step7: 添加調(diào)用代碼在2410Main.c中的Main()函數(shù)的結(jié)尾處添加一行對(duì)HELLOWORLD函數(shù)的調(diào)用代碼。到現(xiàn)在我們的整個(gè)工程的代碼才算完整。圖1-15 修改后的Main函數(shù)圖1-16 工程
19、管理對(duì)話框按鈕1:編譯鏈接按鈕按鈕2:工程設(shè)置按鈕按鈕3:編譯選擇按鈕Step8: 設(shè)置新工程。點(diǎn)擊 工程管理對(duì)話框 中2按鈕打開(kāi)設(shè)置窗口,進(jìn)行如下設(shè)置:圖1-17 Target設(shè)置圖1-18 ARM 匯編語(yǔ)言設(shè)置圖1-19 ARM C語(yǔ)言設(shè)置圖1-20 ARM C+語(yǔ)言設(shè)置圖1-21 Thumb C語(yǔ)言設(shè)置圖1-22 Thumb C+語(yǔ)言設(shè)置圖1-23 鏈接器設(shè)置注意:上圖中的scat.scf文件就是前面復(fù)制到工程目錄下的scat文件。當(dāng)選中后可以將其改為相對(duì)地址下的scat.scf,如圖1-23,這樣工程不論程序拷貝到任何地方都可以被自動(dòng)鏈接。Step9:編譯連接工程。點(diǎn)擊工程管理對(duì)話框中
20、的編譯鏈接按鈕。工程管理對(duì)話框中的按鈕3是編譯選擇按鈕,也可以直接點(diǎn)擊下面窗口中文件名前面的部分,設(shè)置文件需要被重新編譯和鏈接。如果工程中的文件被修改過(guò),即使是它所包含的頭文件被修改了,CodeWarrior會(huì)自動(dòng)設(shè)置該文件需要重新被編譯鏈接。圖1-24 選擇文件編譯圖1-25 編譯結(jié)果對(duì)話框其中左上角標(biāo)號(hào)為1的圓內(nèi)表示程序中的錯(cuò)誤數(shù),必須錯(cuò)誤數(shù)為0才可以正確編譯。標(biāo)號(hào)為2的圓內(nèi)表示警告,提示程序中可能存在的錯(cuò)誤或不合理的問(wèn)題。標(biāo)號(hào)為3的圓內(nèi)的窗口列出了具體錯(cuò)誤的位置、類型和錯(cuò)誤的可能原因,同時(shí)列出了項(xiàng)目的一些數(shù)據(jù)。單擊窗口中報(bào)錯(cuò)的條目,會(huì)在下面標(biāo)號(hào)為5的圓內(nèi)的窗口中顯示出錯(cuò)誤所在的位置。我們看到是報(bào)錯(cuò)語(yǔ)句前一句沒(méi)有表示結(jié)束的分號(hào)。將其修改并保存,重新編譯直至沒(méi)有錯(cuò)誤為止。這樣我
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年高端餐廳員工聘用合同示范3篇
- 二零二五版凍豬肉儲(chǔ)備政府采購(gòu)合同爭(zhēng)議解決與仲裁條款2篇
- 二零二五版商業(yè)地產(chǎn)改造與招商合作合同3篇
- 二零二五年度腳手架施工材料供應(yīng)與租賃合同3篇
- 二零二五版新型讓與擔(dān)保合同-供應(yīng)鏈金融支持協(xié)議2篇
- 二零二五版家政服務(wù)員與雇主及家政協(xié)會(huì)三方合作合同3篇
- 二零二五版公司間股權(quán)置換、轉(zhuǎn)讓與資本運(yùn)作合同3篇
- 二零二五年教育機(jī)構(gòu)教學(xué)質(zhì)量兜底服務(wù)合同范本3篇
- 二零二五版二手房貸款買賣合同范本:適用于房產(chǎn)交易中的擔(dān)保合同2篇
- 二零二五年度購(gòu)物卡電子支付解決方案合同3篇
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說(shuō)課稿-2024-2025學(xué)年高中英語(yǔ)人教版(2019)必修第一冊(cè)
- 農(nóng)發(fā)行案防知識(shí)培訓(xùn)課件
- 社區(qū)醫(yī)療抗菌藥物分級(jí)管理方案
- 安徽大學(xué)大學(xué)生素質(zhì)教育學(xué)分認(rèn)定辦法
- 巴布亞新幾內(nèi)亞離網(wǎng)光儲(chǔ)微網(wǎng)供電方案
- 高度限位裝置類型及原理
- 中文版gcs electrospeed ii manual apri rev8v00印刷稿修改版
- 新生兒預(yù)防接種護(hù)理質(zhì)量考核標(biāo)準(zhǔn)
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機(jī)組水輪機(jī)安裝概述與流程
評(píng)論
0/150
提交評(píng)論