ARM ADS 全稱為 ARM Developer Suite 。是 ARM 公司推出的新一代 ARM 集成開發(fā)工具,F(xiàn)在 ADS 的最新版本是 1.2 ,它取代了早期的 ADS1.1 和 ADS1.0 。它除了可以安裝在 Windows NT4 ,Windows 2000 , Windows 98 和 Windows 95 操作系統(tǒng)下,還支持 Windows XP 和 Windows Me 操作系統(tǒng)。 ADS 由命令行開發(fā)工具, ARM 時實庫, GUI 開發(fā)環(huán)境 (Code Warrior 和 AXD) ,實用程序和支持軟件組成。 有了這些部件,用戶就可以為 ARM 系列的 RISC 處理器編寫和調試自己的開發(fā)應用程序了。 下面就詳細介紹一下 ADS 的各個組成部分。 命令行開發(fā)工具 這些工具完成將源代碼編譯,鏈接成可執(zhí)行代碼的功能。 ADS 提供下面的命令行開發(fā)工具: armcc armcc 是 ARM C 編譯器。這個編譯器通過了 Plum Hall C Validation Suite 為 ANSI C 的一致性測試。 armcc 用于將用 ANSI C 編寫的程序編譯成 32 位 ARM 指令代碼。 因為 armcc 是我們最常用的編譯器,所以對此作一個詳細的介紹。 在命令控制臺環(huán)境下,輸入命令: armcc – help 可以查看 armcc 的語法格式以及最常用的一些操作選項 armcc 最基本的用法為: armcc [options] file1 file2 ... filen 這里的 option 是編譯器所需要的選項, fiel1,file2…filen 是相關的文件名。 這里簡單介紹一些最常用的操作選項。 -c :表示只進行編譯不鏈接文件; -C : ( 注意:這是大寫的 C) 禁止預編譯器將注釋行移走; -D<symbol> :定義預處理宏,相當于在源程序開頭使用了宏定義語句 #define symbol ,這里 symbol 默認為 1 ; -E :僅僅是對 C 源代碼進行預處理就停止; -g<options> :指定是否在生成的目標文件中包含調試信息表; -I<directory> :將 directory 所指的路徑添加到 #include 的搜索路徑列表中去; -J<directory> :用directory 所指的路徑代替默認的對 #include 的搜索路徑; -o<file> :指定編譯器最終生成的輸出文件名。 -O0 :不優(yōu)化; -O1 :這是控制代碼優(yōu)化的編譯選項,大寫字母 O 后面跟的數(shù)字不同,表示的優(yōu)化級別就不同, -O1 關閉了影響調試結果的優(yōu)化功能; -O2 :該優(yōu)化級別提供了最大的優(yōu)化功能; -S :對源程序進行預處理和編譯,自動生成匯編文件而不是目標文件; -U<symbol> :取消預處理宏名,相當于在源文件開頭,使用語句 #undef symbol; -W<options> :關閉所有的或被選擇的警告信息; 有關更詳細的選項說明,讀者可查看 ADS 軟件的在線幫助文件。 armcpp armcpp 是 ARM C++ 編譯器。它將 ISO C++ 或 EC++ 編譯成 32 位 ARM 指令代碼。 tcc tcc 是 Thumb C 編譯器。該編譯器通過了 Plum Hall C Validation Suite 為 ANSI 一致性的測試。 tcc 將 ANSI C 源代碼編譯成 16 位的 Thumb 指令代碼。 tcpp tcpp 是 Thumb C++ 編譯器。 它將 ISO C++ 和 EC++ 源碼編譯成 16 位 Thumb 指令代碼。 armasm armasm 是 ARM 和 Thumb 的匯編器 . 它對用 ARM 匯編語言和 Thumb 匯編語言寫的源代碼進 行匯編。 armlink armlink 是 ARM 連接器。該命令既可以將編譯得到的一個或多個目標文件和相關的一個或多個庫文件進行鏈接,生成一個可執(zhí)行文件,也可以將多個目標文件部分鏈接成一個目標文件,以供進一步的鏈接。 ARM 鏈接器生成的是 ELF 格式的可執(zhí)行映像文件。 armsd armsd 是 ARM 和 Thumb 的符號調試器。它能夠進行源碼級的程序調試。用戶可以在用 C 或匯編語言寫的代碼中進行單步調試,設置斷點,查看變量值和內存單元的內容。 GUI 開發(fā)環(huán)境 (Code Warrior 和 AXD) CodeWarrior 集成開發(fā)環(huán)境 CodeWarrior for ARM 是一套完整的集成開發(fā)工具,充分發(fā)揮了 ARM RISC 的優(yōu)勢 , 使產品開發(fā)人員能夠很好的應用尖端的片上系統(tǒng)技術 . 該工具是專為基于 ARM RISC 的處理器而設計的 , 它可加速并簡化嵌入式開發(fā)過程中的每一個環(huán)節(jié),使得開發(fā)人員只需通過一個集成軟件開發(fā)環(huán)境就能研制出 ARM 產品,在整個開發(fā)周期中 , 開發(fā)人員無需離開 CodeWarrior 開發(fā)環(huán)境 , 因此節(jié)省了在操做工具上花的時間 , 使得開發(fā)人員有更多的精力投入到代碼編寫上來, CodeWarrior 集成開發(fā)環(huán)境 (IDE) 為管理和開發(fā)項目提供了簡單多樣化的圖形用戶界面。用戶可以使用 ADS 的 CodeWarrior IDE 為 ARM 和 Thumb 處理器開發(fā)用 C , C++ ,或 ARM 匯編語言的程序代碼。通過提供下面的功能, CodeWarrior IDE 縮短了用戶開發(fā)項目代碼的周期。 1. 全面的項目管理功能; 2. 子函數(shù)的代碼導航功能,使得用戶迅速找到程序中的子函數(shù)。 可以在 CodeWarrior IDE 為 ARM 配置在 8.1.1 中介紹的各種命令工具,實現(xiàn)對工程代碼的編譯, 匯編和鏈接。 在 CodeWarrior IDE 中所涉及到的 target 有兩種不同的語義。 目標系統(tǒng) (Target system) 是特指代碼要運行的環(huán)境,是基于 ARM 的硬件。比如,要為 ARM 開發(fā)板上編寫要運行在它上面的程序,這個開發(fā)板就是目標系統(tǒng)。 生成目標 (Build target) 是指用于生成特定的目標文件的選項設置 ( 包括匯編選項,編譯選項,鏈接選項以及鏈接后的處理選項 ) 和所用的文件的集合。 CodeWarrior IDE 能夠讓用戶將源代碼文件,庫文件還有其他相關的文件以及配置設置等放在一個工程中。每個工程可以創(chuàng)建和管理生成目標設置的多個配置。例如,要編譯一個包含調試信息的生成目標和一個基于 ARM7TDMI 的硬件優(yōu)化生成目標,生成目標可以在同一個工程中共享文件,同時使用各自的設置。 CodeWarrior IDE 為用戶提供下面的功能: 源代碼編輯器,它集成在 CodeWarrior IDE 的瀏覽器中,能夠根據(jù)語法格式,使用不同的顏色顯示代碼; 源代碼瀏覽器,它保存了在源碼中定義的所有符號,能夠使用戶在源碼中快速方便的跳轉;查找和替換功能,用戶可以在多個文件中,利用字符串通配符,進行字符串的搜索和替換; 文件比較功能,可以使用戶比較路徑中的不同文本文件的內容。 ADS 的 CodeWarrior IDE 是基于 Metrowerks CodeWarrior IDE 4.2 版本的。它經過適當?shù)牟眉粢灾С?ADS 工具鏈。 針對 ARM 的配置面板為用戶提供了在 CodeWarrior IDE 集成環(huán)境下配置各種 ARM 開發(fā)工具的能力,這樣用戶可以不用在命令控制臺下就能夠使用在 8.1.1 和將在 8.1.4 中介紹的各種命令。 以 ARM 為目標平臺的工程創(chuàng)建向導,可以使用戶以此為基礎,快速創(chuàng)建 ARM 和 Thumb 工程。 盡管大多數(shù)的 ARM 工具鏈已經集成在 CodeWarrior IDE ,但是仍有許多功能在該集成環(huán)境中沒有實現(xiàn),這些功能大多數(shù)是和調試相關的,因為 ARM 的調試器沒有集成到 CodeWarrior IDE 中。 由于 ARM 調試器 (AXD) 沒有集成在 CodeWarrior IDE 中,這就意味著,用戶不能在 CodeWarrior IDE 中進行斷點調試和查看變量。 對于熟悉 CodeWarrior IDE 的用戶會發(fā)現(xiàn),有許多的功能已經從 CodeWarrior IDE For ARM 中移走,比如快速應用程序開發(fā)模板等。 在 CodeWarrior IDE For ARM 中有很多的菜單或子菜單是不能使用的。下面介紹一下這些不能使用的選項。 1. View 菜單下不能使用的菜單選項有: Processes , Expressions , Global Variable , Breakpoints , Registers 。 2. Project 菜單不能使用的菜單選項: Precompile 子菜單。因為 ARM 編譯器不支持預編譯的頭文件。 3. Debug 菜單 該菜單中沒有一個子菜單是可以使用的。 4. Browser 菜單中不能使用的菜單選項: New Property , New Method 和 New Event Set 。 5. Help menu 中不能用于 ADS 的菜單選項有: CodeWarrior Help , Index , Search 和 Online Manuals 。 有關 CodeWarrior IDE 中一些常用菜單的使用,將在后面的舉例中具體說明的,在此,不在贅述。 8.1.3.2 ADS 調試器 調試器本身是一個軟件,用戶通過這個軟件使用 debug agent 可以對包含有調試信息的,正在運行的可執(zhí)行代碼進行比如變量的查看,斷點的控制等調試操作。 ADS 中包含有 3 個調試器: AXD(ARM eXtended Debugger) : ARM 擴展調試器; armsd(ARM Symbolic Debugger) : ARM 符號調試器; 與老版本兼容的 Windows 或 Unix 下的 ARM 調試工具, ADW/ADU(Application Debugger Windows/Unix) 。 下面對在調試映像文件中所涉及到的一些術語做一個簡單的介紹。 Debug target 在軟件開發(fā)的最初階段,可能還沒有具體的硬件設備。如果要測試所開發(fā)的軟件是否達到了預 期的效果,這可以由軟件仿真來完成。即使調試器和要測試的軟件運行在同一臺 PC 上,也可以把目標當作一個獨立的硬件來看待。 當然,也可以搭建一個 PCB 板,這個板上可以包含一個或多個處理器,在這個板上可以運行和調試應用軟件。 只有當通過硬件或者是軟件仿真所得到的結果達到了預期的效果,才算是完成了應用程序的編寫工作。 調試器能夠發(fā)送以下指令: 1. 裝載映像文件到目標內存; 2. 啟動或停止程序的執(zhí)行; 3. 顯示內存,寄存器或變量的值; 4. 允許用戶改變存儲的變量值。 Debug agent Debug agent 執(zhí)行調試器發(fā)出的命令動作,比如:設置斷點,從存儲器中讀數(shù)據(jù),把數(shù)據(jù)寫到存儲器等。 Debug agent 既不是被調試的程序,也不是調試器。在 ARM 體系中,它有這幾種方式: Multi-ICE(Multi-processor in-circuit emulator) , ARMulator 和 Angel 。其中 Multi-ICE 是一個獨立的產品,是 ARM 公司自己的 JTAG 在線仿真器,不是由 ADS 提供的。 AXD 可以在 Windows 和 UNIX 下,進行程序的調試。它為用 C , C++ ,和匯編語言編寫的源代碼提供了一個全面的 Windows 和 UNIX 環(huán)境。 8.1.4 實用程序 ADS 提供以下的實用工具來配合前面介紹的命令行開發(fā)工具的使用 fromELF 這是 ARM 映像文件轉換工具。該命令將 ELF 格式的文件作為輸入文件,將該格式轉換為各種輸出格式的文件,包括 plain binary(BIN 格式映像文件 ), Motorola 32-bit S-record format(Motorola 32位 S 格式映像文件 ), Intel Hex 32 format(Intel 32 位格式映像文件 ) ,和 Verilog-like hex format(Verilog 16 進制文件 ) 。 FromELF 命令也能夠為輸入映像文件產生文本信息,例如代碼和數(shù)據(jù)長度。 armar ARM 庫函數(shù)生成器將一系列 ELF 格式的目標文件以庫函數(shù)的形式集合在一起,用戶可以把一個庫傳遞給一個鏈接器以代替幾個 ELF 文件。 Flash downloader 用于把二進制映像文件下載到 ARM 開發(fā)板上的 Flash 存儲器的工具 8.1.5 支持的軟件 ADS 為用戶提供下面的軟件,使用戶可以在軟件仿真的環(huán)境下或者在基于 ARM 的硬件環(huán)境調試用戶應用程序。 ARMulator 這是一個 ARM 指令集仿真器,集成在 ARM 的調試器 AXD 中,它提供對 ARM 處理器的指令集的仿真,為 ARM 和 Thumb 提供精確的模擬。用戶可以在硬件尚未做好的情況下,開發(fā)程序代碼。 |