關(guān)于我們
書單推薦
新書推薦
|
ARM體系結(jié)構(gòu)與編程
ARM處理器是一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,由ARM公司設(shè)計(jì),然后授權(quán)給各半導(dǎo)體廠商生產(chǎn),它目前已經(jīng)成為應(yīng)用最為廣泛的嵌入式處理器!禔RM體系結(jié)構(gòu)與編程(第2版)》共為分14章,對(duì)ARM處理器的體系結(jié)構(gòu)、指令系統(tǒng)和開(kāi)發(fā)工具進(jìn)行了比較全面的介紹。其中包括ARM體系、ARM程序設(shè)計(jì)模型、ARM匯編語(yǔ)言程序設(shè)計(jì)、ARM C/C++語(yǔ)言程序設(shè)計(jì)、ARM連接器的使用、ARM集成開(kāi)發(fā)環(huán)境CodeWarrior IDE的介紹及高性能的調(diào)試工具ADW的使用。并在此基礎(chǔ)上介紹一些典型的基于ARM體系的嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)的基本技術(shù)。通過(guò)閱讀本書,可以使讀者掌握開(kāi)發(fā)基于ARM的應(yīng)用系統(tǒng)的各方面的知識(shí)。本書既可作為學(xué)習(xí)ARM技術(shù)的培訓(xùn)材料,也可作為嵌入式系統(tǒng)開(kāi)發(fā)人員的參考手冊(cè)。
嵌入式系統(tǒng)是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積和功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
嵌入式系統(tǒng)并不是最近出現(xiàn)的新技術(shù),只是隨著微電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展,微控制芯片功能越來(lái)越強(qiáng)大,嵌入微控制芯片的設(shè)備和系統(tǒng)越來(lái)越多,從而使得這種技術(shù)越來(lái)越引人注目而已。嵌入式系統(tǒng)與通用的計(jì)算機(jī)系統(tǒng)既有相似之處,也有明顯的區(qū)別。通常,嵌入式系統(tǒng)中的系統(tǒng)程序(包括操作系統(tǒng))與應(yīng)用程序是渾然一體的,這些程序被編譯連接成一個(gè)可以執(zhí)行的二進(jìn)制映像文件(Image),這個(gè)二進(jìn)制映像文件被固化在系統(tǒng)中,在系統(tǒng)復(fù)位后自動(dòng)執(zhí)行。嵌入式系統(tǒng)的開(kāi)發(fā)系統(tǒng)與實(shí)際運(yùn)行的系統(tǒng)并不相同,需要交叉編譯系統(tǒng)和適當(dāng)?shù)恼{(diào)試系統(tǒng)。 ARM嵌入式處理器是一種高性能、低功耗的RISC芯片。它由英國(guó)ARM公司設(shè)計(jì),世界上幾乎所有的主要半導(dǎo)體廠商都生產(chǎn)基于ARM體系結(jié)構(gòu)的通用芯片,或在其專用芯片中嵌入ARM的相關(guān)技術(shù)。如TI、Motorola、Intel、NS、Philips、Altera、Agilent、Atmel、Hynix、Sharp、Triscend、NEC、Cirrus Logic、Samsung和LinkUp等公司都有相應(yīng)的產(chǎn)品。目前ARM芯片廣泛應(yīng)用于無(wú)線產(chǎn)品、PDA、GPS、網(wǎng)絡(luò)、消費(fèi)電子產(chǎn)品、STB及智能卡中,基于ARM內(nèi)核的處理器年產(chǎn)量突破90億個(gè),已經(jīng)成為業(yè)界的龍頭。本書比較全面地介紹基于ARM技術(shù)的嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā)技術(shù)。 1. 本書的主要讀者 本書對(duì)ARM處理器的體系結(jié)構(gòu)、指令系統(tǒng)、開(kāi)發(fā)工具做了比較全面的介紹。并在此基礎(chǔ)上討論一些典型的基于ARM體系嵌入式應(yīng)用系統(tǒng)設(shè)計(jì)時(shí)的基本技術(shù)。通過(guò)閱讀本書,可以使讀者能夠掌握開(kāi)發(fā)基于ARM的應(yīng)用系統(tǒng)的各方面的知識(shí)。它既可作為學(xué)習(xí)ARM技術(shù)的培訓(xùn)材料,也可作為嵌入式系統(tǒng)開(kāi)發(fā)人員的參考手冊(cè)。 2. 本書的主要內(nèi)容 本書以可執(zhí)行的二進(jìn)制映像文件(Image)為中心,介紹基于ARM微處理器的嵌入式系統(tǒng)的開(kāi)發(fā)過(guò)程所涉及的知識(shí),主要包括以下幾部分。 * Image文件的“原材料”,包括*.c、*.h、*.obj、*.asm及*.lib文件。這些文件包括操作系統(tǒng),通常以*.lib形式提供,也有一些操作系統(tǒng)附屬的源代碼,可以為*.c、*.h、*.asm;BSP(其實(shí)也是操作系統(tǒng)的一部分,因?yàn)樗鼘?duì)于不同的計(jì)算機(jī)主板是不同的,這里將其單獨(dú)列出),它通常為*.c、*.h、*.asm;語(yǔ)言庫(kù)(如C語(yǔ)言運(yùn)行庫(kù)),通常為*.lib;用戶自己的應(yīng)用程序,通常為*.c、*.h、*.asm。 本書將對(duì)應(yīng)地介紹:ARM的體系結(jié)構(gòu);ARM的指令系統(tǒng);ARM匯編語(yǔ)言,對(duì)應(yīng)于*.asm文件;ARM C語(yǔ)言的獨(dú)到部分(與標(biāo)準(zhǔn)C相同的部分這里不做介紹),對(duì)應(yīng)于*.c;ARM的編程指南;ARM的編譯器使用。 本書還將介紹ARM公司提供的集成開(kāi)發(fā)環(huán)境CodeWarrior IDE的使用方法。 * Image文件各部分的組織方法以及在內(nèi)存中的安排。 本書將對(duì)應(yīng)地介紹ELF格式的映像文件的組成、ARM連接器的使用、程序在 ROM中的存放技術(shù)。 * Image文件中各部分的功能。 本書將對(duì)應(yīng)地介紹一個(gè)嵌入式系統(tǒng)各部分的功能,著重介紹系統(tǒng)啟動(dòng)部分的設(shè)計(jì)。這部分是嵌入式系統(tǒng)涉及的難點(diǎn),將通過(guò)一些實(shí)例來(lái)介紹。 * Image的調(diào)試。 本書主要介紹ARM公司的調(diào)試工具ADW的使用方法。同時(shí)將介紹嵌入式系統(tǒng)的基本調(diào)試方法。 3. 本書的結(jié)構(gòu)安排 全書包括14章。各章主要內(nèi)容說(shuō)明如下。 第1章簡(jiǎn)要介紹ARM公司的情況以及基于ARM技術(shù)的嵌入式系統(tǒng)的應(yīng)用情況,比較詳細(xì)地介紹當(dāng)前ARM體系結(jié)構(gòu)的主要版本,簡(jiǎn)要介紹目前ARM處理器的種類及其主要特點(diǎn)。通過(guò)這一章的介紹,讀者可以對(duì)ARM技術(shù)有一個(gè)總體的了解。 第2章介紹ARM編程模型的基本知識(shí)。主要包括ARM處理器模式、ARM體系中的寄存器及其使用方式、ARM體系中異常中斷處理的基本概念以及ARM體系中存儲(chǔ)訪問(wèn)的基本知識(shí)。通過(guò)這一章的介紹,讀者將了解ARM編程模型的基本知識(shí),為詳細(xì)了解ARM程序設(shè)計(jì)的各項(xiàng)技術(shù)打好基礎(chǔ)。 第3章詳細(xì)介紹ARM體系的指令系統(tǒng)以及尋址方式。將介紹ARM指令集和Thumb指令集各自的應(yīng)用領(lǐng)域。雖然沒(méi)有詳細(xì)介紹Thumb指令集,但并不是因?yàn)門humb指令集不重要,而是因?yàn)閺墓δ苌蟻?lái)講,它是ARM指令集的子集,在了解ARM指令集的基礎(chǔ)上很容易理解Thumb指令。介紹各指令的編碼格式、語(yǔ)法格式、執(zhí)行的操作以及應(yīng)用方法。最后將介紹一些常用的ARM指令代碼段,幫助用戶進(jìn)一步理解各指令的用法,積累一些ARM代碼設(shè)計(jì)的基本方法。 第4章介紹ARM匯編語(yǔ)言程序設(shè)計(jì)的基本方法以及ARM匯編器armasm的使用方法。其中包括ARM匯編語(yǔ)言中的偽操作(Directives)、宏指令(Pseudo-instruction)、匯編語(yǔ)言格式、armasm的使用方法以及一些匯編語(yǔ)言程序示例。通過(guò)這些介紹,讀者可以掌握ARM匯編語(yǔ)言設(shè)計(jì)的方法。 第5章介紹ARM體系的存儲(chǔ)系統(tǒng)。在一個(gè)嵌入式系統(tǒng)中,存儲(chǔ)系統(tǒng)是非常重要的一部分。這里將介紹ARM體系中用于存儲(chǔ)管理的協(xié)處理器CP15、存儲(chǔ)管理單元MMU、寫緩沖以及Cache、快速上下文切換技術(shù),還將介紹有關(guān)存儲(chǔ)系統(tǒng)的程序設(shè)計(jì)。并以LinkUp公司ARM處理器芯片L7210中的存儲(chǔ)系統(tǒng)為例,介紹ARM存儲(chǔ)系統(tǒng)的設(shè)計(jì)技術(shù)。其中沒(méi)有介紹存儲(chǔ)保護(hù)單元MPU,這是因?yàn)镸PU更簡(jiǎn)單,而MMU的應(yīng)用更為廣泛。該章對(duì)于虛擬存儲(chǔ)技術(shù)、緩沖技術(shù)以及Cache技術(shù)都將做比較詳細(xì)的介紹,使那些從事基于低端單片機(jī)應(yīng)用的開(kāi)發(fā)人員更容易理解ARM體系中存儲(chǔ)系統(tǒng)的設(shè)計(jì)技術(shù)。 第6章介紹ARM/Thumb過(guò)程調(diào)用的標(biāo)準(zhǔn)。為了能使單獨(dú)編譯的C語(yǔ)言程序和匯編程序之間能夠相互調(diào)用,必須為子程序間的調(diào)用制定一定的規(guī)則。ATPCS規(guī)定了ARM程序和Thumb程序中子程序調(diào)用的基本規(guī)則。這些基本規(guī)則包括子程序調(diào)用過(guò)程中寄存器的使用規(guī)則、數(shù)據(jù)棧的使用規(guī)則和參數(shù)的傳遞規(guī)則等。同時(shí),該章還將介紹支持?jǐn)?shù)據(jù)棧檢查的ATPCS以及與代碼/數(shù)據(jù)位置無(wú)關(guān)的ATPCS。 第7章介紹ARM程序和Thumb程序混合使用的方法。如果程序遵守支持ARM程序和Thumb程序混合使用的ATPCS,則程序中的ARM子程序和Thumb子程序可以相互調(diào)用。對(duì)于C/C++源程序而言,只要在編譯時(shí)指定-apcs /interwork選項(xiàng),編譯器生成的代碼就遵守支持ARM程序和Thumb程序混合使用的ATPCS。而對(duì)于匯編源程序而言,用戶必須保證編寫的代碼遵守支持ARM程序和Thumb程序混合使用的ATPCS。該章將介紹相關(guān)的選項(xiàng)和編程技術(shù)。 第8章介紹ARM匯編程序以及C/C++程序之間相互調(diào)用的技術(shù)。其中將介紹C編譯器中內(nèi)嵌的匯編器的使用方法。 第9章詳細(xì)介紹ARM體系中的異常中斷技術(shù)。其中包括異常中斷處理的處理過(guò)程,各種異常中斷處理的進(jìn)入和返回機(jī)制,在應(yīng)用程序中使用異常中斷處理的方法以及各種異常中斷的詳細(xì)使用技術(shù)。 第10章主要介紹ARM體系中C/C++語(yǔ)言程序設(shè)計(jì)的基本知識(shí)。其中包括ARM C/C++語(yǔ)言的一些特性、ARM C/C++編譯器的使用方法,以及ARM C/C++運(yùn)行時(shí)庫(kù)的使用方法。通過(guò)這些介紹,可以使讀者掌握開(kāi)發(fā)嵌入式C/C++應(yīng)用程序的基本知識(shí)和方法,進(jìn)一步了解嵌入式應(yīng)用系統(tǒng)的特點(diǎn)。 第11章介紹如何由目標(biāo)文件以及庫(kù)文件得到可執(zhí)行的映像文件。其中包括ELF格式的可執(zhí)行映像文件的組成、ARM連接器的使用方法,以及連接過(guò)程所執(zhí)行的各種操作。最后通過(guò)一些實(shí)例介紹在映像文件中各部分內(nèi)容的地址映射關(guān)系。 第12章介紹嵌入式應(yīng)用程序設(shè)計(jì)的基本知識(shí),然后通過(guò)幾個(gè)示例具體說(shuō)明嵌入式應(yīng)用程序的設(shè)計(jì)方法。對(duì)于每個(gè)示例,不僅詳細(xì)介紹程序設(shè)計(jì)的要點(diǎn),而且介紹如何使用ARM開(kāi)發(fā)工具編譯、連接這些程序,生成映像文件。該章是對(duì)前面幾章知識(shí)的綜合應(yīng)用。 第13章介紹CodeWarrior IDE集成開(kāi)發(fā)環(huán)境的使用方法。其中著重介紹在CodeWarrior IDE中工程項(xiàng)目的使用方法,以及生成目標(biāo)的設(shè)置方法。這些知識(shí)是使用CodeWarrior IDE進(jìn)行應(yīng)用程序開(kāi)發(fā)時(shí)最為重要的部分。 第14章介紹ARM體系的調(diào)試系統(tǒng)和ARM公司的高性能調(diào)試工具ADW的使用方法。ADW的功能非常多,本書并不是一本專門介紹ADW的書。因而只是介紹其中的一些基本功能和嵌入式系統(tǒng)的基本調(diào)試方法。 4. 閱讀本書時(shí)的注意事項(xiàng) 在嵌入式應(yīng)用系統(tǒng)的開(kāi)發(fā)技術(shù)中,涉及很多名詞術(shù)語(yǔ),本書主要使用在國(guó)內(nèi)單片機(jī)技術(shù)領(lǐng)域中通用的一些名詞術(shù)語(yǔ),但仍有一些ARM體系中特有的名詞術(shù)語(yǔ)較難翻譯。本書中有很多詞是按照其技術(shù)含義來(lái)表達(dá)的,而不是按單詞直接翻譯。同時(shí),對(duì)于一些名詞術(shù)語(yǔ),本書在括號(hào)內(nèi)給出了其英文名稱,便于讀者理解。 對(duì)于ARM指令系統(tǒng),本書給出了詳細(xì)的介紹,是希望該部分能作為編寫ARM匯編程序的開(kāi)發(fā)人員的參考資料,提高開(kāi)發(fā)人員的工作效率。 本書在編寫過(guò)程中,得到了ARM(上海)的大力支持,在此表示衷心的感謝。 作 者
第1章 ARM概述及其基本編程模型1
1.1 ARM技術(shù)的應(yīng)用領(lǐng)域及其特點(diǎn)1 1.2 ARM體系結(jié)構(gòu)的版本及命名方法2 1.2.1 ARM體系結(jié)構(gòu)的版本2 1.2.2 ARM體系的變種4 1.2.3 ARM/Thumb體系版本的命名 格式6 1.3 ARM處理器系列7 1.3.1 ARM7系列7 1.3.2 ARM9系列8 1.3.3 ARM9E系列9 1.3.4 ARM10E系列9 1.3.5 SecurCore系列10 1.4 ARM處理器的運(yùn)行模式11 1.5 ARM寄存器介紹11 1.5.1 通用寄存器12 1.5.2 程序狀態(tài)寄存器15 1.6 ARM體系的異常中斷17 1.6.1 ARM中異常中斷的種類17 1.6.2 ARM處理器對(duì)異常中斷的 響應(yīng)過(guò)程18 1.6.3 從異常中斷處理程序中返回19 1.7 ARM體系中的存儲(chǔ)系統(tǒng)19 1.7.1 ARM體系中的存儲(chǔ)空間19 1.7.2 ARM存儲(chǔ)器格式19 1.7.3 非對(duì)齊的存儲(chǔ)訪問(wèn)操作20 1.7.4 指令預(yù)取和自修改代碼21 第2章 ARM指令分類及其尋址方式22 2.1 ARM指令集概要介紹22 2.1.1 ARM指令的分類22 2.1.2 ARM指令的一般編碼格式22 2.1.3 ARM指令的條件碼域23 2.2 ARM指令的尋址方式24 2.2.1 數(shù)據(jù)處理指令的操作數(shù)的 尋址方式24 2.2.2 字及無(wú)符號(hào)字節(jié)的Load/Store 指令的尋址方式34 2.2.3 雜類Load/Store指令的 尋址方式46 2.2.4 批量Load/Store指令的 尋址方式52 2.2.5 協(xié)處理器Load/Store指令的 尋址方式56 第3章 ARM指令集介紹61 3.1 ARM指令集61 3.1.1 跳轉(zhuǎn)指令61 3.1.2 數(shù)據(jù)處理指令65 3.1.3 乘法指令78 3.1.4 雜類的算術(shù)指令84 3.1.5 狀態(tài)寄存器訪問(wèn)指令85 3.1.6 Load/Store內(nèi)存訪問(wèn)指令88 3.1.7 批量 Load/Store內(nèi)存訪問(wèn) 指令97 3.1.8 信號(hào)量操作指令102 3.1.9 異常中斷產(chǎn)生指令104 3.1.10 ARM協(xié)處理器指令106 3.2 一些基本的ARM指令功能段110 3.2.1 算術(shù)邏輯運(yùn)算指令的應(yīng)用111 3.2.2 跳轉(zhuǎn)指令的應(yīng)用112 3.2.3 Load/Store指令的應(yīng)用114 3.2.4 批量Load/Store指令的 應(yīng)用115 3.2.5 信號(hào)量指令的應(yīng)用116 3.2.6 與系統(tǒng)相關(guān)的一些指令 代碼段117 3.3 Thumb指令介紹120 第4章 ARM匯編語(yǔ)言程序設(shè)計(jì)122 4.1 偽操作122 4.1.1 符號(hào)定義偽操作122 4.1.2 數(shù)據(jù)定義偽操作126 4.1.3 匯編控制偽操作135 4.1.4 數(shù)據(jù)幀描述偽操作138 4.1.5 信息報(bào)告?zhèn)尾僮?39 4.1.6 其他的偽操作141 4.2 ARM匯編語(yǔ)言偽指令151 4.3 ARM匯編語(yǔ)言語(yǔ)句的格式153 4.3.1 ARM匯編語(yǔ)言中的符號(hào)154 4.3.2 ARM匯編語(yǔ)言中的表達(dá)式157 4.4 ARM匯編語(yǔ)言程序的格式162 4.4.1 匯編語(yǔ)言程序的格式162 4.4.2 匯編語(yǔ)言子程序的調(diào)用163 4.5 ARM匯編編譯器的使用164 4.6 匯編程序設(shè)計(jì)舉例166 4.6.1 ARM中偽操作的使用實(shí)例166 4.6.2 ARM匯編程序的實(shí)例169 第5章 ARM的存儲(chǔ)系統(tǒng)175 5.1 ARM存儲(chǔ)系統(tǒng)概述175 5.2 ARM中用于存儲(chǔ)管理的系統(tǒng)控制 協(xié)處理器CP15176 5.2.1 訪問(wèn)CP15寄存器的指令176 5.2.2 CP15中的寄存器178 5.3 存儲(chǔ)器管理單元MMU186 5.3.1 存儲(chǔ)器管理單元MMU 概述186 5.3.2 禁止/使能MMU188 5.3.3 MMU中的地址變換過(guò)程189 5.3.4 MMU中的存儲(chǔ)訪問(wèn)權(quán)限 控制198 5.3.5 MMU中的域199 5.3.6 關(guān)于快表的操作199 5.3.7 ARM中的存儲(chǔ)訪問(wèn)失效201 5.4 高速緩沖存儲(chǔ)器和寫緩沖區(qū)205 5.4.1 基本概念205 5.4.2 Cache的工作原理和地址映像 方法206 5.4.3 Cache的分類208 5.4.4 Cache的替換算法209 5.4.5 緩沖技術(shù)的使用注意事項(xiàng)210 5.4.6 存儲(chǔ)系統(tǒng)的一致性問(wèn)題211 5.4.7 Cache內(nèi)容鎖定213 5.4.8 與Cache和寫緩沖區(qū)相關(guān)的 編程接口214 5.5 快速上下文切換技術(shù)217 5.5.1 快速上下文切換技術(shù)原理217 5.5.2 快速上下文切換技術(shù)編程 接口219 5.6 與存儲(chǔ)系統(tǒng)相關(guān)的程序設(shè)計(jì)指南219 5.6.1 地址空間219 5.6.2 存儲(chǔ)器的格式220 5.6.3 非對(duì)齊的存儲(chǔ)訪問(wèn)操作221 5.6.4 指令預(yù)取和自修改代碼222 5.6.5 IMB223 5.6.6 存儲(chǔ)器映射的I/O空間224 5.7 ARM存儲(chǔ)系統(tǒng)的實(shí)例225 5.7.1 L7205的存儲(chǔ)系統(tǒng)概述225 5.7.2 L7205中的SDRAM226 5.7.3 L7205中的MMU235 第6章 ATPCS介紹242 6.1 ATPCS概述242 6.2 基本ATPCS242 6.2.1 寄存器的使用規(guī)則243 6.2.2 數(shù)據(jù)棧的使用規(guī)則244 6.2.3 參數(shù)傳遞規(guī)則245 6.3 幾種特定的ATPCS246 6.3.1 支持?jǐn)?shù)據(jù)棧限制檢查的 ATPCS246 6.3.2 支持只讀段位置無(wú)關(guān) (ROPI)的ATPCS248 6.3.3 支持可讀寫段位置無(wú)關(guān) (RWPI)的ATPCS248 6.3.4 支持ARM程序和Thumb程序 混合使用的ATPCS248 6.3.5 處理浮點(diǎn)運(yùn)算的ATPCS249 第7章 ARM程序和Thumb程序混合 使用250 7.1 概述250 7.2 在匯編語(yǔ)言程序中通過(guò)用戶代碼 支持interwork251 7.2.1 可以實(shí)現(xiàn)程序狀態(tài)切換的 指令251 7.2.2 與程序狀態(tài)切換相關(guān)的 偽操作254 7.2.3 進(jìn)行狀態(tài)切換的匯編程序 實(shí)例255 7.3 在C/C++程序中實(shí)現(xiàn)interwork256 7.4 在匯編語(yǔ)言程序中通過(guò)連接器 支持interwork259 7.4.1 利用veneers實(shí)現(xiàn)匯編程序間的 程序狀態(tài)切換259 7.4.2 利用veneers實(shí)現(xiàn)匯編程序 與C/C++程序間的程序狀態(tài) 切換261 第8章 C/C++以及匯編語(yǔ)言的混合 編程263 8.1 內(nèi)嵌匯編器的使用263 8.1.1 內(nèi)嵌的匯編指令用法263 8.1.2 內(nèi)嵌的匯編器和armasm的 區(qū)別265 8.1.3 在C/C++程序中使用內(nèi)嵌的 匯編指令265 8.1.4 內(nèi)嵌匯編指令的應(yīng)用舉例267 8.2 從匯編程序中訪問(wèn)C程序變量270 8.3 匯編程序、C程序以及C++程序的 相互調(diào)用271 8.3.1 在C++程序中使用C程序 頭文件271 8.3.2 匯編程序、C程序以及C++ 程序的相互調(diào)用舉例272 第9章 異常中斷處理276 9.1 ARM中的異常中斷處理概述276 9.1.1 ARM體系中的異常中斷 種類276 9.1.2 異常中斷向量表及異常中斷 優(yōu)先級(jí)277 9.1.3 異常中斷使用的寄存器278 9.2 進(jìn)入和退出異常中斷的過(guò)程279 9.2.1 ARM處理器對(duì)異常中斷的 響應(yīng)過(guò)程279 9.2.2 從異常中斷處理程序中 返回282 9.3 在應(yīng)用程序中安排異常中斷處理 程序285 9.3.1 在系統(tǒng)復(fù)位時(shí)安排異常中斷 處理程序285 9.3.2 在C程序中安排異常中斷 處理程序286 9.4 SWI異常中斷處理程序288 9.4.1 SWI異常中斷處理程序的 實(shí)現(xiàn)288 9.4.2 SWI異常中斷調(diào)用292 9.5 FIQ和IRQ異常中斷處理程序297 9.5.1 IRQ/FIQ異常中斷處理 程序298 9.5.2 IRQ異常中斷處理程序 舉例300 9.6 復(fù)位異常中斷處理程序302 9.7 未定義指令異常中斷302 9.8 指令預(yù)取中止異常中斷處理程序303 9.9 數(shù)據(jù)訪問(wèn)中止異常中斷處理程序303 第10章 ARM C/C++編譯器304 10.1 ARM C/C++編譯器概述304 10.1.1 ARM C/C++編譯器及語(yǔ)言庫(kù) 介紹304 10.1.2 ARM編譯器中與搜索路徑 相關(guān)的一些基本概念305 10.2 ARM編譯器命令行格式306 10.2.1 過(guò)程調(diào)用標(biāo)準(zhǔn)307 10.2.2 設(shè)置源程序語(yǔ)言類型308 10.2.3 指定搜索路徑309 10.2.4 設(shè)置預(yù)處理選項(xiàng)309 10.2.5 設(shè)置輸出文件的類型310 10.2.6 指定目標(biāo)處理器和ARM 體系版本311 10.2.7 生成調(diào)試信息312 10.2.8 代碼生成的控制313 10.2.9 控制警告信息的產(chǎn)生315 10.2.10 編譯時(shí)進(jìn)行的一些額外的 檢查317 10.2.11 控制錯(cuò)誤信息318 10.3 ARM編譯器中的pragmas319 10.4 ARM編譯器特定的關(guān)鍵詞321 10.4.1 用于聲明函數(shù)的關(guān)鍵詞321 10.4.2 用于聲明變量的關(guān)鍵詞333 10.4.3 用于限定數(shù)據(jù)類型的 關(guān)鍵詞333 10.5 ARM編譯器支持的基本數(shù)據(jù) 類型335 10.6 ARM編譯器中的預(yù)定義宏337 10.7 ARM中的C/C++庫(kù)339 10.7.1 ARM中的C/C++運(yùn)行時(shí)庫(kù) 概述339 10.7.2 建立一個(gè)包含C/C++運(yùn)行時(shí) 庫(kù)的C/C++應(yīng)用程序340 10.7.3 建立不包含C運(yùn)行時(shí)庫(kù)的 應(yīng)用程序344 10.7.4 裁減C/C++運(yùn)行時(shí)庫(kù)以適應(yīng) 特定的目標(biāo)運(yùn)行環(huán)境345 第11章 ARM連接器347 11.1 ARM映像文件347 11.1.1 ARM映像文件的組成347 11.1.2 ARM映像文件的入口點(diǎn)349 11.1.3 輸入段的排序規(guī)則350 11.2 ARM連接器介紹351 11.3 ARM連接器生成的符號(hào)353 11.3.1 連接器生成的與域相關(guān)的 符號(hào)353 11.3.2 連接器生成的與輸出段相關(guān)的 符號(hào)354 11.3.3 連接器生成的與輸入段相關(guān)的 符號(hào)354 11.4 連接器的優(yōu)化功能354 11.5 運(yùn)行時(shí)庫(kù)的使用355 11.5.1 C/C++運(yùn)行時(shí)庫(kù)與目標(biāo) 文件356 11.5.2 查找需要的C/C++ 運(yùn)行時(shí)庫(kù)356 11.5.3 選擇合適種類的C/C++ 運(yùn)行時(shí)庫(kù)357 11.5.4 掃描C/C++運(yùn)行時(shí)庫(kù)359 11.6 從一個(gè)映像文件中使用另一個(gè)映像 文件中的符號(hào)359 11.6.1 symdefs文件359 11.6.2 建立symdefs文件361 11.6.3 symdefs文件的使用361 11.7 隱藏或者重命名全局符號(hào)362 11.7.1 steering文件的格式362 11.7.2 steering文件中的命令362 11.8 ARM連接器的命令行選項(xiàng)363 11.9 使用scatter文件定義映像文件的 地址映射371 11.9.1 scatter文件概述371 11.9.2 scatter文件中各部分的 介紹373 11.9.3 scatter文件使用舉例376 第12章 嵌入式應(yīng)用程序示例384 12.1 嵌入式應(yīng)用程序設(shè)計(jì)的基本知識(shí)384 12.1.1 嵌入式應(yīng)用系統(tǒng)中的存儲(chǔ) 映射384 12.1.2 系統(tǒng)初始化385 12.2 使用semihosting的C語(yǔ)言程序 示例388 12.2.1 源程序分析388 12.2.2 生成映像文件391 12.3 一個(gè)嵌入式應(yīng)用系統(tǒng)示例392 12.3.1 源程序分析393 12.3.2 生成映像文件400 12.3.3 本例中地址映射模式401 12.4 進(jìn)行ROM/RAM地址重映射的 嵌入式應(yīng)用系統(tǒng)401 12.4.1 地址映射模式401 12.4.2 源程序分析403 12.4.3 生成映像文件404 12.5 一個(gè)嵌入式操作系統(tǒng)示例405 第13章 使用CodeWarrior412 13.1 CodeWarrior for ARM概述412 13.2 簡(jiǎn)單工程項(xiàng)目的使用413 13.2.1 工程項(xiàng)目窗口413 13.2.2 簡(jiǎn)單工程項(xiàng)目的使用416 13.3 配置生成目標(biāo)424 13.3.1 Debug Settings對(duì)話框 介紹424 13.3.2 設(shè)置生成目標(biāo)的基本選項(xiàng)425 13.3.3 匯編器選項(xiàng)的設(shè)置430 13.3.4 編譯器的選項(xiàng)設(shè)置435 13.3.5 連接器的選項(xiàng)設(shè)置443 13.3.6 fromELF工具的選項(xiàng)設(shè)置449 13.4 復(fù)雜工程項(xiàng)目的使用451 13.4.1 建立一個(gè)新的生成目標(biāo)451 13.4.2 將一個(gè)生成目標(biāo)更名453 13.4.3 建立生成目標(biāo)之間的依賴 關(guān)系453 13.4.4 子工程項(xiàng)目的使用455 13.5 工程項(xiàng)目模板456 13.5.1 ADS中工程項(xiàng)目模板的 使用457 13.5.2 建立用戶工程項(xiàng)目模板461 13.6 編譯和連接工程項(xiàng)目461 13.6.1 編譯文件462 13.6.2 生成工程項(xiàng)目463 第14章 ARM體系中的調(diào)試方法465 14.1 ARM體系中的調(diào)試系統(tǒng)概述465 14.2 基于Angel的調(diào)試系統(tǒng)466 14.2.1 基于Angel的調(diào)試系統(tǒng)的 概述466 14.2.2 使用Angel開(kāi)發(fā)應(yīng)用程序469 14.2.3 Angel執(zhí)行的操作474 14.2.4 將Angel移植到特定的目標(biāo) 系統(tǒng)476 14.3 基于JTAG的調(diào)試系統(tǒng)495 14.3.1 基于JTAG的調(diào)試系統(tǒng)的 特點(diǎn)495 14.3.2 基于JTAG的調(diào)試系統(tǒng) 結(jié)構(gòu)495 14.3.3 目標(biāo)系統(tǒng)中的調(diào)試功能擴(kuò)展 部件496 14.3.4 基于JTAG的調(diào)試過(guò)程498 14.4 ADW使用介紹498 14.4.1 ADW概述498 14.4.2 ADW中的窗口501 14.4.3 ADW使用介紹505 參考文獻(xiàn)513
其中的符號(hào)及參數(shù)說(shuō)明如下。
。菏侵噶钪浄,如ADD表示算術(shù)加操作指令。 {}:表示指令執(zhí)行的條件。 {S}:決定指令的操作是否影響CPSR的值。 。罕硎灸繕(biāo)寄存器。 。罕硎景1個(gè)操作數(shù)的寄存器。 。罕硎镜2個(gè)操作數(shù)。 通常有下面3種格式。 (1) 立即數(shù)方式。每個(gè)立即數(shù)由一個(gè)8位的常數(shù)循環(huán)右移偶數(shù)位得到。其中循環(huán)右移的位數(shù)由一個(gè)4位二進(jìn)制的兩倍表示。如果立即數(shù)記作,8位常數(shù)記作immed_8,4位的循環(huán)右移值記作rotate_imm,則有: = immed_8循環(huán)右移(2*rotate_imm) 這樣并不是每一個(gè)32位的常數(shù)都是合法的立即數(shù),只有能夠通過(guò)上面構(gòu)造方法得到的才是合法的立即數(shù)。下面的常數(shù)是合法的立即數(shù):
你還可能感興趣
我要評(píng)論
|