ADS1.2開發(fā)環(huán)境的創(chuàng)建_第1頁
ADS1.2開發(fā)環(huán)境的創(chuàng)建_第2頁
ADS1.2開發(fā)環(huán)境的創(chuàng)建_第3頁
ADS1.2開發(fā)環(huán)境的創(chuàng)建_第4頁
ADS1.2開發(fā)環(huán)境的創(chuàng)建_第5頁
已閱讀5頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章ADS1.2開發(fā)環(huán)境創(chuàng)建與簡介

2.1ADS1.2開發(fā)環(huán)境創(chuàng)建2.1.1ADS1.2概述

ADS是個集成開發(fā)環(huán)境,主要包括編譯器、鏈接器、調(diào)試器、C和C++庫等,是ARM公司推出的新一代ARM集成開發(fā)工具。最新版本是ADS1.2,該版本支持包括Windows和Linux在內(nèi)的多種操作環(huán)境。ADS1.2的組成如下所述。1.編譯器ADS提供多種編譯器,以支持ARM和Thumb指令的編譯,主要有:·armcc:是ARMC編譯器。·tcc:是ThumbC編譯器。·armcpp:是ARMC++編譯器。·tcpp:是ThumbC++編譯器。·armasm:是ARM和Thumb的匯編語言編譯器。2.鏈接器

armlink是ARM鏈接器。該命令既可以將編譯得到的一個或多個目標文件和相關(guān)的一個或多個庫文件進行鏈接,生成一個可執(zhí)行文件,也可以將多個目標文件部分鏈接成一個目標文件,以供進一步的鏈接。

3符號調(diào)試器

armsd是ARM和Thumb的符號調(diào)試器,能進行源碼級程序調(diào)試。用戶可以在用C或匯編語言寫的代碼中進行單步調(diào)試、設(shè)置斷點、查看變量值和內(nèi)存單元的內(nèi)容。

4fromELF

將ELF格式的文件轉(zhuǎn)換為各種格式的輸出文件,包括BIN格式映像文件、Motorola32位S格式映像文件、Intel32位格式映像文件和Verilog十六進制文件。FromELF命令也能夠為輸入映像文件產(chǎn)生文本信息,例如代碼和數(shù)據(jù)長度。

5armar

armar是ARM庫函數(shù)生成器,它將一系列ELF格式的目標文件以庫函數(shù)的形式集合在一起。用戶可以把一個庫傳遞給一個鏈接器以代替幾個ELF文件。

6CodeWarrior

CodeWarrior集成開發(fā)環(huán)境(IDE)為管理和開發(fā)項目提供了簡單多樣化的圖形用戶界面,用戶可以使用ADS的CodeWarriorIDE為ARM和Thumb處理開發(fā)用C、C++或者ARM匯編語言編寫的程序代碼。

7調(diào)試器

ADS中含有3個調(diào)試器,即AXD、Armsd和ADW/ADU。

在ARM體系中,可以選擇多種調(diào)試方式,如Multi-ICE(Multi-processorIn-CircuitEmulator)、ARMulator或Angel。

Multi-ICE是一個獨立的產(chǎn)品,是ARM公司自己的JTAG在線仿真器,不是由ADS提供的。ARMulator是一個ARM指令集仿真器,集成在ARM的調(diào)試器AXD中,提供對ARM處理器的指令集的仿真,為ARM和Thumb提供精確的模擬。用戶可以在硬件尚未做好的情況下開發(fā)程序代碼,利用模擬器方式調(diào)試。

·Angel是ARM公司常駐在目標機Flash中的監(jiān)控程序,只需通過RS-232C串口與PC主機相連,就可以對基于ARM架構(gòu)處理器的目標機進行監(jiān)控器方式的調(diào)試。

C和C++庫

ADS提供ANSIC庫函數(shù)和C++庫函數(shù),支持被編譯的C和C++代碼。用戶可以把C庫中的與目標相關(guān)的函數(shù)作為自己應(yīng)用程序中的一部分,重新進行代碼的實現(xiàn)。這就為用戶帶來了極大的方便,針對自己的應(yīng)用程序的要求,對與目標無關(guān)的庫函數(shù)進行適當?shù)牟眉簟T贑庫中有很多函數(shù)是獨立于其他函數(shù)的,并且與目標硬件沒有任何依賴關(guān)系。對于這類函數(shù),用戶可以很容易地在匯編代碼中使用。

有了這些部件,用戶就可以為ARM系列的RISC處理器編寫和調(diào)試自己的開發(fā)應(yīng)用程序了。2.1.2ADS1.2的安裝ADS全稱為ARMDeveloperSuite,是ARM公司推出的新的一代ARM集成開發(fā)工具。現(xiàn)在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0,該版本支持包Windows和Linux在內(nèi)的多種操作系統(tǒng)。安裝步驟如下:在ADS1.2的安裝盤中運行setup.exe,安裝ARMDeveloperSuitev1.2。出現(xiàn)圖2-1對話框和圖2-2對話框,同意產(chǎn)權(quán)協(xié)義,選省缺安裝路徑(C:\ProgramFiles\ARM\vADS1.2)和典型安裝模式(Typiflcation),按Next進入下一步,出現(xiàn)選文件夾、編程語言和當前設(shè)定對話框,均按Next,開始安裝,如圖2-3示。安裝結(jié)束,安裝許可文件(InstallLicense),這一步可按安裝向?qū)нM行,單擊“下一步”按鈕,會出現(xiàn)如圖2-4和圖2-5所示的對話框。在圖2-5對話框中選瀏覽(Browser)查許可文件,在ProgramFiles\ARM\ADSV1_2\license\中選license.dat文件并打開,單擊“下一步”按鈕,如圖2-6,即可完成ADS1.2的安裝。

最后,程序還要注冊,注冊文件在ProgramFiles\ARM\ADSV1_2文件夾中,單擊注冊文件,即完成程序注冊,如圖2-7所示。2.2ADS集成開發(fā)環(huán)境的使用

2.2.1建立一個新工程運行ADS1.2集成開發(fā)環(huán)境(CodeWarriorforARMDeveloperSuite),點擊File|New,在New對話框中,共有7項,ARMExecutableImage是ARM的通用模板。選中它即可生成ARM的執(zhí)行文件,如圖2-8所示。還要在Projectname欄中輸入項目的名稱,以及在Location中輸入其存放的位置,按確定保存項目。2.2.2開發(fā)環(huán)境設(shè)置在新建的工程中,選擇Debug版本,如圖2-9,使用Edit|DebugSettings菜單對Debug版本進行參數(shù)設(shè)置。

在如圖2-10中,點擊DebugSetting按鈕,彈出2-11圖,選中TargetSetting

項,在Post-linker欄中選中ARMfromELF項。按OK確定。這是為生成可執(zhí)行的代碼的初始開關(guān)。

3.在如圖2-12中,點擊ARMAssembler,在ArchitectureorProcesser欄中選ARM920T。這是項目選擇的CPU類型。

4.在如圖2-13中,點擊ARMCCompliler,在ArchitectureorProcesser欄中選ARM920T。這是要編譯的CPU核。5.在如圖2-14中,點擊ARMlinker,在outpur欄中設(shè)定程序的代碼段地址,以及數(shù)據(jù)使用的地址。圖中的ROBase欄中填寫程序代碼存放的起始地址,RWBase欄中填寫程序數(shù)據(jù)存放的起始地址。該地址是屬于SDRAM的地址。在options欄中,如圖2-15,Imageentrypoint要填寫程序代碼的入口地址,其他保持不變,如果是在SDRAM中運行,則可在0x30000000—0x33ffffff中選值,這是64MSDRAM的地址,但是這里用的是起始地址,所以必須把你的程序空間給留出來,并且還要留出足夠的程序使用的數(shù)據(jù)空間,而且還必須是4字節(jié)對齊的地址(ARM狀態(tài))。通常入口點Imageentrypoint為0x30000000,ro_base也為0x30000000。

在Layout欄中,如圖2-16,在Placeatbeginningofimage框內(nèi),需要填寫項目的入口程序的目標文件名,如,整個工程項目的入口程序是2410init.s,那么應(yīng)在Object/Symbol處填寫其目標文件名2410init.o,在Section處填寫程序入口的起始段標號。它的作用是通知編譯器,整個項目的開始運行,是從該段開始的。6.在如圖2-17中,即在DebugSetting對話框中點擊左欄的ARMfromELF項,在Outputfilename欄中設(shè)置輸出文件名*.bin,前綴名可以自己取,在Outputformat欄中選擇Plainbinary,這是設(shè)置要下載到flash中的二進制文件。圖2-17中使用的是test.bin。7.到此,在ADS1.2中的基本設(shè)置已經(jīng)完成,可以將該新建的空的項目文件作為模板保存起來。首先,要將該項目工程文件改一個合適的名字,如S3C2410ARM.mcp等,然后,在ADS1.2軟件安裝的目錄下新建一個合適的模板目錄名,如,S3C2410ARMExecutableImage,再將剛剛設(shè)置完的S3c2410ARM.mcp項目文件存放到該目錄下即可。

8.新建項目工程后,就可以執(zhí)行菜單Project|AddFiles把和工程所有相關(guān)的文件加入,ADS1.2不能自動進行文件分類,用戶必須通過Project|CreateGroup來創(chuàng)建文件夾,然后把加入的文件選中,移入文件夾。或者鼠標放在文件填加區(qū),右鍵點擊,如圖2-18所示。先選AddFiles,加入文件,再選CreateGroup,創(chuàng)建文件夾,然后把文件移入文件夾內(nèi)。讀者可根據(jù)自己習慣,更改Edit|Preference窗口內(nèi)關(guān)于文本編輯的顏色、字體大小,形狀,變量、函數(shù)的顏色等等設(shè)置。如圖2-19。2.2.3ADS1.2下仿真、調(diào)試

在ADS1.2下進行仿真調(diào)試,首先需要一根仿真調(diào)試電纜和JTAG仿真器,用調(diào)試電纜把JTAG仿真器和上位機并口相連,JTAG仿真器的驅(qū)動程序為兩個動態(tài)鏈接庫,也要事先安裝。 打開調(diào)試軟件AXDDebugger。點擊File|loadimage加載可執(zhí)行文件xx.axf,打開超級終端,設(shè)置其參數(shù)為:波特率為115200,數(shù)據(jù)位數(shù)8,奇偶校驗無,停止位無1,數(shù)據(jù)流控無。點擊全速運行,在我們的例子程序中,出現(xiàn)圖2-20的界面:最后介紹調(diào)試按鈕,調(diào)試按鈕在程序進入AXDDebugge狀態(tài)時會出現(xiàn)在主菜單項,主要幾個調(diào)試按鈕如圖2-21所示。圖2-21,左起第一個是全速運行,第二個是停止運行,第三個跳入函數(shù)內(nèi)部單步執(zhí)行,第四個把一個函數(shù)做為一個語句單步執(zhí)行,第五個跳出函數(shù)。關(guān)于在ADS1.2下進行仿真調(diào)試,下面還要祥細介紹。2.2.4其他開發(fā)環(huán)境介紹

IAR(瑞典愛亞軟件技術(shù)咨詢公司)EmbeddedWorkbenchforARM是IARSystems公司為ARM微處理器開發(fā)的一個集成開發(fā)環(huán)境,下面簡稱IAREWARM。比較其他的ARM開發(fā)環(huán)境,IAREWARM具有入門容易、使用方便和代碼緊湊等特點。故在這里做簡單介紹。IARSystems公司目前推出的最新版本是IAREmbeddedWorkbenchforARMversion4.42,并提供一個32k代碼限制學習版或30天時間限制的免費評估版,可以到IAR公司的網(wǎng)站/ewarm下載。IAREWARM中包含一個全軟件的模擬程序(simulator)。用戶不需要任何硬件支持就可以模擬各種ARM內(nèi)核、外部設(shè)備甚至中斷的軟件運行環(huán)境。從中可以了解和評估IAREWARM的功能和使用方法。IAREWARM中包含一個全軟件的模擬程序(simulator)。用戶不需要任何硬件支持就可以模擬各種ARM內(nèi)核、外部設(shè)備甚至中斷的軟件運行環(huán)境。從中可以了解和評估IAREWARM的功能和使用方法。

IAREmbeddedWorkbenchforARMversion4.42是一個針對ARM處理器的集成開發(fā)環(huán)境,包含項目管理器、編輯器、編譯連接工具和支持RTOS(嵌入式實時控制系統(tǒng))的調(diào)試工具,在該環(huán)境下可以使用C/C++和匯編語言方便地開發(fā)嵌入式應(yīng)用程序。IAREWARM的主要模塊如下:

.項目管理器

.功能強大的編輯器

.高度優(yōu)化的IARARMC/C++Compiler

.IARARMAssembler

.1個通用的IARXLINKLinker

.IARXAR和XLIB建庫程序和IARDLIBC/C++運行庫

.IARC-SPY調(diào)試器(先進的高級語言調(diào)試器)

.命令行實用程序

以下介紹一下EWARM4.42版本及其相關(guān)配套硬件的一些特點:

1.IAREWAM軟件的特點

①EWARM4.42版基本特點

.完善的ARM內(nèi)核支持

.最新支持到ARM11及CortexM3內(nèi)核

.支持的其他ARM內(nèi)核

.ARM7(ARM7TDMI,ARM7TDMI-S,ARM720T)

.ARM9(ARM9TDMI,ARM920T,ARM922T,ARM940T,ARM9E,ARM9E-S,

ARM926EJ-S,ARM946E-S,ARM966E-S,ARM968E-S)

.ARM10(ARM10E,ARM1020E,ARM1022E,ARM1026EJ-S)

.XScale(XScale,XScale-IR7)

.更加客戶化地提供芯片級的支持

.完備的各廠商ARM處理器的C/C++和匯編語言外設(shè)寄存器定義文件

支持的芯片廠商有AnalogDevices、ARM、Atmel、CirrusLogic、Freescale、Intel、NetSilicon、

OKI、Philips、Samsung、Sharp、ST和TI等

.支持AnalogDevices、Atmel、Freescale、OKI、Philips、ST和TI等廠商的ARM處理器的FlashLoader程序.軟件集成了400余個代碼例程,對應(yīng)于各種不同的芯片,位于...\arm\src\examples目錄下

.進一步改進了編譯器速度優(yōu)化,重寫了的浮點運算庫

.對更多嵌入式操作系統(tǒng)的支持

新增支持OSEK類操作系統(tǒng)的OSEKRun-TimeInterface(ORTI)新增支持OSEEpsilonRTOS的KernelAwareness調(diào)試

.新增支持embOS、SMX、NORTi等的支持

.調(diào)試器的增強功能

.對堆棧運行的監(jiān)測功能

.配合IARJ-Link仿真器的新增功能

.J-LinkTCP/IP服務(wù)器

.調(diào)試器和IARJ-Link仿真器協(xié)同配合,實現(xiàn)對ARM處理器的多核調(diào)試

.對IARJ-Trace仿真器提供全面的支持

.在C-SPY模擬器中可執(zhí)行Trace的模擬

.支持同一芯片上多顆Flash的FlashLoader程序,以及通用的FlashLoader開發(fā)指南

②EWARM軟件在芯片級支持方面的特色

.完備的各廠商ARM處理器的C/C++和匯編語言外設(shè)寄存器定義文件

.大量適合于嵌入式代碼的編程語言擴展特性,包括存儲器關(guān)鍵字,函數(shù),中斷函數(shù),存儲器映射I/O等

.針對評估板的例程,包含IAR、AnalogDevices、AijiSystem、ARM、Atmel、CirrusLogic、

Freescale、Keil、OKI、Olimex、Pasat、Philips、Phytec、ST和TI等廠家的開發(fā).支持ARM或Thumb模式下大至4G字節(jié)的應(yīng)用程序

.每個函數(shù)都能選擇在ARM或Thumb模式下編譯

.可生成VFP向量浮點協(xié)處理器代碼

.支持AnalogDevices、Atmel、Freescale、OKI、Philips、ST和TI等廠商的ARM處

器的FlashLoader程序

.支持ARMAngelDebugmonitor③EWARM編譯器的軟件特色.先進的通用編譯器優(yōu)化和針對特定處理器的速度優(yōu)化及存儲器優(yōu)化功能.輕量運行庫,用戶可以根據(jù)需要自行配置,提供全部源代碼.靈活的存儲器控制,允許詳細地為代碼和數(shù)據(jù)分配地址.去除不需要的函數(shù)和變量.C/C++變量和函數(shù)連接時全局類型檢查.可選的校驗和生成功能,用于運行時映象校驗.自動將代碼和數(shù)據(jù)放置到非連續(xù)的存儲器區(qū)域.強大的可重定位宏匯編器,支持豐富的命令集和操作符④EWARM調(diào)試器的軟件特色.完全集成的源代碼和反匯編程序調(diào)試器.非常細化的執(zhí)行控制(函數(shù)調(diào)用級步進).復(fù)雜的代碼和數(shù)據(jù)斷點.豐富的數(shù)據(jù)監(jiān)視功能.Locals,Watch,Auto,LiveWatch和QuickWatch等變量查看窗口.寄存器和存儲器查看窗口.支持STL容器.C/C++調(diào)用棧窗口,同時還可以顯示將要進入的函數(shù).雙擊調(diào)用鏈上的任何函數(shù)將更新編輯器、局部變量、寄存器、變量查看和反匯編窗口,以顯示在該函數(shù)調(diào)用時的狀態(tài).跟蹤功能,可以檢查執(zhí)行的歷史記錄。在跟蹤窗口中移動時將更新編輯器和反匯編窗口以顯示合適的位置。.控制臺I/O仿真.中斷和I/O模擬仿真.類似C語言的宏系統(tǒng),可擴充調(diào)試器的功能.由主機執(zhí)行的應(yīng)用程序系統(tǒng)調(diào)用仿真.代碼覆蓋率和執(zhí)行時間分析工具.通用的FlashLoader程序及開發(fā)指南.同時支持多顆Flash的FlashLoader程序.支持OSEKRun-TimeInterface(ORTI).提供為調(diào)試器擴充第三方功能的軟件開發(fā)包,如RTOS調(diào)試擴充和仿真器驅(qū)動擴充.命令行調(diào)試工具⑤IARC-SPY支持的調(diào)試方法.IARJ-LinkJTAG接口(支持所有ARM7和ARM9核,通過USB或TCP/IP連接).RDI接口類的第三方仿真器(AbatronBDI1000&BDI2000,EPIMajic,AshlingOpella,AijiOpenICE,SignumJTAGjet,ARMMulti-ICE等).MacraigorWiggler,Raven,mpDemon和USBdemon等調(diào)試接口.EPIJeeni仿真器支持.IAR的ROM-Monitor.ARM公司的AngelROM-Monitor(用于Atmel和CirrusLogic的評估板)⑥EWARM圖形化的集成開發(fā)環(huán)境的界面特色.分層次的工程組織.同一工作空間中允許存放多個工程.可停靠的窗口和多視圖.源代碼瀏覽.創(chuàng)建和維護庫的工具.可以和源代碼控制系統(tǒng)相集成.文本編輯器.支持多字節(jié)字符(漢字).上下文相關(guān)的幫助系統(tǒng).根據(jù)句法著色.無限制的undo/redo.搜尋、替換和增量搜尋.Goto.書簽.錯誤標簽:查閱前一個/下一個.自動括號配對.智能縮排.類似網(wǎng)頁瀏覽器的前向/后向源碼查閱.代碼斷點的設(shè)置/清除/使能/禁止.命令行編譯連接工具⑦EWARM的編程語言和標準.遵循ISO/ANSIC94(帶有一些從C99標準中挑選的特性)標準的C編程語言.嵌入式C++擴展,支持模板、多重繼承和虛擬繼承、名字空間以及其它不增加執(zhí)行時間或存儲器開銷的C++特性。完整的嵌入式C++庫還包含字符串、流等特性。

.IEEE-754浮點運算規(guī)則.MISRAC檢查器.支持大量工業(yè)標準的調(diào)試和映象文件格式(如ELF/DWARF),與大多數(shù)常見的調(diào)試器和仿真器兼容⑧用戶幫助.完備的例程和工程模板。.上下文相關(guān)的聯(lián)機幫助系統(tǒng),帶有庫函數(shù)查閱功能.印刷好的用戶指南,帶有詳細的step-by-step教程.友好、詳盡和精確的錯誤信息和警告信息2.3用AXD進行代碼仿真、調(diào)試

2.3.1AXD簡介ADX(ARMextendedDebugger)是ADS軟件中獨立于CodeWarriorIDE的圖形軟件,可從CodeWarriorforARMDeveloperSuite中進入ADX進行調(diào)試,或在Windows下選擇“程序”∣ARMDeveloperSuitev1.2∣AXDDebugger進入調(diào)試。要使用AXD必須首先有生成包含調(diào)試信息的程序,即由CodeWarriorforARMDeveloperSuite編譯生成含有調(diào)試信息的可執(zhí)行ELF格式的映像文件(*.axf)。1在AXD中打開調(diào)試文件在CodeWarriorforARMDeveloperSuite界面中,點擊Debugger進入AXD調(diào)試界面。選擇File∣Loadimage命令,打開Loadimage對話框,找到要裝入的.axf映像文件,單擊“打開”按鈕,就可以把映像文件裝載到目標內(nèi)存中,如圖2-22所示。利用Exeute菜單中的子菜單項對可執(zhí)行映像文件進行調(diào)試,各選項的含義如下:.選擇Go子菜單或按F5鍵,將全速運行代碼。.選擇Stop子菜單或按Shift+F5鍵,將停止運行代碼。.選擇StepIn子菜單或按F8鍵,以單步執(zhí)行代碼,若遇到函數(shù),則進入函數(shù)內(nèi)執(zhí)行。.選擇Step子菜單或按F10鍵,以單步執(zhí)行代碼,若遇到函數(shù),則把函數(shù)看成一條語句單步執(zhí)行。.選擇StepOut子菜單或按Shift+F8鍵,在StepIn單步執(zhí)行代碼進入函數(shù)內(nèi)后,若選該子菜單,則可以從函數(shù)中跳出返回到上一級程序執(zhí)行。.選擇RunTocursor子菜單或按F7鍵,以全速運行到光標處停下。.選擇ShowExecutionContext子菜單,可顯示執(zhí)行的內(nèi)容。.選擇DeleteAllBreakpoint子菜單,清除所有的斷點。2.查看存儲器、寄存器、變量內(nèi)容利用AXD菜單選項ProcessorViews和SystemViews中的子菜單選項可查看寄存器、變量值,還可以查看某個內(nèi)存單元的數(shù)值等。各子菜單的含義如下:選擇Registers子菜單或按Ctrl+R鍵,可查看或修改目標板處理器中寄存器中的值.選擇Watch子菜單或按Ctrl+E鍵,可對處理器設(shè)置觀察點,觀察點可以是寄存器、地址等,但不能修改。特別注意:ProcessorViews菜單下的Watch只能觀察處理器,而SystemViews菜單下的Watch或按Alt+E鍵時可對目標板上的任何資源建立觀察,可增加或刪除觀察點。.選擇Variables菜單或按Ctrl+E鍵,可查看或修改當前可執(zhí)行的映像文件(程序)中的變量值,這些變量可以是局部變量、全局變量、類屬變量。可增加或刪除查看或修改的變量。.選擇Memory子菜單或按Ctrl+M鍵,可查看或修改存儲器中的值。如在程序執(zhí)行前,可以先查看兩個宏變量IOPMOD和IOPDATA的當前值。方法是:.選擇AXD的ProcessorViews∣Memory命令或按Ctrl+M鍵后,查看或修改存儲器中的值,如圖2-23所示。3.在MemoryStartaddress文本框圖上,用戶可以根據(jù)要查看或修改的存儲器地址輸入起始地址,在下面的表格中會列出連續(xù)的64個地址。因為I/O模式控制寄存器和I/O數(shù)據(jù)控制寄存器都是32位的控制寄存器,所以從0x00000000開始的連續(xù)4個地址空間存放的是I/O模式控制寄存器的值,從圖中可以讀出該控制寄存器的值,數(shù)據(jù)控制寄存器的內(nèi)容,注意因為用的是小端模式,所以讀數(shù)據(jù)時注意高地址中存放的高字節(jié),低地址存放的是低字節(jié)。4.斷點設(shè)置、查看在程序調(diào)試時經(jīng)常設(shè)置斷點,即在程序的某處設(shè)置斷點,當程序執(zhí)行到斷點處即可停下,這時開發(fā)人員可通過前面的方法查看寄存器、存儲器或變量的值,以判定程序是否正常。設(shè)置斷點的方法是將光標移到需設(shè)置斷點處,使用快捷鍵F9在此處設(shè)置斷點。查看斷點的方法是:選擇SystemViews∣breakpointview命令或按Alt+K鍵,在斷點狀態(tài)對話框中右擊,利用快捷菜單可增加或刪除斷點。按F5鍵,程序?qū)⑦\行到斷點,如果要進入函數(shù)內(nèi)查看如何運行的,可以選擇Execte∣StepInw命令或按下F8鍵,進入到子函數(shù)內(nèi)部進行單步程序的調(diào)試。2.3.2JTAG概述

JTAG是JointTestActionGroup(聯(lián)合測試行動小組)的簡稱,由于IEEE1149.1標準是由JTAG這個組織最初提出的,最終由IEEE批準并且標準化的。所以IEEE1149.1這個標準一般也俗稱JTAG調(diào)試標準。JTAG標準主要用于芯片內(nèi)部測試及對系統(tǒng)進行仿真、調(diào)試。JTAG技術(shù)是一種嵌入式調(diào)試技術(shù),它在芯片內(nèi)部封裝了專門的測試電路TAP(TestAccessPort測試訪問口),通過專用的JTAG測試工具對內(nèi)部節(jié)點進行測試。目前大多數(shù)比較復(fù)雜的器件都支持JTAG協(xié)議,如ARM、DSP、FPGA器件等。標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為測試模式選擇、測試時鐘、測試數(shù)據(jù)輸入和測試數(shù)據(jù)輸出。JTAG測試允許多個器件通過JTAG接口串聯(lián)在一起,形成一個JTAG鏈,能實現(xiàn)對多個器件分別測試。JTAG接口還常用于實現(xiàn)ISP(In-SystemProgrammable在線系統(tǒng)可編程)功能,如對FLASH器件進行編程等。在JTAG調(diào)試中,邊界掃描(Boundary-Scan)是一個很重要的概念。邊界掃描技術(shù)的基本思想是在靠近芯片的輸入輸出管腳上增加一個移位寄存器單元。因為這些移位寄存器單元都分布在芯片的邊界上,所以被稱為邊界掃描寄存器(Boundary-ScanRegisterCell)。芯片處于調(diào)試狀態(tài)的時候,這些邊界掃描寄存器可以將芯片和外圍的輸入輸出隔離開來。通過這些邊界掃描寄存器單元,可以實現(xiàn)對芯片輸入輸出信號的觀察和控制。如果需要捕獲芯片某個管腳上的輸出,首先需要把該管腳上的輸出裝載到邊界掃描鏈的寄存器單元中去,然后通過TDO輸出,這樣,我們就可以從TDO上得到相應(yīng)管腳上的輸出信號。如果要在芯片的某個管腳上加載一個特定的信號,則首先需要通過TDI把期望的信號移位到與相應(yīng)管腳相連的邊界掃描鏈的寄存器單元里去,然后將該寄存器單元的值加載到相應(yīng)的芯片管腳。由于在正常的運行狀態(tài)下,這些邊界掃描寄存器對芯片來說是透明的,所以正常的運行不會受到任何影響。這樣,邊界掃描寄存器就提供了一個便捷的方式,用以觀測和控制所需要調(diào)試的芯片。另外,芯片輸入輸出管腳上的邊界掃描(移位)寄存器單元可以相互連接起來,在芯片的周圍形成一個邊界掃描鏈(Boundary-ScanChain)。一般的芯片都會提供幾條獨立的邊界掃描鏈,用來實現(xiàn)完整的測試功能。邊界掃描鏈可以串行地輸入和輸出,通過相應(yīng)的時鐘信號和控制信號,可以方便地觀察和控制處在調(diào)試狀態(tài)下的芯片。JTAG仿真器需要設(shè)備驅(qū)動程序驅(qū)動,在我們使用的教學實驗系統(tǒng)(EDUKIT-Ⅲ),JTAG仿真器的驅(qū)動程序為兩個動態(tài)鏈接庫(EasyICEArm9Plus.dll,EasyICEArm7Plus.dll),把這兩個文件拷貝到C:\EmbestIDE\Bin\Device\路徑下,即可正常使用。2.3.3Nor和NandFlash的區(qū)別和使用

Nor和Nand是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel公司于1988年首先開發(fā)出NorFlash技術(shù)。這項技術(shù)的開發(fā)和投放市場徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。緊接著,1989年東芝公司發(fā)表了NandFlash結(jié)構(gòu),強調(diào)降低每比特的成本,提供更高的性能,并且像磁盤一樣可以通過接口輕松升級。在具有NandFlash接口的系統(tǒng)中,NandFlash存儲器可以替代NorFlash存儲器使用。許多業(yè)內(nèi)人士也搞不清楚Nand閃存技術(shù)相對于Nor技術(shù)的優(yōu)越之處,因為大多數(shù)情況下閃存只是用來存儲少量的代碼,這時Nor閃存更適合一些。而Nand則是高數(shù)據(jù)存儲密度的理想解決方案。Nor的特點是XIP(eXecuteInPlace芯片內(nèi)執(zhí)行)特性,這樣,應(yīng)用程序可以直接在Flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中。Nor的傳輸效率很高,在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。Nand結(jié)構(gòu)能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。應(yīng)用Nand的困難在于Flash的管理和需要特殊的系統(tǒng)接口。1.性能比較Flash閃存是非易失存儲器,可以對稱作塊的存儲器單元塊進行擦寫和再編程。由于任何Flash器件的寫入操作只能在空或已擦除的單元內(nèi)進行,所以大多數(shù)情況下,在進行寫入操作之前必須先執(zhí)行擦除。Nand器件執(zhí)行擦除操作是十分簡單的,而Nor則要求在進行寫入前先要將目標塊內(nèi)所有的位都寫為0。由于擦除Nor器件時是以64KB~128KB的塊進行的,執(zhí)行一個寫入/擦除操作的時間為5s,與此相反,擦除Nand器件是以8KB~32KB的塊進行的,執(zhí)行相同的操作最多只需要4ms。執(zhí)行擦除時塊尺寸的不同進一步拉大了Nor和Nand之間的性能差距,統(tǒng)計表明,對于給定的一套寫入操作,尤其是更新小文件時,在基于Nor的單元中進行需要更多的擦除操作。這樣,當選擇存儲解決方案時,設(shè)計師必須權(quán)衡以下的各項因素:

.Nor的讀速度比Nand稍快一些。.Nand的寫入速度比Nor快很多,Nand的4ms擦除速度遠比Nor的5s快。.大多數(shù)寫入操作需要先進行擦除操作。.Nand的擦除單元更小,相應(yīng)的擦除電路更少。2.容量和成本。NandFlash的單元尺寸幾乎是Nor器件的一半,由于生產(chǎn)過程更為簡單,Nand結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,也就相應(yīng)地降低了價格。在Nand閃存中每個塊的最大擦寫次數(shù)是一百萬次,而Nor的擦寫次數(shù)是十萬次。NorFlash占據(jù)了容量為1MB~16MB閃存市場的大部分,而NandFlash只是用在8MB~128MB的產(chǎn)品當中,這也說明Nor主要應(yīng)用在代碼存儲介質(zhì)中,Nand適合于數(shù)據(jù)存儲。Nand在CompactFlash、SecureDigital、PCCards和MMC存儲卡市場上所占份額最大。3.接口差別。NorFlash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內(nèi)部的每一個字節(jié)。基于Nor的閃存使用非常方便,可以像其他存儲器那樣連接,并可以在上面直接運行代碼。Nand器件使用復(fù)雜的I/O口來串行存取數(shù)據(jù),各個產(chǎn)品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數(shù)據(jù)信息。Nand的讀寫操作采用512字節(jié)的塊,這一點與硬盤管理操作類似,顯然基于Nand的存儲器就可以取代硬盤或其他塊設(shè)備。在使用Nand器件時,必須先寫入驅(qū)動程序,才能繼續(xù)執(zhí)行其他操作。向Nand器件寫入信息需要相當?shù)募记桑驗樵O(shè)計師決不能向壞塊寫入,這就意味著在Nand器件上自始至終都必須進行虛擬映射。幸運的是,S3C2410微處理器支持NandFlash接口,大大方便了在嵌入式系統(tǒng)設(shè)計中的應(yīng)用。鑒于兩種存儲器各自的優(yōu)缺點,在S3C2410嵌入式系統(tǒng)中,對NorFlash和NandFlash電路都進行了設(shè)計,以方便使用。2.3.4燒寫Flash

程序調(diào)試結(jié)束,要將其可執(zhí)行文件燒寫(或稱固化)到目標機中Flash運行,這個過程要通過一個轉(zhuǎn)門的下載軟件來進行,以EmbestOnLineFlashProgrammerforARM為例,來說明該軟件的安裝和使用。1.安裝FlashProgrammerFlashProgrammer安裝過程比較簡單,運行FlashProgrammer安裝包中的Setup.exe,按照提示一步步執(zhí)行即可。FlashProgrammer安裝程序?qū)⒆詣訁^(qū)分電腦是否已安裝EmbestIDE軟件的情況:①電腦已安裝EmbestIDE軟件,安裝程序?qū)袴lashProgrammer缺省安裝到“EmbestIDE安裝目錄\Tools\FlashProgrammer”目錄,見圖2-24。同時安裝程序?qū)⒆詣犹綔y是否安裝與IDE軟件共享的設(shè)備模塊和驅(qū)動程序,安裝完畢后電腦無需重新啟動。如果IDE已注冊,軟件可直接運行。②電腦未安裝EmbestIDE軟件,安裝程序?qū)袴lashProgrammer缺省安裝到“ProgramFiles\Embest\FlashProgrammer”目錄,安裝完畢后需要重新啟動。軟件正常運行時需要注冊。軟件安裝完成后將缺省建立EmbestTools程序文件夾,包含執(zhí)行程序和幫助的快捷方式。2.FlashProgrammer的功能點擊FlashProgrammer圖標,出現(xiàn)圖2-25對話框,在第一行有四個一級菜單,下面分別介紹。①文件菜單文件菜單用于保存、打開用戶設(shè)置的編程配置數(shù)據(jù)文件,該文件一般以*.cfg形式存在。通過文件菜單,用戶還可以將已打開的編程配置數(shù)據(jù)文件里另存為其他文件,以及打開最近打開過的四個編程配置文件。文件菜單各子菜單命令如表2-1所示。表2-1文件菜單

圖2-25FlashProgrammer對話框②設(shè)置菜單設(shè)置菜單僅包含Configure子菜單。功能見表2-2表2-2設(shè)置菜單選擇Setting>Configure…子菜單,將彈出編程設(shè)備配置對話框,如圖2-26所示:連接設(shè)備(RemoteDevice),該下拉框中顯示所有本軟件支持的編程設(shè)備,用戶可以選擇其中一種,下拉框下方將顯示對應(yīng)該設(shè)備的說明和版本。通訊類型(Communicationtype),設(shè)置該設(shè)備與主機使用的連接方式和連接到的主機通訊口。通訊口(ParallelPort),按實際連接設(shè)置。③Tools菜單Tools菜單設(shè)置菜單僅包含Option…子菜單,功能見2-3。表2-3Tools菜單選擇Tools>Option…子菜單,將彈出應(yīng)用選項對話框,見圖2-27輸出信息記錄文件(Outputinformationtologfile),選擇該檢查框則應(yīng)用程序?qū)⑺休敵龅奶崾拘畔⒑湾e誤信息記錄到安裝目錄下的Info.log文件。編程時載入扇區(qū)所有數(shù)據(jù)(Loadingallsectordatawhenprogramming),部分Flash芯片編程時需要一次性載入扇區(qū)全部數(shù)據(jù),則用戶可以選擇本選項完成編程操作。超時(TimeOut),設(shè)置超時時間,單位為秒。測試RAM區(qū)大小(TestRamSize),設(shè)置目標測試(TargetTest)時測試的RAM存儲區(qū)大小,單位為Kbyte;根據(jù)本軟件運行時需要,一般情況下應(yīng)設(shè)置為4K,對于必須一次性載入一個扇區(qū)數(shù)據(jù)的Flash芯片,應(yīng)該設(shè)置為4K+扇區(qū)大小。執(zhí)行FLASH操作前復(fù)位次數(shù)(ResetCountBeforeFlashCommand),設(shè)置執(zhí)行編程、擦除、保護等命令前復(fù)位芯片的次數(shù)。④Help菜單Help菜單該菜單最重要的是Contents子菜單,內(nèi)部有我們需要的許多資料,特別是用戶手冊,對我們正確使用FlashProgrammer有很大幫助。幫助菜單項見表2-4:3.FlashProgrammer的使用NetStart評估板是一款基于SAMSUNG公司ARM7芯片S3C4510的評估電路板,板上包含2M字節(jié)的Flash芯片,型號是AMD公司AM29LV160DB,以及16M字節(jié)的SDRAM,板上應(yīng)用程序為ucLinux,是目前比較流行的一款評估板。我們以NetStart為例來說明FlashProgrammer的使用。NetStart評估板使用FLASH前64K存儲空間,即1到4號扇區(qū)保存BootLoader軟件,該軟件用于啟動固化在5到35號扇區(qū)的ucLinux,以及燒寫5到35號扇區(qū)內(nèi)容。本節(jié)講述如何使用FlashProgrammer對NetStart評估板Flash進行編程,用戶可以參照本實例對其他電路板進行編程配置。選擇合適的編程設(shè)備并設(shè)置通訊類型和通訊通道。②處理器設(shè)置選擇處理器CPU子對話框,如圖2-29所示:編程設(shè)備設(shè)置選擇Setting>Configure…子菜單,彈出編程設(shè)備配置對話框,如圖2-28所示:選擇SAMSUNG公司S3C4510處理器,選擇小端模式,按表2-5設(shè)置以下寄存器:FLASH芯片設(shè)置選擇FLASH子對話框,如圖2-30所示:圖2-30FLASH對話框選擇AMD公司AM29LV160B/DB芯片,選擇訪問寬度為16位,選擇芯片數(shù)目為1片,設(shè)置Flash起始地址為為0x180000,如果要燒寫B(tài)ootLoader程序,選擇扇區(qū)范圍為1到4,如果要燒寫ucLinux,選擇扇區(qū)范圍為5到35。編程數(shù)據(jù)設(shè)置選擇編程子對話框,如圖2-31所示:設(shè)置RAM起始地址為0,選擇需要編程的BIN格式文件,如果需要上載,選擇上載文件。圖2-31編程數(shù)據(jù)設(shè)置5目標板測試選擇處理器CPU子對話框,點擊目標板測試TargetTest按鈕,開始目標測試,測試時彈出以下對話框圖2-31,通知SYSCFG寄存器寫入值和讀取值不相同,原因是SYSCFG寄存器中包含S3C4510器件標識,因此選擇YES繼續(xù)測試。彈出類似的對話框均選擇YES繼續(xù)測試。圖2-32目標板測試對話框RAM區(qū)測試完后,開始獲取Flash設(shè)備標識號,如果獲取的Flash標識和保存的標識相同,表示測試成功,輸出信息如下圖:圖2-33表示測試成功對話框6FLASH編程

用戶可以點擊編程按鈕進行編程操作或其他Flash操作。2.3.5程序的運行

程序固化到FLASH中后,運行前往往將其復(fù)制到SDRAM中去,這樣可以提高運行速度,作者在科研工作中,因工作需要,編寫了一段將程序從FLASH中復(fù)制到DSRAM中去的C語言程序,可供參考,其中ARM9init(void)程序略。//------------------------------------------------------------------------------//主程序//------------------------------------------------------------------------------#include"def.h"#include"2410addr.h"#include"2410lib.h"#defineARM_ADDR0X30000000;//定義SDRAM地址void(*run)(void);//定義函數(shù)指針voidARM9init(void);voidCopyFromFlashToRAM(U32*FlashAddr,U32*ArmAddr,U32ul);voidcopy(void);voidmain(void){run=(void(*)(void))ARM_ADDR;ARM9init();copy();run();}//----------------------------------------------------------------------------//復(fù)制程序//----------------------------------------------------------------------------CopyFromFlashToRAM(U32*pulFlashAddr,U32*pulArmAddr,U32ul){U32*pulSource=pulFlashAddr;U32*pulDest=pulArmAddr;U32i; ul/=4;for(i=0;i<ul;i++){*pulDest++=*pulSource++;}}//-----------------------------------------------------------------------------//調(diào)復(fù)制程序//-----------------------------------------------------------------------------copy(void){U32*p1;U32*p2;P1=(U32*)0x00200000;P2=(U32*)0x30000000;CopyFromFlashToRAM(p1,p2,0x20000);}2.4ARMC語言程序的基本規(guī)則和系統(tǒng)初始化程序

2.4.1ARM使用C語言編程基本規(guī)則在應(yīng)用系統(tǒng)的程序設(shè)計中,若所有的編程任務(wù)均由匯編語言來完成,其工作量巨大,并且不易移植。由于ARM的程序執(zhí)行速度較高,存儲器的存儲速度和存儲量也很高,因此,C語言的特點充分發(fā)揮,使得應(yīng)用程序的開發(fā)時間大為縮短,代碼的移植十分方便,程序的重復(fù)使用率提高,程序架構(gòu)清晰易懂,管理較為容易等等。因此,C語言的在ARM編程中具有重要地位。在ARM程序的開發(fā)中,需要大量讀寫硬件寄存器,盡量縮短程序的執(zhí)行時間,因此部分初始化代碼一般使用匯編語言來編寫,比如ARM的啟動代碼,ARM的操作系統(tǒng)的移植代碼等,除此之外,絕大多數(shù)代碼可以使用C語言來完成。C語言使用的是標準的C語言,ARM的開發(fā)環(huán)境實際上就是嵌入了一個C語言的集成開發(fā)環(huán)境,只不過這個開發(fā)環(huán)境和ARM的硬件緊密相關(guān)。在使用C語言時,有時要用到和匯編語言的混合編程。當匯編代碼較為簡潔,則可使用直接內(nèi)嵌匯編的方法,否則,將匯編程序以文件的形式加入項目當中,通過ATPCS(ARM/ThumbProcedureCallStandard)的規(guī)定與C程序相互調(diào)用與訪問。ATPCS,就是ARM、Thumb的過

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論