第五章
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作業系統。
本章節透過一個具體實例,為讀者介紹如何使用該整合開發環境,利用CodeWarrior
提供的建立專案範本來建立自己的開發專案,並學會如何進行編譯鏈結,產生成包含除
錯資訊的映射映像檔和可以直接燒寫FLASH中的.bin格式的二進位可執行檔。
 5-1 使用ADS的建立專案:
 5-1.1 建立一個專案
 專案將所有的源始碼組合在一起,並能夠決定最終所生成檔案的存放的路徑與輸
出的格式等。在CodeWarrior中新建一個專案的方法有兩種,可以在工具欄中點擊
點選“New”按鈕,也可以在“File”功能表中選擇“New…”功能表。會打開一個如
圖5-1所示的對話方塊。
圖5-1 新建專案對話方塊
 在這個對話方塊中為用戶提供了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-2 新建專案打開視窗
 對於本例,將已準備好的原始檔案(.s和.c檔)新增進去,新增過程如下圖5-3所
示,為新增檔案的資料夾:
圖 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鏈結編譯和組譯生成的專案中的相對應檔案。
圖5-5 DebugRel設置對話方塊
 這個設置中還有兩個選項,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格式的映射映像檔案。這個選項一般情況下,使用不太多。
圖5-6 命令行工具選項設置
圖5-7 鏈結器設置
圖5-8 設置映射映像檔的入口點
 因為所舉的例子比較簡單,選擇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:選擇這個選項保留了映射映像檔的重置位址偏移量。這些偏移量為
程式載入器提供了有用的資訊。
 在Options選項中,需要讀者引起注意的是Image entry point欄位。它指定映射映
像檔的初始進入點位址值,當映射映像檔被載入程式載入時,載入程式會跳轉到
該位址處執行。如果需要,用戶可以在這個欄位中輸入下面格式的進入點:
進入點位址:這是一個數值,例如-entry 0x0
符號:該選項指定映射映像檔的進入點為該符號所代表的位址處,比如-entryinthandler如果該符號有多處定義存在,armlink將產生出錯資訊。
 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-9 ARM from ELF選項
 點選CodeWarrior IDE的功能表Project下的make功能表,就可以對專案進行編譯
和鏈結了。整個編譯鏈結過程,如圖5-10所示:
圖5-10 編譯和鏈結過程
 在專案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-11為安裝成功的畫面
 現在執行ARM9-JTAG調試除錯代理軟體——arm9.exe,注意如果20Pin排線排
線連接到SUPERJTAG板的SDT介面(JP4、JP5)上,需要選擇下圖5-12中的
Sdt;如20Pin排線連接到SUPERJTAG板的Wiggler介面(JP1、JP2)上,需要
選擇下圖中的Wiggler,如下圖5-12所示,配置正確的介面選項:
圖5-12 配置正確的介面選項
 如果安裝成功、配置正確而且硬體連接良好,將會檢測到ARM920T,如(圖5-12)
中左上角的紅色圓圈。
 5-2.2 為ARM JTAG模擬軟體正確配置AXD DEBUGGER
 執行ADS1.2軟體中的調試除錯軟體——AXD Debugger,如下圖5-13的介面中,
點選功能表options/Configure Target,在彈出的介面視窗中選擇Remote_ A.dll,
然後點選按鍵Configure:
圖5-13 Configure Target選項設定
 在彈出的視窗中,點選“Select”按鍵,選擇“ARM Ethernet driver”選項,然後點
選OK按鍵,如圖5-14所示,選擇ARM Ethernet driver選項的示意圖:
圖5-14 選擇ARM Ethernet driver選項的示意圖
 再點選“Configure”按鍵,在彈出的視窗中輸入數位“127.0.0.1”並確認,如圖515所示,ARM Ethernet driver 配置設定:
圖5-15 ARM Ethernet driver 配置設定
 5-2.3 使用SuperJTAG 在ADS1.2 環境下進行模擬除錯
 關閉並重新啟動AXD Debugger,點選功能表File/Load Image,找到您想除錯的
目標程式(*.axf格式),打開它就會啟動目標程式下載,這時會出現進度條,下
載完畢就可以單步或者全速除錯了,除錯過程中可以看CPU各暫存器,也可以設
置中斷點,可以單步、全速等除錯功能。如下圖5-16所示,為ADS1.2除錯模擬示
意圖。
圖5-16 ADS1.2除錯模擬示意圖
 5-3 問題與討論::
 一、何謂ADS?
 二、ADS支援那7種專案類型?
 三、請利用ADS來編輯5.1.3程式,並利用AXD來除錯。
Descargar

PowerPoint Template