400 likes | 577 Views
第 五 章 ADS 1.2 整合開發環境的使用. DMATEK CO.,LTD 深圳市長高科技有限公司. ARM ADS 全名稱為 ARM Developer Suite 。是 ARM 公司推出的新一代 ARM 整合開發工具。現在 ADS 的最新版本是 1.2 ,它取代了早期的 ADS 1.1 和 ADS 1.0 。它除了可以安裝在 Windows NT4 、 Windows 2000 、 Windows 98 和 Windows 95 作業系統下,還支援 Windows XP 和 Windows Me 作業系統。
E N D
第五章ADS 1.2整合開發環境的使用 DMATEK CO.,LTD 深圳市長高科技有限公司
ARM ADS全名稱為ARM Developer Suite。是ARM公司推出的新一代ARM整合開發工具。現在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。它除了可以安裝在Windows NT4、Windows 2000、Windows 98和Windows 95作業系統下,還支援Windows XP和Windows Me作業系統。 本章節透過一個具體實例,為讀者介紹如何使用該整合開發環境,利用CodeWarrior提供的建立專案範本來建立自己的開發專案,並學會如何進行編譯鏈結,產生成包含除錯資訊的映射映像檔和可以直接燒寫FLASH中的.bin格式的二進位可執行檔。
5-1使用ADS的建立專案: • 5-1.1 建立一個專案 • 專案將所有的源始碼組合在一起,並能夠決定最終所生成檔案的存放的路徑與輸出的格式等。在CodeWarrior中新建一個專案的方法有兩種,可以在工具欄中點擊點選“New”按鈕,也可以在“File”功能表中選擇“New…”功能表。會打開一個如圖5-1所示的對話方塊。
在這個對話方塊中為用戶提供了7種可選擇的專案類型。在這個對話方塊中為用戶提供了7種可選擇的專案類型。 • ARM Executabl Image:用於由ARM指令的程式生成一個ELF格式的可執行映射映像檔。 • ARM Object Library:用於由ARM指令的程式生成一個armar格式的資料庫。 • Empty Project:用於創建一個不包含任何資料庫或原始檔的專案。 • Makefile Importer Wizard:用於將Visual C的nmake或GNU make檔案轉入CodeWarrior IDE 專案檔案。 • Thumb ARM Executable Image:用於由ARM指令和Thumb指令的混和程式生成一個可執行的ELF格式的映射映像檔。 • Thumb Executable image:用於由Thumb指令創建一個可執行的ELF格式的映射映像檔。 • Thumb Object Library:用於由Thumb指令的程式生成一個armar格式的資料庫。
在這裏選擇ARM Executable Image,在“Project name:”中輸入專案檔案名稱,本例為“ledcircle”,點選“Location:”欄位的“Set…”按鈕,瀏覽選擇想要將該專案保存的路徑,將這些設置好後,點選“確定”,即可建立一個新的名為ledcircle的專案。 • 這個時候會出現ASM.mcp的窗口,如圖5-2所示,有三個標籤頁,分別為files, ,link order,,target預設的是顯示第一個標籤頁files。透過在該標籤頁點選滑鼠右鍵,選中“Add Files…”可以把要用到的源程式原始程式新增到專案中。
圖 5-3 新增檔案的資料夾 • 對於本例,將已準備好的原始檔案(.s和.c檔)新增進去,新增過程如下圖5-3所示,為新增檔案的資料夾:
點選“開啟”按鈕確定。 • 在這裏還有一個細節,希望讀者注意。在建立好一個專案時,預設的target是DebugRel,還有另外兩個可用的target,分別為Realease和Debug,這三個target的含義分別為: DebugRel:使用該目標,在產生目標的時候,會為每一個原始檔案生成除錯資訊。 Debug: 使用該目標為每一個原始檔案生成最完全的除錯資訊。 Release: 使用該目標不會生成任何除錯資訊。 • 在本例中,使用預設的DebugRel目標。
現在已經新建了兩個原始檔案,要把這兩個原始檔案新增到專案中去。現在已經新建了兩個原始檔案,要把這兩個原始檔案新增到專案中去。 • 為專案新增程式常用的方法有兩種,可以使用如圖5-4所表示的方法,也可以在“Project”功能表選項中,選擇“Add Files…”,這兩種方法都會打開檔案瀏覽對話框,用戶可以把已經存在的檔案新增到專案中來。當選好要新增的檔案時,會出現一個對話方塊,如圖5-1-4所示,詢問用戶把檔案新增到何類目標中,在這裏,我們選擇DebugRel目標,把剛才新建的兩個檔案新增到專案中來。
圖5-4 選擇新增檔案到指定目標 到目前為止,一個完整的專案已經建立。 下面對該專案進行編譯和鏈結工作。
5-1.2 編譯和鏈結專案 • 在進行編譯和鏈結前,首先講述一下如何進行生成目標的配置。 • 點選Edit功能表,選擇“DebugRel Settings…”(注意,這個選項會因用戶選擇的目標不同而有所不同),出現如圖5-5所示的對話方塊。 • 這個對話方塊中的設置很多,在這裏只介紹一些較為常用的設置選項,讀者若對其他未涉及到的選項感興趣,可以查看相對應的說明檔。 • target設置選項 Target Name欄位顯示了當前的目標設置。 Linker選項供用戶選擇要使用的鏈結器。在這裏預設選擇的是ARM Linker,使用該鏈結器,將使用armlink鏈結編譯和組譯生成的專案中的相對應檔案。
這個設置中還有兩個選項,None是不用任何鏈結器,如果選擇此項,則專案中的所有檔案都不會被編譯器或組譯器處理。ARM Librarian表示將編譯或組譯得到的目標檔轉換為ARM LIB檔案。對於本例,使用預設的鏈結器ARM Linker。 Pre-linker:目前CodeWarrior IDE不支援該選項。 Post-Linker:選擇在鏈結完成後,還要對輸出檔進行的操作。因為在本例中,希望生成一個可以燒寫到Flash中去的二進位碼,所以在這裏選擇ARM fromELF,表示在鏈結生成映射映像檔後,再呼叫FromELF命令將含有除錯資訊的ELF格式的映射映像檔轉換成其他格式的檔案。
Language Settings • 因為本例中包含有組譯原始程式,所以要用到組譯器。首先看ARM組譯器,預設的ARM體系結構是ARM7TDMI,不符合目標板S3C2440A,需設定為ARM920T。位元組順序預設就是小端模式。其他設置,就用預設值即可。 • 還有一個需要注意的就是ARM C編譯器,它實際就是使用了命令行工具arm cc,使用預設的設置就可以了。 • 細心的讀者可能會注意到,在設置框的右下角,當對某項設置進行了修改,該行中的某個選項就會發生相對應的更動,由於有了CodeWarrior,開發人員可以不用再去查看繁複的命令行選項,只要在介面中選取或取消某個選項,軟體就會自動生成相對應的程式,為不習慣在DOS下鍵入命令行的用戶提供了非常方便的方式。
Linker設置 • 滑鼠選中ARM Linker,出現如圖5-6所示對話方塊。這裏詳細介紹該對話方塊的主要的標籤頁選項,因為這些選項對最終生成的檔案有著直接的影響。 • 在標籤頁Output中,Linktype中提供了三種鏈結方式。Partial方式表示鏈結器只進行部分鏈結,經過部分鏈結生成的目標檔,可以作為以後進一步鏈結時的輸入檔案。Simple方式是預設的鏈結方式,也是使用最為頻繁的鏈結方式,它鏈結生成簡單的ELF格式的目標檔案,使用的是鏈結器選項中指定的位元址映射映像方式。Scat tered方式使得鏈結器要依據scatter格式檔中指定的位址映射映像,生成複雜的ELF格式的映射映像檔案。這個選項一般情況下,使用不太多。
因為所舉的例子比較簡單,選擇Simple方式就可以了。在選中Simple方式後,就會出現Simple image。 • RO Base:這個欄位設置包含有RO段的載入區域和執行區域為同一個位址。預設是0x8000。這裏用戶要依據自己硬體的實際SDRAM的位址空間來修改這個位址,保證在這裏填寫的位址,是程式執行時,SDRAM位址空間所能覆蓋的位址。針對本書所介紹的目標板,建議改為0x30100000。 • RW Base:這個欄位設置了包含RW和ZI輸出段的執行域位址。如果選中split選項,鏈結器生成的映射映像檔將包含兩個載入域和兩個執行域,此時,在RW Base中所輸入的位址為包含RW和ZI輸出段的域設置了載入域和執行域位址。 • Ropi:選中這個設置將告訴鏈結器使包含有RO輸出段的執行位置無關。使用這個選項,鏈結器將保證下面的操作:
檢查各段之間的重置位址是否有效。 確保任何由armlink自身生成的程式是和唯讀位置無關的。 • Rwpi:選中該選項將會告訴鏈結器使包含RW和ZI輸出段的執行域位置無關。 如果這個選項沒有被選中,區域就會標識為絕對。每一個可寫的輸入段必須是讀寫位置無關的。如果這個選項被選中,鏈結器將進行下面的操作: 檢查可讀/可寫屬性的執行區域的輸入段是否設置了位置無關屬性。 檢查在各段之間的位址是否有效。 在Region$$Table和ZISection$$Table中新增基於靜態記憶體sb的選項。該選項要求RW Base有值,如果沒有給它指定數值的話,預設為0值。 • Split Image:選擇這個選項把包含RO和RW的輸出段的載入區域分成2個載入區域:一個是包含RO輸出段的區域,一個是包含RW輸出段的區域。 這個選項要求RW Base有值,如果沒有給RW Base選項設置,則預設是-RWBase 0。
Relocatable:選擇這個選項保留了映射映像檔的重置位址偏移量。這些偏移量為程式載入器提供了有用的資訊。Relocatable:選擇這個選項保留了映射映像檔的重置位址偏移量。這些偏移量為程式載入器提供了有用的資訊。 • 在Options選項中,需要讀者引起注意的是Image entry point欄位。它指定映射映像檔的初始進入點位址值,當映射映像檔被載入程式載入時,載入程式會跳轉到該位址處執行。如果需要,用戶可以在這個欄位中輸入下面格式的進入點: 進入點位址:這是一個數值,例如-entry 0x0 符號:該選項指定映射映像檔的進入點為該符號所代表的位址處,比如-entryint-handler如果該符號有多處定義存在,armlink將產生出錯資訊。
offset+object(section):該選項指定在某個目標檔的段的內部的某個偏移量處為映射映像檔的進入位址,例如:offset+object(section):該選項指定在某個目標檔的段的內部的某個偏移量處為映射映像檔的進入位址,例如: -entry 8+startup(startupseg) 在此處指定的進入點用於設置ELF映射映像檔的進入位址。 需要注意的是,這裏不可以用符號main作為進入點位址符號,否則將會出現類似:“Image dose not have an entry point (Not specified or not set due to multiple choice)”的錯誤資訊。 在Layout選項中,需要的設置如圖5-7所示,設置asm.O目標檔中的Init為整個文件的進入點。 關於ARM Linker的設置還有很多,對於想進一步深入瞭解的讀者,可以查看幫助檔,都有很詳細的介紹。
在Linker下還有一個ARM from ELF,如圖5-9所示。 From ELF就是在5-1節中介紹的一個實用工具,它實現將鏈結器,編譯器或組譯器的輸出程式進行格式轉換的功能。例如,將ELF格式的可執行映射映像檔轉換成可以燒寫到ROM的二進位格式檔案;對輸出檔案進行反組譯,從而提取出有關目標檔案的大小,符號和字串表以及重置位址等資訊。 只有在Target設置中選擇了Post-linker,才可以使用該選項。 在Output format下拉選單中,為用戶提供了多種可以轉換的目標格式,本例選擇Plain binary,這是一個二進位格式的可執行檔,可以被燒寫進目標板的Flash中。
在Output file name欄位輸入期望生成的輸出檔按存放的路徑,或通過透過點Choose按鈕從檔案對話方塊中選擇輸出檔案。如果在這個欄位不輸入路徑名,則生成的二進位檔案會存放在專案所在的目錄下。 完成這些相關的設置後,以後在對專案進行make的時候,CodeWarrior IDE 就會在鏈結完成後使用from ELF 來處理生成的映射映像檔。 對於本例的專案而言,到此,就完成了make之前的設置工作了。
圖5-10 編譯和鏈結過程 • 點選CodeWarrior IDE的功能表Project下的make功能表,就可以對專案進行編譯和鏈結了。整個編譯鏈結過程,如圖5-10所示:
在專案DMA2440XP_Pwm所在的目錄下,會生成一個名為:專案名_data目錄,在本例中就是DMA2440XP_Pwm_data目錄,在這個目錄下不同類別的目標對應不同的目錄。在本例中由於我們使用的是DebugRel目標,所以生成的最終檔案都應該在該目錄下。進入到DebugRel目錄中去,讀者會看到make後生成的映射映像檔案和二進位檔案,映射映像檔案用於除錯,二進位檔案可以下載到SDRAM中執行。在專案DMA2440XP_Pwm所在的目錄下,會生成一個名為:專案名_data目錄,在本例中就是DMA2440XP_Pwm_data目錄,在這個目錄下不同類別的目標對應不同的目錄。在本例中由於我們使用的是DebugRel目標,所以生成的最終檔案都應該在該目錄下。進入到DebugRel目錄中去,讀者會看到make後生成的映射映像檔案和二進位檔案,映射映像檔案用於除錯,二進位檔案可以下載到SDRAM中執行。 • 5-1.3 ASM的參考程式 • 底下是ASM.s的程式。 ;組譯指令實驗 ;定義埠暫存器預定義 rGPFCON EQU 0x56000050 rGPFDAT EQU 0x56000054 rGPFUP EQU 0x56000058
AREA Init,CODE,READONLY ;該虛擬指令定義了一個代碼段,段名為Init,屬性唯讀 ENTRY ;程式的入口點標識 ResetEntry 下面這三條語句,主要是用來設置I/O口GPE7為輸出屬性 ldr r0,=rGPFCON ;將暫存器rPCONE的位址存放到暫存器r0中 ldr r1,=0x4000 str r1,[r0] ;將r1中的資料存放到暫存器rPCONE中 下面這三句,主要是禁止GPE埠的上升電阻 ldr r0,=rGPFUP ldr r1,=0xffff str r1,[r0] ldr r2,=rGPFDAT ;將資料埠E的資料暫存器的位址附給暫存器r2 ledloop
ldr r1,=0x1ffff str r1,[r2] ;使GPE7輸出高電壓,D2燈會滅 bl delay ;使用延遲副程式 ldr r1,=0x0 str r1,[r2] ;使GPE7輸出低電壓,D2燈亮 bl delay ;使用延遲 b ledloop ;不斷的迴圈,D2將不停的閃爍 下面是延遲副程式 delay ldr r3,=0x1ffff ;設置延遲的時間 delay1 sub r3,r3,#1 ;r3=r3-1 cmp r3,#0x0 ;將r3的值與0相比較 bne delay1 ;比較的結果不為0(r3不為0), 繼續調用讀取delay1,否則執 行下一條語句 mov pc,lr ;返回 END ;程式結束符
5-2 用AXD進行程式除錯: • 5-2.1安裝並執行ARM-JTAG模擬軟體ARM9 • 首先要正確連接目標板,20PIN排線連接到SDT座上。 • 再將光碟中的ARM9 DEBUG檔案夾複製到硬碟上任意目錄下,執行其中的檔案— “安裝驅動.exe”,就會彈出一個介面視窗,點選上面的“INSTALL”按鍵直到出現提示資訊“Service is partially installed.”,然後再點選下面的“INSTALL”按鍵,出現下面的資訊(圖5-11),說明驅動安裝成功:
圖5-12 配置正確的介面選項 • 現在執行ARM9-JTAG調試除錯代理軟體——arm9.exe,注意如果20Pin排線排線連接到SUPERJTAG板的SDT介面(JP4、JP5)上,需要選擇下圖5-12中的Sdt;如20Pin排線連接到SUPERJTAG板的Wiggler介面(JP1、JP2)上,需要選擇下圖中的Wiggler,如下圖5-12所示,配置正確的介面選項:
如果安裝成功、配置正確而且硬體連接良好,將會檢測到ARM920T,如(圖5-12)中左上角的紅色圓圈。如果安裝成功、配置正確而且硬體連接良好,將會檢測到ARM920T,如(圖5-12)中左上角的紅色圓圈。 • 5-2.2 為ARMJTAG模擬軟體正確配置AXD DEBUGGER • 執行ADS1.2軟體中的調試除錯軟體——AXD Debugger,如下圖5-13的介面中,點選功能表options/Configure Target,在彈出的介面視窗中選擇Remote_A.dll,然後點選按鍵Configure:
圖5-14 選擇ARM Ethernet driver選項的示意圖 • 在彈出的視窗中,點選“Select”按鍵,選擇“ARM Ethernet driver”選項,然後點選OK按鍵,如圖5-14所示,選擇ARM Ethernet driver選項的示意圖:
圖5-15 ARM Ethernet driver 配置設定 • 再點選“Configure”按鍵,在彈出的視窗中輸入數位“127.0.0.1”並確認,如圖5-15所示,ARM Ethernet driver 配置設定:
5-2.3 使用SuperJTAG 在ADS1.2 環境下進行模擬除錯 • 關閉並重新啟動AXD Debugger,點選功能表File/Load Image,找到您想除錯的目標程式(*.axf格式),打開它就會啟動目標程式下載,這時會出現進度條,下載完畢就可以單步或者全速除錯了,除錯過程中可以看CPU各暫存器,也可以設置中斷點,可以單步、全速等除錯功能。如下圖5-16所示,為ADS1.2除錯模擬示意圖。
5-3問題與討論:: • 一、何謂ADS? • 二、ADS支援那7種專案類型? • 三、請利用ADS來編輯5.1.3程式,並利用AXD來除錯。