




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第9章 ARM匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)ADS IDE(集成開(kāi)發(fā)環(huán)境)n ARM應(yīng)用軟件的開(kāi)發(fā)工具根據(jù)功能的不同,可以分為編輯軟件、編譯軟件、匯編軟件、鏈接軟件、調(diào)試軟件、嵌入式實(shí)時(shí)操作系統(tǒng)、函數(shù)庫(kù)、評(píng)估板,JTAG仿真器以及在線仿真器等。目前有多家公司可以提供以上不同類型的開(kāi)發(fā)工具,用戶采用ARM處理器進(jìn)行嵌入式系統(tǒng)開(kāi)發(fā)時(shí),選擇合適的開(kāi)發(fā)工具可以加快開(kāi)發(fā)進(jìn)度,節(jié)省開(kāi)發(fā)成本。ADS工具包的組成 n ADS是ARM公司推出的集成開(kāi)發(fā)工具包,是專門(mén)用于ARM相關(guān)應(yīng)用開(kāi)發(fā)和調(diào)試的綜合性軟件。目前常用的版本是1.2,在功能和易用性上比早期的SDT都有提高,是一款功能強(qiáng)大又易于使用的開(kāi)發(fā)工具。ARM ADS包
2、含有編譯器、鏈接器、CodeWarrior IDE、調(diào)試器、指令集模擬器、ARM開(kāi)發(fā)包和應(yīng)用庫(kù)等部分,可以用ADS來(lái)開(kāi)發(fā)、編譯、調(diào)試采用包括C、C+和ARM匯編語(yǔ)言編寫(xiě)的程序。 ADS工具包的組成n 1. 編譯器n ADS提供多種編譯器,以支持ARM和Thumb指令的編譯。n 2. 鏈接器n Armlink(ARM鏈接器)可以將編譯得到的一個(gè)或多個(gè)目標(biāo)文件和相關(guān)的一個(gè)或多個(gè)庫(kù)文件進(jìn)行鏈接,生成一個(gè)可執(zhí)行文件,也可以將多個(gè)目標(biāo)文件部分鏈接成一個(gè)目標(biāo)文件,以供進(jìn)一步的鏈接。ADS工具包的組成n 3. CodeWarrior IDEn CodeWarrior IDE(集成開(kāi)發(fā)環(huán)境)包括工程管理器、代
3、碼生成接口、語(yǔ)法敏感編輯器、源文件和類瀏覽器、源代碼版本控制系統(tǒng)接口以及文本搜索引擎等。ADS僅在其PC機(jī)版本中集成了該IDE。n CodeWarrior IDE為管理和開(kāi)發(fā)項(xiàng)目提供了簡(jiǎn)單多樣化的圖形用戶界面,用戶可以使用ADS的CodeWarrior IDE為ARM和Thumb處理器開(kāi)發(fā)用C、C+或者ARM匯編語(yǔ)言編寫(xiě)的程序代碼。ADS工具包的組成n (1)調(diào)試器類型n ADS中包含有3個(gè)調(diào)試器,分別是ARM擴(kuò)展調(diào)試器AXD(ARM eXtended Debugger.n (2)調(diào)試方式n 在ARM體系中,可以選擇Multi-ICE(Multi-processor in-circuit em
4、ulator)ARMulator或Angel多種調(diào)試方式。ADS工具包的組成n 5. ARM開(kāi)發(fā)包和函數(shù)庫(kù)n ARM開(kāi)發(fā)包由一些底層的例程和庫(kù)組成,可以幫助用戶快速開(kāi)發(fā)基于ARM的應(yīng)用程序和操作系統(tǒng)。n ADS的ARM應(yīng)用庫(kù)完善并增強(qiáng)了SDT中的函數(shù)庫(kù),同時(shí)還包括一些非常有用的源碼例程。ADS開(kāi)發(fā)工具集 n 1命令行開(kāi)發(fā)工具n (1)armccn armcc是 ARM C 編譯器。在命令控制臺(tái)環(huán)境下,輸入命令:C:> armcc help可以查看 armcc 的語(yǔ)法格式以及最常用的一些操作選項(xiàng)。n (2)armcppn armcpp 是 ARM C+ 編譯器。它將 ISO C+ 或 EC
5、+ 編譯成 32 位 ARM 指令代碼。n (3) tccn tcc 是 Thumb C 編譯器。該編譯器通過(guò)了 Plum Hall C Validation Suite 為 ANSI 一致性的測(cè)試。tcc 將 ANSI C 源代碼編譯成 16 位的 Thumb 指令代碼。ADS開(kāi)發(fā)工具集(4) tcppn tcpp 是 Thumb C+ 編譯器。 它將 ISO C+ 和 EC+ 源碼編譯成 16 位 Thumb 指令代碼。n (5) armsmn armsm 是 ARM 和 Thumb 的匯編器 . 它對(duì)用 ARM 匯編語(yǔ)言和 Thumb 匯編語(yǔ)言寫(xiě)的源代碼進(jìn)行匯編。n (6) armlin
6、kn armlink是 ARM 連接器。n (7) armsdn armsd是 ARM 和 Thumb 的符號(hào)調(diào)試器。ADS開(kāi)發(fā)工具集n 2GUI 開(kāi)發(fā)環(huán)境 n ADS GUI開(kāi)發(fā)環(huán)境主要包含Code Warrior 和 AXD,其中Code Warrior是用于編譯和鏈接的集成開(kāi)發(fā)工具,而AXD則是支持單步執(zhí)行、斷點(diǎn)設(shè)置等功能的集成調(diào)試工具。n (1)Code Warrior n Code Warrior for ARM是一套完整的集成開(kāi)發(fā)工具,充分發(fā)揮了 ARM RISC指令系統(tǒng)的優(yōu)勢(shì), 使產(chǎn)品開(kāi)發(fā)人員能夠很好的應(yīng)用尖端的片上系統(tǒng)技術(shù) . 該工具是專為基于 ARM RISC 的處理器而設(shè)計(jì)
7、的 。 ADS開(kāi)發(fā)工具集n (2)AXDn AXD調(diào)試器本身是一個(gè)軟件,用戶通過(guò)這個(gè)軟件可以對(duì)包含有調(diào)試信息的、正在運(yùn)行的可執(zhí)行代碼進(jìn)行變量的查看、斷點(diǎn)的設(shè)置、單步執(zhí)行等調(diào)試操作。在ARM體系中,它有Multi-ICE、ARMulator和Angel等幾種方式。AXD可以在Windows和UNIX下進(jìn)行程序的調(diào)試,它為用C、C+和匯編語(yǔ)言的源代碼提供了一個(gè)全面的Windows和UNIX環(huán)境。ADS開(kāi)發(fā)工具集n 3、 實(shí)用程序n ADS 提供以下的實(shí)用工具來(lái)配合前面介紹的命令行開(kāi)發(fā)工具的使用。n fromELF是 ARM 映像文件轉(zhuǎn)換工具。n armar是ARM庫(kù)函數(shù)生成器。n Flash do
8、wnloader用于把二進(jìn)制映像文件下載到ARM嵌入式設(shè)備上的 Flash 存儲(chǔ)器中。ARM匯編偽指令 n 在 ARM 匯編語(yǔ)言程序里,有一些特殊指令助記符,這些助記符與指令系統(tǒng)的助記符不同,沒(méi)有相對(duì)應(yīng)的操作碼,也就是不會(huì)生成機(jī)器碼,僅僅是在編譯器軟件中起著格式化的作用,通常稱這些特殊指令助記符為偽指令。偽指令在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,這些偽指令僅在匯編過(guò)程中起作用,一旦匯編結(jié)束,偽指令的使命就完成。 在 ARM 的匯編程序中,有如下幾種偽指令:數(shù)據(jù)常量定義偽指令、數(shù)據(jù)變量
9、定義偽指令、內(nèi)存分配偽指令及其他偽指令。1 數(shù)據(jù)常量定義偽指令 數(shù)據(jù)常量定義偽指令EQU用于為程序中的常量、標(biāo)號(hào)等定義一個(gè)等效的字符名稱,類似于 C 語(yǔ)言中的#define 。 EQU語(yǔ)法格式 : 名稱 EQU 表達(dá)式 ,類型 ;其中 EQU 可用 “ * ” 代替。 名稱為 EQU 偽指令定義的字符名稱,當(dāng)表達(dá)式為 32 位的常量時(shí),可以指定表達(dá)式的數(shù)據(jù)類型,可以有以下三種類型: CODE16 、 CODE32 和 DATA 。
10、 2 數(shù)據(jù)變量定義偽指令(Cont.) n 數(shù)據(jù)變量定義偽指令用于定義ARM匯編程序中的變量、對(duì)變量賦值以及定義寄存器的別名等操作。常見(jiàn)的數(shù)據(jù)變量定義偽指令有如下幾種: (1)GBLA、GBLL 和GBLS 語(yǔ)法格式:GBLA ( GBLL 或 GBLS ) 全局變量名 GBLA 、 GBLL 和 GBLS 偽指令用于定義全局變量,并將其初始化。其中: GB
11、LA用于定義一個(gè)全局的數(shù)字變量,并初始化為 0 ; GBLL用于定義一個(gè)全局的邏輯變量,并初始化F(假);n GBLS用于定義一個(gè)全局的字符串變量,并初始化為空;2 數(shù)據(jù)變量定義偽指令(Cont.) (2)LCLA、LCLL 和LCLS 語(yǔ)法格式: LCLA ( LCLL 或 LCLS ) 局部變量名 LCLA 、 LCLL 和 LCLS 偽指令用于定義一個(gè) ARM 程序中的局部變量,并將其初始化。其中:
12、0; LCLA偽指令用于定義一個(gè)局部的數(shù)字變量,并初始化為 0 ; LCLL偽指令用于定義一個(gè)局部的邏輯變量,并初始化為 F(假); LCLS 偽指令用于定義一個(gè)局部的字符串變量,并初始化為空;2 數(shù)據(jù)變量定義偽指令(Cont.) n (3)SETA、SETL 和SETS 語(yǔ)法格式:變量名 SETA ( SETL 或 SETS ) 表達(dá)式 偽指令 SETA 、 SETL 、 SETS 用于給一個(gè)已經(jīng)定義的全局變量或局部變量賦值。
13、 SETA 偽指令用于給一個(gè)數(shù)學(xué)變量賦值; SETL 偽指令用于給一個(gè)邏輯變量賦值; SETS 偽指令用于給一個(gè)字符串變量賦值;2 數(shù)據(jù)變量定義偽指令(Cont.) (4)RLIST 語(yǔ)法格式:名稱 RLIST 寄存器列表 RLIST 偽指令可用于對(duì)一個(gè)通用寄存器列表定義名稱,使用該偽指令定義的名稱可在 ARM 指令 LDM/STM 中使用。在 LDM/STM 指令中,列表中
14、的寄存器訪問(wèn)次序?yàn)楦鶕?jù)寄存器的編號(hào)由低到高,而與列表中的寄存器排列次序無(wú)關(guān)。3 內(nèi)存分配偽指令 n 內(nèi)存分配偽指令一般用于為特定的數(shù)據(jù)分配存儲(chǔ)單元,同時(shí)可完成已分配存儲(chǔ)單元的初始化。常見(jiàn)的數(shù)據(jù)定義偽指令有如下幾種:n (1)DCB 語(yǔ)法格式: 標(biāo)號(hào) DCB 表達(dá)式 n (2) DCW(或DCWU) 語(yǔ)法格式: 標(biāo)號(hào) DCW (或 DCWU ) 表
15、達(dá)式 3 內(nèi)存分配偽指令(Cont.) n (3)DCD(或DCDU) 語(yǔ)法格式: 標(biāo)號(hào) DCD (或 DCDU ) 表達(dá)式 n (4)DCFD(或DCFDU) 語(yǔ)法格式: 標(biāo)號(hào) DCFD (或 DCFDU ) 表達(dá)式n (5)DCFS(或DCFSU)
16、 語(yǔ)法格式: 標(biāo)號(hào) DCFS (或 DCFSU ) 表達(dá)式3 內(nèi)存分配偽指令(Cont.) n (6)DCQ(或DCQU) 語(yǔ)法格式: 標(biāo)號(hào) DCQ (或 DCQU ) 表達(dá)式 n (7) SPACE 語(yǔ)法格式: 標(biāo)號(hào) SPACE 表達(dá)式 n (8)MAP &
17、#160; 語(yǔ)法格式: MAP 表達(dá)式 ,基址寄存器 n (9)FILED 語(yǔ)法格式:標(biāo)號(hào) FIELD 表達(dá)式4 匯編控制偽指令 n 匯編控制偽指令用于控制匯編程序的執(zhí)行流程,常用的匯編控制偽指令包括以下幾條: (1) IF、ELSE、ENDIF 語(yǔ)法格式: IF 邏輯表達(dá)式 n 指令序列 1 n ELSE
18、60; 指令序列 2 ENDIF 4 匯編控制偽指令(Cont.) n (2) WHILE、WEND 語(yǔ)法格式: WHILE 邏輯表達(dá)式
19、; 指令序列 WEND n (3) MEXIT 語(yǔ)法格式: MEXIT MEXIT 用于從宏定義中跳轉(zhuǎn)出去。4 匯編控制偽指令(Cont.) (4) MACRO、MEND 語(yǔ)法格式: MACRO $ 標(biāo)號(hào) 宏名 $ 參數(shù) 1 , $ 參數(shù) 2 ,
20、 指令序列 MEND MACRO、MEND偽指令可以將一段代碼定義為一個(gè)整體,然后就可以在程序中通過(guò)宏指令多次調(diào)用該段代碼。 5 其他常用的偽指令 n 還有一些其他的偽指令,在匯編程序中經(jīng)常會(huì)被使用,主要包括AREA、ALIGN、CODE16、CODE32、ENTRY、END、EXPOR(或 GLOBAL)IMPORT、EXTERN、GET(或 INCLUDE )IN
21、CBIN、RN、ROUT等。 5 其他常用的偽指令(Cont.) (1)AREA 語(yǔ)法格式: AREA 段名 屬性 1 ,屬性 2 , AREA 偽指令用于定義一個(gè)代碼段或數(shù)據(jù)段。其中,段名若以數(shù)字開(kāi)頭,則該段名需用 “ | ” 括起來(lái),如 |1_test| 。屬性字段表示該代碼段(或數(shù)據(jù)段)的相關(guān)屬性,多個(gè)屬性用逗號(hào)分隔。5 其他常用的偽指令(Cont.) n (2) ALIGN n 語(yǔ)
22、法格式: ALIGN 表達(dá)式 , 偏移量 n (3) CODE16、CODE32 語(yǔ)法格式: CODE16 (或 CODE32 )n (4) ENTRY 語(yǔ)法格式: ENTRY n 5 其他常用的偽指令(Cont.) n (5) END 語(yǔ)法格式:&
23、#160; END n (6) EXPORT(或GLOBAL) 語(yǔ)法格式: EXPORT 標(biāo)號(hào) WEAK n (7) IMPORT 語(yǔ)法格式: IMPORT 標(biāo)號(hào) WEAK 5 其他常用的偽指令(Cont.) n (8) EXTERN 語(yǔ)法格式: EXTERN 標(biāo)號(hào) WEAKn (9) GET(或INCLUDE) 語(yǔ)法格式:
24、 GET 文件名 n (10) INCBIN 語(yǔ)法格式:INCBIN 文件名 n (11) RN 語(yǔ)法格式: 名稱 RN 表達(dá)式 ARM的匯編語(yǔ)言結(jié)構(gòu) n 在ARM(Thumb)匯編語(yǔ)言程序中,以相對(duì)獨(dú)立的指令或數(shù)據(jù)序列的程序段為單位組織程序代碼。段可以分為代碼段和數(shù)據(jù)段,代碼段的內(nèi)容為執(zhí)行代碼,數(shù)據(jù)段
25、存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)。一個(gè)匯編程序至少應(yīng)該有一個(gè)代碼段,也可以分割為多個(gè)代碼段和數(shù)據(jù)段,多個(gè)段在程序編譯鏈接時(shí)最終形成一個(gè)可執(zhí)行的映象文件。可執(zhí)行映象文件通常由以下幾部分構(gòu)成:n 一個(gè)或多個(gè)代碼段,代碼段的屬性為只讀。n 零個(gè)或多個(gè)包含初始化數(shù)據(jù)的數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫(xiě)。n 零個(gè)或多個(gè)不包含初始化數(shù)據(jù)的數(shù)據(jù)段,數(shù)據(jù)段的屬性為可讀寫(xiě)。ARM匯編語(yǔ)言的語(yǔ)句格式 n 1. 基本語(yǔ)句格式n ARM(Thumb)匯編語(yǔ)言的語(yǔ)句格式為:n 標(biāo)號(hào)指令或偽指令;注釋n 規(guī)則:n 如果一條語(yǔ)句太
26、長(zhǎng),可將其分為若干行來(lái)書(shū)寫(xiě),在行的末用續(xù)行符“”來(lái)標(biāo)識(shí)下一行與本行為同一條語(yǔ)句。n 每一條指令的助記符可以全部用大寫(xiě)、或全部用小寫(xiě),但不能在一條指令中大、小寫(xiě)混用。ARM匯編語(yǔ)言的語(yǔ)句格式(Cont.) n 2. 匯編語(yǔ)言程序中常用的符號(hào)n 在匯編語(yǔ)言程序設(shè)計(jì)中,可以使用各種符號(hào)代替地址、變量和常量等,以增加程序的可讀性。以下為符號(hào)命名的約定:n 符號(hào)名不應(yīng)與指令或偽指令同名n 符號(hào)在其作用范圍內(nèi)必須唯一。n 符號(hào)區(qū)分大小寫(xiě),同名的大、小寫(xiě)符號(hào)被視為兩個(gè)不同的符號(hào)。n
27、; 自定義的符號(hào)名不能與系統(tǒng)保留字相同。ARM匯編語(yǔ)言的語(yǔ)句格式(Cont.) n 3. 程序中的常量n 程序中的常量是指其值在程序的運(yùn)行過(guò)程中不能被改變的量。ARM(Thumb)匯編程序所支持的常量有邏輯常量、數(shù)字常量和字符串常量。n 數(shù)字常量一般為32位的整數(shù),無(wú)符號(hào)常量取值范圍為0232-1,有符號(hào)常量取值范圍為-231231-1。n 邏輯常量只有兩種取值:真或假。n 字符串常量為一個(gè)固定的字符串,一般用來(lái)提示程序運(yùn)行時(shí)的信息。ARM匯編語(yǔ)言的語(yǔ)句格式(Cont.) n 4. 匯編語(yǔ)言程序中的變量n 程序中的變
28、量是指其值在程序的運(yùn)行過(guò)程中可以改變的量。n 邏輯變量用于在程序的運(yùn)行中保存邏輯值(真/假)。n 數(shù)字變量用于在程序的運(yùn)行中保存數(shù)字值,但數(shù)字值的大小不應(yīng)超出數(shù)字變量所能表示的范圍。n 字符串變量用于在程序的運(yùn)行中保存一個(gè)字符串,但字符串的長(zhǎng)度不應(yīng)超出字符串變量所能表示的范圍。ARM匯編語(yǔ)言的語(yǔ)句格式(Cont.) n 5. 程序中的變量代換n 程序中的變量可通過(guò)代換操作取得一個(gè)常量。代換操作符為“$”。如果“$”在數(shù)字變量前面,編譯器會(huì)將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并將該十六進(jìn)制的字符串代換“$”后的數(shù)字
29、變量?;赪indows下ADS的匯編語(yǔ)言程序結(jié)構(gòu) n ADS環(huán)境下的ARM匯編語(yǔ)言程序結(jié)構(gòu)與其它環(huán)境下的匯編語(yǔ)言程序結(jié)構(gòu)大體相同,整個(gè)程序也是以段為單元來(lái)組織代碼。其語(yǔ)法規(guī)則總結(jié)如下:n 所有標(biāo)號(hào)必須在一行的頂格書(shū)寫(xiě),其后不要添加“:”號(hào);n 所有的指令均不能頂格寫(xiě);n 大小寫(xiě)敏感(可以全部大寫(xiě)或全部小寫(xiě),但不能大小寫(xiě)混合使用); n 注釋使用分號(hào)“;” 。基于Linux下GCC的匯編語(yǔ)言程序結(jié)構(gòu)n Linux下GCC的匯編語(yǔ)言結(jié)構(gòu)與其它環(huán)境下的匯編語(yǔ)言結(jié)構(gòu)相似,整個(gè)程序都是以程序段為單位
30、來(lái)組織代碼,但是在語(yǔ)言規(guī)則上與ADS環(huán)境下的ARM匯編語(yǔ)言規(guī)則有明顯的區(qū)別?,F(xiàn)將Linux下GCC的匯編語(yǔ)言規(guī)則總結(jié)如下:n 所有標(biāo)號(hào)必須在一行的頂格書(shū)寫(xiě),并且其后必須添加“:”號(hào);n 所有的指令均不能頂格寫(xiě);n 大小寫(xiě)敏感(可以全部大寫(xiě)或全部小寫(xiě),但不能大小寫(xiě)混合使用); n 注釋使用分號(hào)“” (注釋的內(nèi)容由“” 號(hào)起到此行結(jié)束,注釋可以在一行的頂格書(shū)寫(xiě));ARM匯編語(yǔ)言程序調(diào)試n 無(wú)論進(jìn)行嵌入式系統(tǒng)軟件開(kāi)發(fā)還是硬件電路設(shè)計(jì),調(diào)試永遠(yuǎn)是不可缺少的、非常重要的一個(gè)環(huán)節(jié)。通常嵌入式系統(tǒng)的調(diào)試方
31、法和類型有很多種,最為常見(jiàn)的包括軟件模擬調(diào)試、硬件仿真器在線調(diào)試、Wiggler線纜調(diào)試和Linux環(huán)境下的gdb程序調(diào)試。ADS軟件模擬環(huán)境下的程序調(diào)試 n ADS軟件模擬調(diào)試是利用ARMUL.dll提供的一個(gè)軟ARM內(nèi)核,調(diào)試工具和待調(diào)試的嵌入式軟件都在主機(jī)上運(yùn)行,由主機(jī)提供一個(gè)模擬的目標(biāo)運(yùn)行環(huán)境,可以進(jìn)行語(yǔ)法和邏輯上的調(diào)試。它的優(yōu)點(diǎn)是簡(jiǎn)單方便,不需要嵌入式目標(biāo)板,軟件的調(diào)試功能較強(qiáng);功能有限,不能進(jìn)行實(shí)時(shí)聯(lián)機(jī)調(diào)試。ADS硬件仿真器環(huán)境下的程序調(diào)試 n 在ADS環(huán)境下利用JTAG硬件仿真器可以實(shí)現(xiàn)聯(lián)機(jī)調(diào)試,即在線調(diào)試嵌入式設(shè)備的Flash中的程序或者SDRAM中的程序。由于仿真器自成體系,
32、調(diào)試時(shí)既可以連接目標(biāo)板,也可以不連接目標(biāo)板,當(dāng)然仿真器的價(jià)格也相對(duì)比較貴。一般在程序的前期開(kāi)發(fā),通常讓程序只在SDRAM中調(diào)試運(yùn)行,最后才下載到Flash中進(jìn)行調(diào)試運(yùn)行。ADS硬件仿真器環(huán)境下的程序調(diào)試(Cont.) n ARM仿真器是通過(guò)內(nèi)部硬件實(shí)現(xiàn)PC并口協(xié)議到串行JTAG(Jiont Test Action Gruop)協(xié)議的轉(zhuǎn)換。利用高速JTAG串行掃描鏈,通過(guò)調(diào)試通信通道(Debug Communications Channel,DCC)連接ARM核心內(nèi)嵌的名為“Embedded-ICE”的調(diào)試邏輯,調(diào)試邏輯實(shí)時(shí)監(jiān)測(cè)ARM核心的寄存器、數(shù)據(jù)總線和地址總線。ADS硬件仿真器環(huán)境下的程序
33、調(diào)試(Cont.) n 1. Multi-ICE server 軟件的安裝ADS硬件仿真器環(huán)境下的程序調(diào)試(Cont.) n 2運(yùn)行Multi-ICE servern 保證硬件正確連接后,即可運(yùn)行Multi-ICE server,默認(rèn)情況下,server 會(huì)用自動(dòng)配置來(lái)連接目標(biāo)器件。當(dāng)然,可以在settings 菜單下選擇配置的方式,一般選擇Atuo-Configure即可。n 如果正確連接到一個(gè)ARM內(nèi)n 核的嵌入式目標(biāo)板,將顯示n 圖。n ADS硬件仿真器環(huán)境下的程序調(diào)試(Cont.) n 3 配置ADS以支持JTAG仿真器n 啟動(dòng)ADS的調(diào)試器AXD后,從菜單“Option”中選擇“Co
34、nfigure Target”,在彈出的窗口中,選擇Multi-ICE,如果沒(méi)有此項(xiàng),則需要將Multi-ICE驅(qū)動(dòng)添加到對(duì)話框中。如圖所示。ADS Wiggler調(diào)試電纜環(huán)境下的程序調(diào)試 n Wiggler調(diào)試電纜實(shí)際上可以看出就是一個(gè)簡(jiǎn)易的JTAG“仿真器”,它也支持ADSn 集成開(kāi)發(fā)環(huán)境和在線聯(lián)機(jī)調(diào)試,支持單步、全速及斷點(diǎn)等調(diào)試功能。ADS Wiggler調(diào)試電纜環(huán)境下的程序調(diào)試(Cont.) n 1. Wiggler JTAG 調(diào)試電纜的驅(qū)動(dòng)安裝n 要使用Wiggler JTAG 調(diào)試電纜來(lái)調(diào)試ARM 處理器,除了ADS1.2 集成開(kāi)發(fā)環(huán)境外,還需要安裝一個(gè)ARM 調(diào)試代理,一般使用H
35、-JTAG 軟件,H-JTAG 軟件的特點(diǎn)如下:n 支持ARM7/ARM9,支持自動(dòng)檢測(cè)和手動(dòng)指定內(nèi)核;n 使用RDI 接口,支持SDT2.51、ADS1.2、REALVIEW 和IAR 集成開(kāi)發(fā)環(huán)境;n 支持2 個(gè)硬件斷點(diǎn)或數(shù)量不限的軟件斷點(diǎn);n 支持ARM/Thumb 模式;n 支持Little Endian & BIG Endian 模式;n 支持Semihosting 調(diào)試;n 支持Wiggler、SDT JTAG 和自定義接口。n 首先,用鼠標(biāo)雙擊H-JTAG軟件的安裝文件,啟動(dòng)H-JTAG 安裝界面,按照提示操作完成安裝。ADS Wiggler調(diào)試電纜環(huán)境下的程序調(diào)試(Co
36、nt.) n 2. 運(yùn)行H-JATG軟件n 接著,將Wiggler JTAG 調(diào)試電纜一頭通過(guò)并口延長(zhǎng)線與PC機(jī)的并口連接,另一頭接到嵌入式目標(biāo)板的JTAG插座上。然后啟動(dòng)H-JTAG。H-JTAG會(huì)自動(dòng)檢測(cè)ARM 內(nèi)核,如果JTAG 連接正確將會(huì)在H-JTAG主窗口中顯示處理器的型號(hào).ADS Wiggler調(diào)試電纜環(huán)境下的程序調(diào)試(Cont.) n 3. 配置ADS以支持JTAG仿真器n 啟動(dòng)ADS的調(diào)試器AXD后,從菜單“Option”中選擇“Configure Target”,在彈出的窗口中,添加或選擇H-JTAG.dll(如圖所示)。Linux環(huán)境下的gdb程序調(diào)試 n Linux下提
37、供了一個(gè)叫 gdb的GNU調(diào)試程序,主要用來(lái)調(diào)試C、C+等應(yīng)用程序。它可以提供: 監(jiān)視程序中變量的值; 設(shè)置斷點(diǎn)以使程序在指定的代碼行上暫停執(zhí)行; 單步執(zhí)行;n 語(yǔ)法格式: gdb <fname> gdb 基本命令 ARM匯編語(yǔ)言與C語(yǔ)言混合編程 n ARM體系結(jié)構(gòu)支持C/C+以及匯編語(yǔ)言的混合編程,在一個(gè)完整的程序設(shè)計(jì)中,除了初始化部分用匯編完成以外,其主要的編程任務(wù)一般都用C/C+完成。n 匯編語(yǔ)言和C/C+的混合編程通常有以下幾種方式:n 匯編程序中調(diào)用C程序n C程序中調(diào)用匯編程序n C程序中內(nèi)嵌匯編語(yǔ)句n 從匯編程序中訪問(wèn)C程序變量基本的ATPCS n 基本的ATPCS規(guī)
38、定了在混合編程時(shí)子程序調(diào)用的一些基本規(guī)則,主要包括寄存器的使用、堆棧的使用、參數(shù)傳遞和子程序結(jié)果的返回等方面的規(guī)則。n 1. 寄存器的使用規(guī)則n 程序通過(guò)寄存器R0R3來(lái)傳遞參數(shù),這時(shí)這些寄存器可以記作A0A3,被調(diào)用的子程序在返回前無(wú)需恢復(fù)寄存器R0R3的內(nèi)容?;镜腁TPCS (Cont.) n 在子程序中,使用R4R11來(lái)保存局部變量,這時(shí)這些寄存器可以記作V1V8。n 寄存器R12用作子程序間scratch寄存器,記作IP,在子程序的連接代碼段中經(jīng)常會(huì)有這種使用規(guī)則?;镜腁TPCS (Cont.) n 寄存器R13用作數(shù)據(jù)棧指針,記做SP,在子程序中寄存器R13不能用做其他用途。n
39、寄存器R14用作連接寄存器,記作LR,它用于保存子程序的返回地址。n 寄存器R15是程序計(jì)數(shù)器,記作PC,它不能用作其他用途。n ATPCS中的各寄存器在ARM編譯器和匯編器中都是預(yù)定義的。基本的ATPCS (Cont.) n 2. 堆棧的使用規(guī)則n 棧指針通常可以指向不同的位置,當(dāng)棧指針指向棧頂元素時(shí),稱為FULL棧。當(dāng)棧指針指向與棧頂元素相鄰的一個(gè)元素時(shí),稱為Empty棧。 數(shù)據(jù)棧的增長(zhǎng)方向也可以不同,當(dāng)數(shù)據(jù)棧向內(nèi)存減小的地址方向增長(zhǎng)時(shí),稱為Descending棧;反之稱為Ascending棧?;镜腁TPCS (Cont.) n 3. 參
40、數(shù)的傳遞規(guī)則n 根據(jù)參數(shù)個(gè)數(shù)是否固定,可以將子程序分為參數(shù)個(gè)數(shù)固定的子程序和參數(shù)個(gè)數(shù)可變的子程序,這兩種子程序的參數(shù)傳遞規(guī)則不同的。n 參數(shù)個(gè)數(shù)可變的子程序參數(shù)傳遞規(guī)則。n 參數(shù)個(gè)數(shù)固定的子程序參數(shù)傳遞規(guī)則?;镜腁TPCS (Cont.) n 4. 子程序結(jié)果返回規(guī)則n 結(jié)果為一個(gè)32位的整數(shù)時(shí),可通過(guò)寄存器R0返回。n 結(jié)果為一個(gè)64位整數(shù)時(shí),可以通R0和R1返回,依此類推。n 結(jié)果為一個(gè)浮點(diǎn)數(shù)時(shí),可以通過(guò)浮點(diǎn)運(yùn)算部件的寄存器f0,d0或者s0來(lái)返回。n 結(jié)果為一個(gè)復(fù)合的浮點(diǎn)數(shù)時(shí),可以通過(guò)寄存器f0-fN或者d0dN來(lái)返回。n 對(duì)于位數(shù)更多的結(jié)果,則需要通過(guò)調(diào)用內(nèi)存來(lái)傳遞。匯編程序中調(diào)用C程序 n 2. C語(yǔ)言文件n
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶中式園林景觀施工方案
- 社交媒體平臺(tái)運(yùn)營(yíng)策略全解析
- 湘潭二層民宿設(shè)計(jì)施工方案
- 學(xué)法分享+培養(yǎng)對(duì)知識(shí)的興趣 高中下學(xué)期主題班會(huì)
- 山西醫(yī)科大學(xué)《液壓與氣動(dòng)傳動(dòng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西足球場(chǎng)草坪施工方案
- 中小型幼兒園裝修施工方案
- 沈陽(yáng)藥科大學(xué)《企業(yè)編程》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西藝術(shù)職業(yè)學(xué)院《企業(yè)形象與品牌設(shè)計(jì)(CI)》2023-2024學(xué)年第二學(xué)期期末試卷
- 復(fù)旦大學(xué)《機(jī)能實(shí)驗(yàn)學(xué)(一)》2023-2024學(xué)年第二學(xué)期期末試卷
- 民政局離婚協(xié)議書(shū)模板(8篇)
- 氣管鏡科室講課ppt課件(PPT 69頁(yè))
- 對(duì)于二氧化碳傳感器的現(xiàn)狀及發(fā)展趨勢(shì)的淺分析
- 麥語(yǔ)言函數(shù)手冊(cè)參考模板
- 冷庫(kù)噴涂施工工藝(詳細(xì))
- 電機(jī)學(xué)辜承林(第三版)第1章
- 知情同意書(shū)-北京大學(xué)腫瘤醫(yī)院
- 建筑材料碳排放因子查詢表
- 觀音神課三十二卦
- 醫(yī)療機(jī)構(gòu)停業(yè)(歇業(yè))申請(qǐng)書(shū)
- 發(fā)票(商業(yè)發(fā)票)格式
評(píng)論
0/150
提交評(píng)論