




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 嵌入式系統(tǒng)原理與接口技術(shù)嵌入式系統(tǒng)原理與接口技術(shù) 山東大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院賈智平2005-7-272內(nèi)容簡(jiǎn)介 以目前流行的ARM嵌入式微處理器、嵌入式Linux作為主要內(nèi)容,從嵌入式系統(tǒng)基本原理、系統(tǒng)設(shè)計(jì),到抽象出研究嵌入式系統(tǒng)的技術(shù)途徑進(jìn)行了較深入闡述。其內(nèi)容包括了嵌入式處理器原理、匯編語言、系統(tǒng)設(shè)計(jì)與軟件開發(fā)、計(jì)算機(jī)接口技術(shù)與應(yīng)用等方面的知識(shí),并通過實(shí)例講解嵌入式系統(tǒng)設(shè)計(jì)過程和原理。3章節(jié)安排章節(jié)安排第1章:嵌入式系統(tǒng)的基礎(chǔ)知識(shí)第2章:ARM處理器技術(shù)第3章:ARM指令集Thumb指令集第4章:ARM匯編程序設(shè)計(jì)技術(shù)第5章:介紹實(shí)用的外圍接口設(shè)計(jì)與開發(fā)技術(shù)第6章:介紹嵌入式系統(tǒng)的設(shè)
2、計(jì)流程和設(shè)計(jì)方法第7章:介紹基于S3C44B0X的嵌入式實(shí)驗(yàn)開發(fā)系統(tǒng)4第第 1 章章 嵌入式系統(tǒng)概述嵌入式系統(tǒng)概述本章主要內(nèi)容:嵌入式系統(tǒng)的概念、發(fā)展、特點(diǎn)、組成、分類 嵌入式微處理器系列嵌入式系統(tǒng)中信息表示與運(yùn)算基礎(chǔ) 評(píng)估嵌入式系統(tǒng)處理器的主要指標(biāo)嵌入式系統(tǒng)的應(yīng)用5 嵌入式系統(tǒng)的概念嵌入式系統(tǒng)的概念第一種,根據(jù)IEEE(國(guó)際電氣和電子工程師協(xié)會(huì))的定義: 嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”(原文為devices used to control, monitor, or assist the operation of equipment, machinery or pl
3、ants)。n第二種,嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。 6 嵌入式系統(tǒng)的發(fā)展史嵌入式系統(tǒng)的發(fā)展史n第一階段是以單芯片為核心的可編程控制器形式的系統(tǒng);n第二階段是以嵌入式CPU為基礎(chǔ)、以簡(jiǎn)單操作系統(tǒng)為核心的嵌入式系統(tǒng);n第三階段是以嵌入式操作系統(tǒng)為標(biāo)志的嵌入式系統(tǒng);n第四階段是以Internet為標(biāo)志的嵌入式系統(tǒng) 。7 嵌嵌入式系統(tǒng)的特點(diǎn)入式系統(tǒng)的特點(diǎn)n通常是面向特定應(yīng)用的;n空間和各種資源相對(duì)不足,必須高效率地設(shè)計(jì),量體裁衣、去除冗余; n產(chǎn)品升級(jí)換代和具體產(chǎn)品同步,具有較長(zhǎng)的生命周期; n軟件一般都固化在存
4、儲(chǔ)器芯片或單片機(jī)本身; n不具備自舉開發(fā)能力 ,必須有一套開發(fā)工具和環(huán)境才能進(jìn)行開發(fā)8 嵌嵌入式系統(tǒng)的分類入式系統(tǒng)的分類 根據(jù)嵌入式系統(tǒng)的復(fù)雜程度,可以將嵌入式系統(tǒng)分為以下4類 :?jiǎn)蝹€(gè)微處理器 。常用的嵌入式處理器如Philips的89LPCxxx系列,Motorola的MC68HC05、08系列等。 嵌入式處理器可擴(kuò)展的系統(tǒng) 。過程控制、信號(hào)放大器、位置傳感器及閥門傳動(dòng)器。 復(fù)雜的嵌入式系統(tǒng)。開關(guān)裝置、控制器、電話交換機(jī)、電梯、數(shù)據(jù)采集系統(tǒng)、醫(yī)藥監(jiān)視系統(tǒng)、診斷及實(shí)時(shí)控制系統(tǒng)等 。在制造或過程控制中使用的計(jì)算機(jī)系統(tǒng) 。自動(dòng)倉儲(chǔ)系統(tǒng)和自動(dòng)發(fā)貨系統(tǒng) 9 嵌入式處理器嵌入式處理器10 嵌入式系統(tǒng)的組
5、成嵌入式系統(tǒng)的組成1.嵌入式系統(tǒng)的硬件 11 嵌入式系統(tǒng)的組成嵌入式系統(tǒng)的組成2. 嵌入式系統(tǒng)的軟件嵌入式操作系統(tǒng) 通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、圖形界面、標(biāo)準(zhǔn)化瀏覽器等。具有編碼體積小,面向應(yīng)用,可裁剪和移植,實(shí)時(shí)性強(qiáng),可靠性高,專用性強(qiáng)等特點(diǎn)。相應(yīng)的各種應(yīng)用程序 12 嵌入式系統(tǒng)的組成嵌入式系統(tǒng)的組成3嵌入式系統(tǒng)的開發(fā)工具和開發(fā)系統(tǒng) 開發(fā)工具一般用于開發(fā)主機(jī),包括語言編譯器、連接定位器、調(diào)試器等。 v注意:嵌入式系統(tǒng)的硬件和軟件位于嵌入式系統(tǒng)產(chǎn)品本身,開發(fā)工具則獨(dú)立于嵌入式系統(tǒng)產(chǎn)品之外 。13計(jì)算機(jī)中數(shù)的表示計(jì)算機(jī)中數(shù)的表示帶符號(hào)數(shù)與無符號(hào)數(shù) 一般用最
6、高有效位來表示數(shù)的符號(hào),正數(shù)用0表示,負(fù)數(shù)用1來表示。原碼、補(bǔ)碼和反碼 原碼表示的數(shù)比較直觀。8位二進(jìn)制原碼表示的數(shù)的范圍是-127+127,16位二進(jìn)制原碼表示的數(shù)的范圍是-32767+32767 正數(shù)的補(bǔ)碼仍與原碼相同,一個(gè)負(fù)數(shù)的補(bǔ)碼,最高有效位為1,其余幾位按原碼各位求反,最末位加1 正數(shù)的反碼表示與原碼相同,負(fù)數(shù)的反碼表示為該數(shù)的原碼除符號(hào)位外按位取反 。 14 非數(shù)值數(shù)據(jù)編碼非數(shù)值數(shù)據(jù)編碼n非數(shù)值數(shù)據(jù)是指不能進(jìn)行算術(shù)運(yùn)算的數(shù)據(jù)。一般包括字符、漢字、聲音等。 字符編碼。字符包括大小寫英文字母、數(shù)字、運(yùn)算符、標(biāo)點(diǎn)符號(hào)等 ,最常用的是ASCII碼。漢字編碼 。漢字的內(nèi)碼是計(jì)算機(jī)內(nèi)部處理和存
7、儲(chǔ)漢字時(shí)使用的代碼。GB231280國(guó)家標(biāo)準(zhǔn)信息交換用漢字編碼(簡(jiǎn)稱國(guó)標(biāo)碼)。語音編碼。語音信號(hào)是模擬信號(hào),語音的編解碼就是將語音的模擬信號(hào)轉(zhuǎn)換為二進(jìn)制數(shù)字信號(hào)在計(jì)算機(jī)中處理、傳輸,到了接收端,再將數(shù)字信號(hào)還原為模擬語音。15 差錯(cuò)控制編碼差錯(cuò)控制編碼n基本思想:在發(fā)送端被傳送的信息碼序列的基礎(chǔ)上,加入若干“監(jiān)督碼元”后進(jìn)行傳輸,這些碼元與原來的信息碼序列之間存在著某種確定的約束關(guān)系。在接收數(shù)據(jù)時(shí),檢驗(yàn)信息碼元與監(jiān)督碼元之間的既定的約束關(guān)系。n幾種常用的差錯(cuò)控制編碼:奇偶校驗(yàn)碼海明碼 循環(huán)冗余校驗(yàn)碼16 評(píng)估嵌入式系統(tǒng)處理器的主要指標(biāo)評(píng)估嵌入式系統(tǒng)處理器的主要指標(biāo)n要先明確預(yù)期最終應(yīng)用程序在待
8、選平臺(tái)上的運(yùn)行情況和測(cè)試目的,然后再挑選符合要求的特定測(cè)試向量。MIPS測(cè)試基準(zhǔn)。測(cè)試方法是計(jì)算在單位時(shí)間內(nèi)各類指令的平均執(zhí)行條數(shù),單位:MIPS。Dhrystone。測(cè)試基準(zhǔn)是一個(gè)簡(jiǎn)單的C語言程序。EEMBC驗(yàn)證實(shí)驗(yàn)室研究指出,Dhrystone不適于作為嵌入式系統(tǒng)的測(cè)試向量。雖然它是市面上最普遍適用的測(cè)試向量,但它有許多漏洞。EEMBC?;诿棵腌娝惴▓?zhí)行的次數(shù)和編譯代碼大小的統(tǒng)計(jì)結(jié)果 。n一次詳盡的分析需要仔細(xì)衡量的因素包括:性能分析、功耗和效率分析、開發(fā)工具支持以及價(jià)格 17 嵌入式系統(tǒng)的應(yīng)用嵌入式系統(tǒng)的應(yīng)用嵌入式移動(dòng)數(shù)據(jù)庫;嵌入式系統(tǒng)在智能家居網(wǎng)絡(luò)中的應(yīng)用;嵌入式語音芯片;基于小范圍
9、無線通信協(xié)議的嵌入式產(chǎn)品;其它工控和仿真領(lǐng)域 。18 第第 2 2 章章 ARMARM微處理器硬件結(jié)構(gòu)微處理器硬件結(jié)構(gòu) 本章主要內(nèi)容:計(jì)算機(jī)體系結(jié)構(gòu)分類ARM版本及系列ARM處理器結(jié)構(gòu)存儲(chǔ)系統(tǒng)機(jī)制19 計(jì)算機(jī)體系結(jié)構(gòu)計(jì)算機(jī)體系結(jié)構(gòu)1.馮諾依曼結(jié)構(gòu)20 計(jì)算機(jī)體系結(jié)構(gòu)計(jì)算機(jī)體系結(jié)構(gòu)2. 哈佛體系結(jié)構(gòu) 21 ARM簡(jiǎn)介簡(jiǎn)介 ARM(Advanced RISC Machines)系列微處理器,采用的ARM技術(shù)知識(shí)產(chǎn)權(quán)(IP)核都是由ARM公司提供的。 ARM公司本身不生產(chǎn)芯片,轉(zhuǎn)讓設(shè)計(jì)許可,由合作公司生產(chǎn)各具特色的芯片。 ARM32位體系結(jié)構(gòu)目前被公認(rèn)為是嵌入式應(yīng)用領(lǐng)域領(lǐng)先的32位嵌入式RISC微處
10、理器結(jié)構(gòu)。從版本1到版本6,ARM體系的指令集功能不斷擴(kuò)大。 22ARM處理器系列處理器系列ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Inter的XscaleInter的StrongARM23 ARM處理器結(jié)構(gòu)處理器結(jié)構(gòu)從一下四個(gè)方面介紹:ARM和Thumb狀態(tài) RISC技術(shù)流水線技術(shù)超標(biāo)量執(zhí)行 24 ARM和和Thumb狀態(tài)狀態(tài) qV4版以后有:32位ARM指令集16位Thumb指令集,功能是ARM指令集的功能子集。qARM7TDMI核以后,T變種的ARM微處理器有兩種工作狀態(tài):ARM狀態(tài)Thumb狀態(tài)。25 ARM與與Thumb狀態(tài)轉(zhuǎn)換狀態(tài)轉(zhuǎn)換 在程序的執(zhí)
11、行過程中,微處理器可以隨時(shí)在兩種工作狀態(tài)之間切換,并且該轉(zhuǎn)變不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。 進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為1時(shí),執(zhí)行BX指令。 進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位(位0)為0時(shí),執(zhí)行BX指令。26 RISC技術(shù)技術(shù) RISC體系結(jié)構(gòu)基本特點(diǎn):大多數(shù)指令只需要執(zhí)行簡(jiǎn)單和基本的功能,其執(zhí)行過程在一個(gè)機(jī)器周期內(nèi)完成。只保留加載/存儲(chǔ)指令。操作數(shù)由加載/存儲(chǔ)指令從存儲(chǔ)器取出放寄存器內(nèi)操作。芯片邏輯不采用或少采用微碼技術(shù),而采用硬布線邏輯。減少指令數(shù)和尋址方式。 指令格式固定,指令譯碼簡(jiǎn)化。優(yōu)化編譯。 27 RISC技術(shù)技術(shù)ARM體系結(jié)構(gòu)還采用了一
12、些特別的技術(shù):所有的指令都可根據(jù)前面的執(zhí)行結(jié)果決定是否被執(zhí)行,提高了指令的執(zhí)行效率??捎肔oad/Store指令批量傳輸數(shù)據(jù),以提高數(shù)據(jù)的傳輸效率。可在一條數(shù)據(jù)處理指令中同時(shí)完成邏輯處理和移位處理。28 流水線技術(shù)流水線技術(shù)1ARM的3級(jí)流水線 29 流水線技術(shù)流水線技術(shù)多周期ARM指令的3級(jí)流水線操作 30 流水線技術(shù)流水線技術(shù)2ARM的流水線設(shè)計(jì)問題 (1)縮短程序執(zhí)行時(shí)間: 提高時(shí)鐘頻率fclk減少每條指令的平均時(shí)鐘周期數(shù)CPI (2)解決流水線相關(guān):結(jié)構(gòu)相關(guān) 數(shù)據(jù)相關(guān) 控制相關(guān) 31 流水線技術(shù)流水線技術(shù)3ARM的5級(jí)流水線 ARM9和StrongARM架構(gòu)都采用了5級(jí)流水線.增加了I
13、-Cache和D-Cache,把存儲(chǔ)器的取指與數(shù)據(jù)存取分開;增加了數(shù)據(jù)寫回的專門通路和寄存器; 把指令的執(zhí)行過程分割為5部分: 取指-指令譯碼-執(zhí)行-數(shù)據(jù)緩存-寫回 32 超標(biāo)量執(zhí)行超標(biāo)量執(zhí)行 通過重復(fù)設(shè)置多套指令執(zhí)行部件,同時(shí)處理并完成多條指令,實(shí)現(xiàn)并行操作,來達(dá)到提高處理速度的目的。所有ARM內(nèi)核,包括流行的ARM7、ARM9和ARM11等,都是單周期指令機(jī)。ARM公司下一代處理器將是每周期能處理多重指令的超標(biāo)量機(jī)。 但是,超標(biāo)量處理器在執(zhí)行的過程中必須動(dòng)態(tài)地檢查指令相關(guān)性如果代碼中有分支指令。33 存儲(chǔ)器部件的分類存儲(chǔ)器部件的分類 n按在系統(tǒng)中的地位分類: “主存儲(chǔ)器”(Main Mem
14、ory, 簡(jiǎn)稱內(nèi)存或主存) “輔助存儲(chǔ)器”(Auxiliary Memory,Secondary Memory,簡(jiǎn)稱輔存或外存) n按存儲(chǔ)介質(zhì)分類:磁存儲(chǔ)器(Magnetic Memory),半導(dǎo)體集成電路存儲(chǔ)器(通常稱為半導(dǎo)體存儲(chǔ)器),光存儲(chǔ)器(Optical Memory),激光光盤存儲(chǔ)器(Laser Optical Disk)n按信息存取方式分類:隨機(jī)存取存儲(chǔ)器RAM只讀存儲(chǔ)器ROM 34 存儲(chǔ)器的組織和結(jié)構(gòu)存儲(chǔ)器的組織和結(jié)構(gòu) n嵌入式存儲(chǔ)器一般采用存儲(chǔ)密度較大的存儲(chǔ)器芯片,典型的嵌入式存儲(chǔ)器系統(tǒng)由ROM、RAM、EPROM等組成。 35存儲(chǔ)器的性能存儲(chǔ)器的性能 大容量、高速度、低價(jià)格是
15、評(píng)價(jià)存儲(chǔ)器性能的三個(gè)主要指標(biāo),也是存儲(chǔ)體系設(shè)計(jì)的主要目標(biāo)。 容量:SwWlm。其中W為存儲(chǔ)體的字長(zhǎng)(單位為位或字節(jié)),l為單個(gè)存儲(chǔ)體的字?jǐn)?shù),m為并行工作的存儲(chǔ)體個(gè)數(shù)。 速度:m個(gè)存儲(chǔ)體并行工作時(shí),可達(dá)到的最大頻率寬度為BmWmTM 。其中TM是連續(xù)起動(dòng)一個(gè)存儲(chǔ)器所必要的時(shí)間間隔,TMTA。Bm是連續(xù)提供數(shù)據(jù)的速率。價(jià)格:具有SM位的存儲(chǔ)器,每位價(jià)格表示為c=CSm。其中C是總價(jià)格。36 存儲(chǔ)體系的組成存儲(chǔ)體系的組成單體單字存儲(chǔ)器單體多字存儲(chǔ)器 多體單字交叉存取存儲(chǔ)器多體多字交叉存取存儲(chǔ)器一般把這些能并行讀出多個(gè)CPU字的單體多字和多體單字及多體多字的交叉存取系統(tǒng),統(tǒng)稱為并行主存系統(tǒng)。 37 存
16、儲(chǔ)體系的形式存儲(chǔ)體系的形式 (a)兩級(jí)存儲(chǔ)器層次結(jié)構(gòu) (b)三級(jí)存儲(chǔ)器層次結(jié)構(gòu) 38 總線結(jié)構(gòu)總線結(jié)構(gòu)n1.總線協(xié)議 :四周期握手協(xié)議 39 總線結(jié)構(gòu)總線結(jié)構(gòu)n2.總線讀寫 40 總線結(jié)構(gòu)總線結(jié)構(gòu)3總線的時(shí)序圖41 總線結(jié)構(gòu)總線結(jié)構(gòu)4直接內(nèi)存訪問(DMA) 42 總線結(jié)構(gòu)總線結(jié)構(gòu)5系統(tǒng)總線配置 多總線系統(tǒng)43 ARM存儲(chǔ)數(shù)據(jù)類型存儲(chǔ)數(shù)據(jù)類型ARM處理器支持以下六種數(shù)據(jù)類型: 8位有符號(hào)和無符號(hào)字節(jié)。16位有符號(hào)和無符號(hào)半字,以2字節(jié)的邊界對(duì)齊。32位有符號(hào)和無符號(hào)字,以4字節(jié)的邊界對(duì)齊。44 ARM存儲(chǔ)格式存儲(chǔ)格式 大端存儲(chǔ)模式 小端存儲(chǔ)模式(缺省)45 存儲(chǔ)器接口存儲(chǔ)器接口1.存儲(chǔ)周期的基本
17、類型:空閑周期非順序周期順序周期協(xié)處理器寄存器傳送周期 46 存儲(chǔ)器接口存儲(chǔ)器接口2.ARM的總線接口信號(hào)分成4類(以ARM7TDMI為例說明):時(shí)鐘和時(shí)鐘控制信號(hào):MCLK、ECLK、nRESET、nWAIT。地址類信號(hào):A31.0、nRW、MAS1.0、nOPC、nTRANS、LOCK、TBIT。存儲(chǔ)器請(qǐng)求信號(hào):nMREQ、SEQ。數(shù)據(jù)時(shí)序信號(hào):D31.0、DIN31.0、DOUT31.0、ABORT、BL3.0。47 存儲(chǔ)器接口存儲(chǔ)器接口3. ARM的總線接口可以實(shí)現(xiàn)4種不同類型的總線周期。48 高速緩沖存儲(chǔ)器高速緩沖存儲(chǔ)器1.分類:統(tǒng)一Cache VS 獨(dú)立的數(shù)據(jù)/程序Cache寫通c
18、ache VS 寫回cache讀操作分配cache VS 寫操作分配cache49 高速緩沖存儲(chǔ)器高速緩沖存儲(chǔ)器2.工作原理:50 高速緩沖存儲(chǔ)器高速緩沖存儲(chǔ)器3.地址映像和變換方式:全相聯(lián)地址映像和變換組相聯(lián)地址映像和變換直接映像和變換 51 高速緩沖存儲(chǔ)器高速緩沖存儲(chǔ)器4.Cache的替換算法:輪轉(zhuǎn)法隨機(jī)替換算法 52 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU1.在ARM系統(tǒng)中,存儲(chǔ)管理單元MMU主要完成工作:虛擬存儲(chǔ)空間到物理存儲(chǔ)空間的映射。在ARM中采用了頁式虛擬存儲(chǔ)管理。存儲(chǔ)器訪問權(quán)限的控制。 設(shè)置虛擬存儲(chǔ)空間的緩沖的特性。53 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (1)2.存儲(chǔ)訪問過程使能MMU
19、時(shí)存儲(chǔ)訪問過程 :54 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (2)禁止MMU時(shí)存儲(chǔ)訪問過程: 先要確定芯片是否支持cache和write buffer。如果芯片規(guī)定當(dāng)禁止MMU時(shí)禁止cache和write buffer,則存儲(chǔ)訪問將不考慮C和B控制位。如果芯片規(guī)定當(dāng)禁止MMU時(shí)可以使能cache和write buffer,則數(shù)據(jù)訪問時(shí),C=0,B=0;指令讀取時(shí),如果使用分開的TLB,那么C=1,如果使用統(tǒng)一的TLB,那么C=0。 存儲(chǔ)訪問不進(jìn)行權(quán)限控制,MMU也不會(huì)產(chǎn)生存儲(chǔ)訪問中止信號(hào)。 所有的物理地址和虛擬地址相等,即使用平板存儲(chǔ)模式。55 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (1)3. MMU中
20、的地址變換過程:通過兩級(jí)頁表實(shí)現(xiàn)。a)一級(jí)頁表中包含有以段為單位的地址變換條目以及指向二級(jí)頁表的指針。一級(jí)頁表是實(shí)現(xiàn)的地址映射粒度較大。以段為單位的地址變換過程只需要一級(jí)頁表。b)二級(jí)頁表中包含有以大頁和小頁為單位的地址變換條目。有一種類型的二級(jí)頁表還包含有以極小頁為單位的地址變換條目。以頁為單位的地址變換過程需要二級(jí)頁表。 56 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (2)一級(jí)頁表的地址變換過程 :57 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (1)4.一級(jí)描述符: 從頁表中得到的相應(yīng)地址變換條目稱為一級(jí)描述符。它定義了與之相應(yīng)的1M存儲(chǔ)空間是如何映射的。一級(jí)描述符的位1:0定義了該一級(jí)描述符的類型,共有
21、4種格式的一級(jí)描述符: 58 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (2)1)粗粒度頁表描述符:當(dāng)一級(jí)描述符的位1.0為0b01(0b代表二進(jìn)制)時(shí),該一級(jí)描述符中包含了粗粒度的二級(jí)頁表的物理地址,這種一級(jí)描述符稱為粗粒度頁表描述符。它的格式和各個(gè)字段的含義如下: 59 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (3)由粗粒度頁表描述符獲取二級(jí)描述符的過程 :60 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (4)2)段描述符:當(dāng)一級(jí)描述符的位1:0為0b10時(shí),該一級(jí)描述符為段描述符,它的格式和各個(gè)字段的含義如下:61 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (5)基于段的地址變換過程 :62 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU
22、(6)3)細(xì)粒度頁表描述符:當(dāng)一級(jí)描述符的位1:0為0b11時(shí),該一級(jí)描述符中包含了細(xì)粒度的二級(jí)頁表的物理地址,稱為細(xì)粒度頁表描述符。它的格式和各個(gè)字段的含義如下:63 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU (7)由細(xì)粒度頁表描述符獲取二級(jí)描述符的過程 64 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU 5.MMU中的存儲(chǔ)訪問權(quán)限控制65 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU 6. MMU中的域(Domain) MMU中的域指的是一些段、大頁或者小頁的集合。ARM支持最多16個(gè)域,每個(gè)域的訪問控制特性都是由CP15中的寄存器C3中的兩位來控制的。這兩位的字段編碼和含義: 66 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU 7.快速上
23、下文切換技術(shù) 快速上下文切換技術(shù)FCSE(Fast Context Switch Extension)通過修改系統(tǒng)中不同進(jìn)程的虛擬地址,避免在進(jìn)行進(jìn)程間切換時(shí)造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。 FCSE位于CPU和MMU之間,其責(zé)任就是將不同進(jìn)程使用的相同虛擬地址映射為不同的虛擬空間,使得在上下文切換時(shí)無需重建TLB等。67 存儲(chǔ)管理單元存儲(chǔ)管理單元MMU 8.存儲(chǔ)器映射的輸入/輸出 在ARM系統(tǒng)中,I/O操作通常被映射成存儲(chǔ)器操作,即輸入/輸出是通過存儲(chǔ)器映射的可尋址外圍寄存器和中斷輸入的組合來實(shí)現(xiàn)的。 但是,對(duì)于存儲(chǔ)器映射的I/O空間的操作,不能使用Cache技術(shù)。68
24、第第 3 3 章章 ARMARM尋址方式與指令系統(tǒng)尋址方式與指令系統(tǒng)本章主要內(nèi)容:ARM編程模型 ARM指令格式和尋址方式ARM指令集 Thumb指令集 69 機(jī)器指令、偽指令和宏指令機(jī)器指令、偽指令和宏指令 機(jī)器指令能被處理器直接執(zhí)行,而偽指令宏和宏指令不能。機(jī)器指令包括ARM指令集和Thumb指令集 ;偽指令是在源程序匯編期間,由匯編編譯器處理。其作用是為匯編程序完成準(zhǔn)備工作;宏指令在程序中用于調(diào)用宏,宏是一段獨(dú)立的程序代碼;在程序匯編時(shí),對(duì)宏調(diào)用進(jìn)行展開,用宏體代替宏指令。70 ARM處理器模式處理器模式n除用戶模式之外的其余6種稱為非用戶模式,或特權(quán)模式(Privileged Mode
25、s);而特權(quán)模式中,除系統(tǒng)模式之外的其余5種又稱為異常模式(Exception Modes),不同的工作模式間可以相互切換。 工作模式功能M4:0用戶模式(usr)正常的程序執(zhí)行狀態(tài)10000快速中斷模式(fiq)用于高速數(shù)據(jù)傳輸或通道處理10001外部中斷模式(irq)用于通用的中斷處理10010管理模式(svc)操作系統(tǒng)的保護(hù)模式10011中止模式(abt)用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)10111未定義指令模式(und)用于支持硬件協(xié)處理器的軟件仿真11011系統(tǒng)模式(sys)運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù)1111171 處理器的工作狀態(tài)處理器的工作狀態(tài)ARM狀態(tài):處理器執(zhí)行32位的arm指令集時(shí),工作
26、在此狀態(tài);Thumb狀態(tài):處理器執(zhí)行16位的thumb指令集時(shí),工作在此狀態(tài)。 72 ARM的寄存器組織的寄存器組織73 ARM的寄存器組織的寄存器組織 1.通用寄存器:包括R0R15,以及程序計(jì)數(shù)器PC .R0R7稱為不分組寄存器;R8R12有兩組物理寄存器。一組屬于快速模式(R8_fiqR12_fiq),另一組屬于其它模式(R8_usrR12_usr) ;R13和R14有6組物理寄存器。其中用戶模式和系統(tǒng)模式共用一組 。寄存器R13通常作為堆棧指針(SP) ,寄存器R14常用作連接寄存器(LR);寄存器R15,又稱為PC 74 ARM的寄存器組織的寄存器組織 (1)2.狀態(tài)寄存器:當(dāng)前程序
27、狀態(tài)寄存器 CPSR,可以在任何工作模式下被訪問;程序狀態(tài)備份寄存器SPSR,只有在異常模式下,才能被訪問 ; 75 ARM的寄存器組織的寄存器組織 (2)條件標(biāo)志位標(biāo)志位含 義N當(dāng)兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)運(yùn)算時(shí),N=1 表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0 表示運(yùn)算的結(jié)果為正數(shù)或零;ZZ=1 表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果不為零;C有3種情況會(huì)改變C的值:加法運(yùn)算(包括比較指令CMN):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)(無符號(hào)數(shù)上溢出),C=1,否則C=0。減法運(yùn)算(包括比較指令CMP):當(dāng)運(yùn)算時(shí)產(chǎn)生了借位(無符號(hào)數(shù)下溢出),C=0,否則C=1。對(duì)于包含移位操作的非加/減運(yùn)算指令,C為移出值的最后一位
28、。V對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1表示符號(hào)位溢出。Q在ARM v5及以上版本的E系列處理器中,用Q標(biāo)志位指示增強(qiáng)的DSP運(yùn)算指令是否發(fā)生了溢出。76 ARM的寄存器組織的寄存器組織 (3)控制位標(biāo)志位含義II1,表示禁止IRQ中斷;否則,表示允許IRQ中斷FF1,表示禁止FIQ中斷;否則,表示允許FIQ中斷T對(duì)于ARM v4以上版本的T系列處理器,T0,表示執(zhí)行ARM指令,否則,表示執(zhí)行Thumb指令;對(duì)于ARM v5以上版本的非T系列處理器,T0,表示指令A(yù)RM指令,否則,表示強(qiáng)制下一條執(zhí)行的指令產(chǎn)生未定義指令中斷。M4:0M4:0處理器工作模
29、式可訪問的寄存器10000用戶模式PC,R0R14,CPSR10001快速中斷模式PC,R0R7,R8_fiqR14_fiq,CPSR,SPSR_fiq10010外部中斷模式PC,R0R12,R13_irqR14_irq,CPSR,SPSR_irq10011管理模式PC,R0R12,R13_svcR14_svc,CPSR,SPSR_svc10111中止模式PC,R0R12,R13_abtR14_abt,CPSR,SPSR_abt11011未定義指令模式PC,R0R12,R13_undR14_und,CPSR,SPSR_und11111系統(tǒng)模式PC,R0R14,CPSR77 異常中斷異常中斷n異
30、常中斷是指處理器由于外部或內(nèi)部的原因,停止執(zhí)行當(dāng)前任務(wù),轉(zhuǎn)而處理特定的事件,處理完后返回原程序,繼續(xù)執(zhí)行。 異常類型工作模式特定地址(低端)特定地址(高端)優(yōu)先級(jí)復(fù)位管理模式0 x000000000 xFFFF00001未定義指令未定義指令中止模式0 x000000040 xFFFF00046軟件中斷(SWI)管理模式0 x000000080 xFFFF00086指令預(yù)取中止中止模式0 x0000000C0 xFFFF000C5數(shù)據(jù)訪問中止中止模式0 x000000100 xFFFF00102外部中斷請(qǐng)求(IRQ)外部中斷模式0 x000000180 xFFFF00184快速中斷請(qǐng)求(FIQ)
31、快速中斷模式0 x0000001C0 xFFFF001C378 異常中斷異常中斷(1)n例子: 1.整個(gè)地址空間的起始位置(地址0 x00000000開始)有以下指令,一旦發(fā)生外部中斷請(qǐng)求,處理器首先自動(dòng)保存當(dāng)前狀態(tài)(PC-R14,CPSR-SPSR),進(jìn)入外部中斷模式,接著執(zhí)行地址0 x00000018處的指令,即b IRQ_SVC_HANDLER跳轉(zhuǎn)到標(biāo)號(hào)IRQ_SVC_HANDLER處開始執(zhí)行。 bSYS_RST_HANDLER;對(duì)0 x00000000bUDF_INS_HANDLER;0 x00000004bSWI_SVC_HANDLER;應(yīng)0 x00000008bINS_ABT_HA
32、NDLER;0 x0000000cbDAT_ABT_HANDLER;地0 x00000010b.;bIRQ_SVC_HANDLER;址0 x00000018bFIQ_SVC_HANDLER;0 x0000001c 79 異常中斷異常中斷(2) 2. IRQ_SVC_HANDLER處的代碼為: IRQ_SVC_HANDLERsub lr, lr, #4stmfdsp!, r0-r3, lrldr r0, =IRQ_SVC_Vectorldr pc, r0 處理器將通用寄存器和返回地址壓入堆棧,接著跳轉(zhuǎn) 到 外 部 中 斷 請(qǐng) 求 的 中 斷 服 務(wù) 程 序 中 。IRQ_SVC_Vector為外
33、部中斷請(qǐng)求的中斷向量。80 ARM指令的編碼格式指令的編碼格式 3128272524212019161512110cond opcodeSRnRdop20000001010010001000000000000001081 ARM指令的助記符指令的助記符 ARM指令在匯編程序中用助記符表示,一般ARM指令的助記符格式為: S , 其中: 操作碼,如ADD表示算術(shù)加操作指令; 決定指令執(zhí)行的條件域;S 決定指令執(zhí)行是否影響CPSR寄存器的值; 目的寄存器; 第一個(gè)操作數(shù),為寄存器; 第二個(gè)操作數(shù)。82 條件域條件域condCPSR中標(biāo)志位含 義EQZ置位相等NEZ清零不相等CSC置位無符號(hào)數(shù)大于或
34、等于CCC清零無符號(hào)數(shù)小于MIN置位負(fù)數(shù)PLN清零正數(shù)或零VSV置位溢出VCV清零未溢出HIC置位Z清零無符號(hào)數(shù)大于LSC清零Z置位無符號(hào)數(shù)小于或等于GEN等于V帶符號(hào)數(shù)大于或等于LTN不等于V帶符號(hào)數(shù)小于GTZ清零且(N等于V)帶符號(hào)數(shù)大于LEZ置位或(N不等于V)帶符號(hào)數(shù)小于或等于AL忽略無條件執(zhí)行83 尋址方式尋址方式 立即數(shù)尋址寄存器尋址寄存器移位尋址寄存器間接尋址 基址變址尋址相對(duì)尋址 多寄存器尋址 塊拷貝尋址 堆棧尋址 84例:寄存器移位尋址例:寄存器移位尋址LSL邏輯左移 :Rx,LSL LSR邏輯右移 : Rx,LSR ASR算術(shù)右移 :Rx,ASR ROR循環(huán)右移 :Rx,R
35、OR RRX帶擴(kuò)展的循環(huán)右移:Rx,RRX 85ARM指令集指令集數(shù)據(jù)處理指令;跳轉(zhuǎn)指令;Load/Store指令;程序狀態(tài)寄存器指令;協(xié)處理器指令;軟件中斷指令 86Thumb指令集指令集nThumb指令集可以看作是ARM指令集的一個(gè)子集,Thumb指令長(zhǎng)度為16位,但Thumb指令集中的數(shù)據(jù)處理指令的操作數(shù)仍然是32位的,指令尋址地址也是32位的。 nThumb指令集由四大類構(gòu)成:數(shù)據(jù)處理指令;跳轉(zhuǎn)指令;Load/Store指令;和軟件中斷指令87第第 4 4 章章 匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 本章主要內(nèi)容:匯編語言源程序格式匯編語言上機(jī)過程匯編語言與C語言混合編程技術(shù)Linux下的
36、ARM匯編 程序優(yōu)化與性能測(cè)試88 ARM源程序文件源程序文件 文件類型擴(kuò)展名匯編語言源文件.sC語言源文件.cC+源文件.cpp引入文件.INC頭文件.h89 匯編源程序示例匯編源程序示例 90 匯編源程序示例匯編源程序示例91 匯編源程序示例匯編源程序示例92 匯編源程序示例匯編源程序示例nARM的匯編語言程序一般由幾個(gè)段組成,每個(gè)段均由AREA偽操作定義。n段可以分為多種,如代碼段、數(shù)據(jù)段、通用段,每個(gè)段又有不同的屬性,象代碼段的默認(rèn)屬性為READONLY,數(shù)據(jù)段的默認(rèn)屬性為READWRITE。n本程序定義了兩個(gè)段,第一個(gè)段為代碼段codesec,它在存儲(chǔ)器中存放用于程序執(zhí)行的代碼以及m
37、ain函數(shù)的本地字符串;第二個(gè)段為數(shù)據(jù)段constdatasec,存放了全局的字符串,由于本程序沒有對(duì)數(shù)據(jù)進(jìn)行寫操作,該數(shù)據(jù)段定義屬性為READONLY。93 匯編語言的行構(gòu)成匯編語言的行構(gòu)成格式:n 標(biāo)簽標(biāo)簽 指令指令/ /偽操作偽操作/ /偽指令偽指令 操作數(shù)操作數(shù) ; ;語句的注釋語句的注釋 所有的標(biāo)簽必須在一行的開頭頂格寫,前面不能留空格,后面也不能跟C語言中的標(biāo)簽一樣加上“:”; ARM匯編器對(duì)標(biāo)識(shí)符的大小寫敏感書寫標(biāo)號(hào)及指令時(shí)字母的大小寫要一致;注釋使用“;”符號(hào),注釋的內(nèi)容從“;”開始到該行的結(jié)尾結(jié)束。94 匯編語言的行構(gòu)成匯編語言的行構(gòu)成n標(biāo)簽 標(biāo)簽是一個(gè)符號(hào),可以代表指令的地
38、址、變量、數(shù)據(jù)的地址和常量。一般以字母開頭,由字母、數(shù)字、下劃線組成。當(dāng)符號(hào)代表地址時(shí)又稱標(biāo)號(hào),可以以數(shù)字開頭,其作用范圍為當(dāng)前段或者在下一個(gè)ROUT偽操作之前。n指令/偽操作 指令/偽操作是指令的助記符或者定義符,它告訴ARM的處理器應(yīng)該執(zhí)行什么樣的操作或者告訴匯編程序偽指令語句的偽操作功能。95 匯編語言的匯編語言的標(biāo)號(hào)標(biāo)號(hào)n標(biāo)號(hào)代表地址。標(biāo)號(hào)分為段內(nèi)標(biāo)號(hào)和和段外標(biāo)號(hào)。段內(nèi)標(biāo)號(hào)的地址值在匯編時(shí)確定,段外編號(hào)的地址值在鏈接時(shí)確定 。n在程序段中,標(biāo)號(hào)代表其所在位置與段首地址的偏移量。根據(jù)程序計(jì)數(shù)器(PC)和偏移量計(jì)算地址即程序相對(duì)尋址。n在映像中定義的標(biāo)號(hào)代表標(biāo)號(hào)到映像首地址的偏移量。映像的
39、首地址通常被賦予一個(gè)寄存器,根據(jù)該寄存器值與偏移量計(jì)算地址即寄存器相對(duì)尋址。n此外在宏中也可以使用局部符號(hào)。局部標(biāo)號(hào)是099的十進(jìn)位數(shù)開始,可以重復(fù)定義。 局部標(biāo)號(hào)引用格式: F|BA|T Nroutname 96 匯編語言的匯編語言的常量常量 程序中的常量是指其值在程序的運(yùn)行過程中不能被改變的量。數(shù)字常量:數(shù)字常量有3種表示方式:十進(jìn)制數(shù),如1、2、123十六進(jìn)制數(shù),如 0 x123,0 xabc n進(jìn)制數(shù),形式為n_XXX,n的范圍是2到9,XXX是具體數(shù)字字符常量:由單引號(hào)及中間的字符組成,包括C語言中的轉(zhuǎn)義字符,如a,n字符串常量:由一對(duì)雙引號(hào)及中間的字符串表示,中間 也 可 以 使
40、用 C 語 言 中 的 轉(zhuǎn) 義 字 符 , 比 如 :“abcdef0 xarn”邏輯常量:TRUE,FALSE,注意帶大括號(hào)97 匯編程序的變量代換匯編程序的變量代換 這里所說的變量,是相對(duì)于匯編程序的“變量”,是用于匯編程序進(jìn)行處理的,但一旦編譯到程序中,則不會(huì)改變,成為常量。如果在字符串變量的前面有一個(gè)$字符,在匯編時(shí)編譯器將用該字符串變量的內(nèi)容代替該串變量。如果在數(shù)字變量前面有一個(gè)代換操作符“$”,編譯器會(huì)將該數(shù)字變量的值轉(zhuǎn)換為十六進(jìn)制的字符串,并用該十六進(jìn)制的字符串代換“$”后的數(shù)字變量。如果需要將“$”字符 加入到字符串中,可以用“$”代替,此時(shí)編譯器將不再進(jìn)行變量代換,而是把“$
41、”看作一個(gè)“$”.一般的,在兩個(gè)“|”之間的“$”并不進(jìn)行變量的代換,但如果“|”在雙引號(hào)內(nèi),則將進(jìn)行變量代換。使用“.”來表示字符串中變量名的結(jié)束。98 匯編程序的變量代換匯編程序的變量代換99 偽指令偽指令n在ARM匯編語言源程序中有些特殊助記符,它們沒有相對(duì)應(yīng)的操作碼或者機(jī)器碼,通常稱為偽指令,它們所完成的操作稱為偽操作。偽指令在源程序中的作用是為完成匯編程序作各種準(zhǔn)備工作的,由匯編程序在源程序的匯編期間進(jìn)行處理,僅在匯編過程中起作用。符號(hào)定義偽指令數(shù)據(jù)定義偽指令匯編控制偽指令信息報(bào)告?zhèn)沃噶詈曛噶钜约捌渌麄沃噶睢?00匯編語言上機(jī)過程匯編語言上機(jī)過程 用ARM匯編語言編寫的源程序,要使之
42、運(yùn)行必須經(jīng)過以下幾個(gè)步驟:1.編輯匯編源程序,保存為文件名后綴是“.s”的文件;2.調(diào)用匯編程序?qū)υ闯绦蜻M(jìn)行匯編,生成目標(biāo)文件;3.連接目標(biāo)文件,生成可以放進(jìn)ARM軟件仿真器進(jìn)行調(diào)試的映象文件或者可下載到ARM的目標(biāo)板執(zhí)行的二進(jìn)制文件;4.對(duì)生成的最終文件進(jìn)行調(diào)試。101 ARM的開發(fā)工具的開發(fā)工具ADS1.2 ADS1.2是ARM公司推出的一套ARM匯編、C、C+的集成開發(fā)環(huán)境。包含了幾個(gè)有用的開發(fā)工具,包括:CodeWarrior IDE for the ARM Developer Suite :為ARM的程序員管理、開發(fā)軟件工程項(xiàng)目提供了一個(gè)簡(jiǎn)單直觀、靈活的用戶界面。 AXD Debug
43、er:AXD是一個(gè)功能強(qiáng)大、使用方便的調(diào)試器。 102 編輯匯編語言源程序編輯匯編語言源程序 n可以使用簡(jiǎn)單的Windows自帶的記事本程序來編輯ARM的匯編程序: 單擊開始菜單程序附件記事本 敲入?yún)R編代碼保存為.s文件 n也可以使用CodeWarrior IDE來編輯匯編程序: 單擊File菜單的New菜單項(xiàng) 單擊Project標(biāo)簽頁 單擊工具欄的New Text按鈕 敲入?yún)R編代碼保存為hello.s文件 單擊Project菜單,選擇“Add *.s to project” 103 編譯匯編語言源程序編譯匯編語言源程序nARM的編譯器有如下幾種armcc:ARM C編譯器,具有優(yōu)化功能,兼容
44、ANSI Ctcc:Thumb的C編譯器,同樣具有優(yōu)化功能兼容ANSI C。armcpp:ARM C+編譯器,遵循ANSI C+或者EC+標(biāo)準(zhǔn)tcpp:Thubm的C+編譯器,遵循ANSI C+或者EC+標(biāo)準(zhǔn)armasm:支持ARM和Thumb的匯編器 這些編譯器輸出的是ELF格式的目標(biāo)文件,可以包括RAWF2格式的調(diào)試信息。同時(shí)通過特殊的控制選項(xiàng)可以輸出匯編語言文件或者列表文件。104 編譯匯編語言源程序編譯匯編語言源程序n4種ARM C和C+編譯器(armcc,tcc, armcpp和 tcpp)的命令通用語法: compiler PCS-options source-language s
45、earch-paths preprocessor-options output-format target-options debug-options code-generation-options warning-options additional-checks error-options source -via filename 用戶通過命令行操作選項(xiàng)指引編譯器運(yùn)行。所有的選項(xiàng)都是以符號(hào)”-”開始,有些選項(xiàng)后面還跟有參數(shù)。在大多數(shù)情況下,ARM C和 C+編譯器允許在選項(xiàng)和參數(shù)之間存在空格。 105 編譯匯編語言源程序編譯匯編語言源程序 PCS-options:指定了要使用的過程調(diào)用標(biāo)準(zhǔn)
46、;source-language:指定了編譯器可以接受的編寫源程序的語言種類。對(duì)于C編譯器默認(rèn)的語言是ANSI C,對(duì)于C+編譯器默認(rèn)是ISO標(biāo)準(zhǔn)C+;search-paths:該選項(xiàng)指定了對(duì)包含的文件(包括源文件和頭文件)的搜索路徑;preprocessor-options:該選項(xiàng)指定了預(yù)處理器的行為,其中包括預(yù)處理器的輸出和宏定義等特性;output-format:該選項(xiàng)指定了編譯器的輸出格式,可以使用該項(xiàng)生成匯編語言輸出列表文件和目標(biāo)文件;target-options:該選項(xiàng)指定目標(biāo)處理器或ARM體系結(jié)構(gòu);debug-options:該選項(xiàng)指定調(diào)試信息表是否生成,和該調(diào)試信息表生成時(shí)的格
47、式;106 編譯匯編語言源程序編譯匯編語言源程序code-generation-options:該選項(xiàng)指定了例如優(yōu)化,字節(jié)順序和由編譯器產(chǎn)生的數(shù)據(jù)對(duì)齊格式等選項(xiàng);warning-options:該選項(xiàng)決定警告信息是否產(chǎn)生;additional-checks:該選項(xiàng)指定了幾個(gè)能用于源碼的附加檢查,例如檢查數(shù)據(jù)流異常,檢查沒有使用的聲明等;error-options:該選項(xiàng)可以關(guān)閉指定的可恢復(fù)的錯(cuò)誤,或者將一些指定的錯(cuò)誤降級(jí)為警告;source:該選項(xiàng)提供了包含有C或C+源代碼的一個(gè)或多個(gè)文件名,默認(rèn)的,編譯器在當(dāng)前路徑尋找源文件和創(chuàng)建輸出文件。如果源文件是用匯編語言編寫的(也就是說該文件的文件名
48、是以.s作為擴(kuò)展名),匯編器將被調(diào)用來處理這些源文件。-via filename :WINDOWS系統(tǒng)對(duì)命令行的長(zhǎng)度有限制,可以通過filename的文件讀取命令行選項(xiàng)。用戶可以對(duì)-via進(jìn)行嵌套調(diào)用,在文件filename中再通過-via filename2包含了另外一個(gè)文件。 107連接裝配匯編程序連接裝配匯編程序 n使用armlink程序?qū)RM的匯編源程序進(jìn)行連接,它也可以將多個(gè).o目標(biāo)文件連接生成最終的可執(zhí)行文件。n術(shù)語 :映像文件(image):是指一個(gè)可執(zhí)行文件,在執(zhí)行的時(shí)候被加載到處理器中。一個(gè)映像文件可以有多個(gè)線程。它是ELF(Executable and linking f
49、ormat)格式的。 段(Section):描述映像文件的代碼或數(shù)據(jù)塊。RO:Read-only縮寫。RW:是Read-write縮寫。ZI:是Zero-initialized縮寫。108 連接裝配匯編程序連接裝配匯編程序Read Only Position Independent(ROPI):只讀數(shù)據(jù)中代碼和的地址在運(yùn)行時(shí)候可以改變。Read Write Position Independent(RWPI):一個(gè)段中的可讀/寫的數(shù)據(jù)地址在運(yùn)行期間可以改變。輸入段(input section):它包含著代碼,初始化數(shù)據(jù)或描述了在應(yīng)用程序運(yùn)行之前必須要初始化為0的一段內(nèi)存。輸出段(output
50、section):它包含了一系列具有相同的RO,RW或ZI屬性的輸入段。 域(Regions):在一個(gè)映像文件中,一個(gè)域包含了1至3個(gè)輸出段。多個(gè)域組織在一起,就構(gòu)成了最終的映像文件。 加載時(shí)地址:映像文件載入存儲(chǔ)器時(shí)的地址。運(yùn)行時(shí)地址:映像文件運(yùn)行時(shí)的地址。109匯編程序的運(yùn)行匯編程序的運(yùn)行 生成的*.axf文件是ARM 的ELF 格式的可執(zhí)行映像文件;這個(gè)文件可以載入AXD 進(jìn)行仿真調(diào)試。使用armsd在終端模擬它在ARM目標(biāo)機(jī)上的運(yùn)行 :執(zhí)行armsd -exec *.axf 直接在CodeWarrior IDE中運(yùn)行映象文件:在project窗口中點(diǎn)擊run按鈕。在AXD上調(diào)試成功之后
51、,我們可以通過fromelf 工具將ELF 文件轉(zhuǎn)換為二進(jìn)制格式文件下載到目標(biāo)板執(zhí)行。轉(zhuǎn)化的命令如下: fromelf *.axf -bin *110 匯編程序的調(diào)試匯編程序的調(diào)試n使用AXD進(jìn)行調(diào)試 :編譯、連接成功之后,我們可以點(diǎn)擊project 窗口的debug按鈕啟動(dòng)AXD進(jìn)行調(diào)試:主框架窗口上方的調(diào)試工具欄有幾個(gè)常用的按鈕:go:使程序運(yùn)行直到下一個(gè)斷點(diǎn)停止step in:進(jìn)入函數(shù)內(nèi)部運(yùn)行step:單步調(diào)試,每次移動(dòng)一行step out :跳出循環(huán)或函數(shù)run to cursor:運(yùn)行到光標(biāo)所在的位置然后停止。111 匯編語言與匯編語言與C C語言混合編程技術(shù)語言混合編程技術(shù)nARM
52、體系結(jié)構(gòu)支持ARM的匯編語言與C與C+的混合編程.一般的在一個(gè)完整的程序設(shè)計(jì)的中,除了初始化部分用匯編語言完成外,其大部分的編程任務(wù)一般都用C或C+完成。112 匯編程序中訪問匯編程序中訪問C C程序變量程序變量 在匯編的源程序中調(diào)用C語言風(fēng)格的字符串需要使用IMPORT偽操作。IMPORT相當(dāng)于C語言中的extern關(guān)鍵字,告訴編譯器引用的符號(hào)不是在本文件中定義的,而是在其他的源文件中定義的。 IMPORT symbol ,WEAKsymbol是聲明的符號(hào)的名稱;,WEAK指示編譯器如果發(fā)現(xiàn)symbol在所有的源文件中都沒有找到,那么它也不會(huì)產(chǎn)生任何的錯(cuò)誤信息。示例見下頁。113 匯編程序中
53、訪問匯編程序中訪問C C程序變量程序變量C語言代碼文件str.c,里面只有一個(gè)簡(jiǎn)單的字符串的定義char *strhello=Hello world!n0;匯編代碼文件hello.s1 AREA |.text|, CODE, READONLY 2 main PROC3 STMFD sp!,lr4 LDR r0,strtemp5 LDRr0,r06 BL _printf7 LDMFD sp!,pc8 strtemp9 DCDstrhello10 ENDP11 EXPORT main12 IMPORT strhello13 IMPORT _main14 IMPORT _main15 IMPORT
54、_printf16 IMPORT |Lib$Request$armlib|, WEAK17 END114 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令 n在ARM的C語言程序中我們可以使用關(guān)鍵字_asm來加入一段匯編語言的程序,格式如下: _asm instruction/*comment*/ 115 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令n在C語言中嵌入的ARM匯編需要注意一些問題:在匯編指令中,可以使用表達(dá)式,使用逗號(hào)“,”作為分隔符 ;如果一條指令占用了多行,那么應(yīng)該使用符號(hào)“”續(xù)行,如果一行中有多個(gè)匯編指令,那么應(yīng)該使用“;”將多個(gè)指令隔開,匯編中不能再使用“;”作為注釋行的開頭,而
55、應(yīng)該使用C語言中的“/*/”或者“/”進(jìn)行注釋;不要企圖使用一個(gè)物理寄存器去改變一個(gè)C變量;對(duì)于內(nèi)嵌的匯編代碼用到的寄存器,編譯器在編譯時(shí)會(huì)自動(dòng)加入保存和恢復(fù)這些寄存器的代碼而不用用戶去管理,除了寄存器CPSR和SPSR,其他寄存器都必須先賦值然后再讀取,否則編譯時(shí)將出現(xiàn)錯(cuò)誤。116 C C程序中內(nèi)嵌匯編指令程序中內(nèi)嵌匯編指令n內(nèi)嵌的ARM匯編與純粹的ARM匯編的區(qū)別有:內(nèi)嵌的ARM匯編不支持ADR、ADRL偽指令;十六進(jìn)制數(shù)使用0 x作為前綴,而后者使用&;編譯器在編譯函數(shù)時(shí)使用R0、R1、R2、R3、IP和LR存放中間結(jié)果,因此使用這些寄存器時(shí)要特別小心;注意C語言中的C語言變量不
56、要和物理寄存器同名,否則可能出現(xiàn)混亂;內(nèi)嵌的匯編代碼不能使用PC寄存器返回當(dāng)前指令的地址;STM和LDM指令中不能使用C語言表達(dá)式;不支持BX和BLX;用戶可以改變處理器的模式,但仍然需要自己把處理器模式恢復(fù)過來,編譯器不會(huì)自動(dòng)做處理;嵌匯編指令常量前面的符號(hào)“#”可以省略;嵌匯編指令不支持內(nèi)存分配的偽操作。117 C程序調(diào)用匯編程序程序調(diào)用匯編程序 n為了滿足ARM匯編、C與C+之間的互相調(diào)用,必須保證編寫的代碼遵循APCS(ARM過程調(diào)用標(biāo)準(zhǔn))。APCS規(guī)定了子程序調(diào)用的基本規(guī)則,這些規(guī)則包括子程序調(diào)用過程中寄存器、數(shù)據(jù)棧的使用規(guī)則以及參數(shù)的傳遞規(guī)則。n示例見課本P*。 118 Linux
57、下的下的ARM匯編匯編nLinux下的ARM匯編指令與Window下的匯編相比,在ARM處理器的指令使用方面是大同小異的,不同的是編譯工具和ARM匯編的偽操作,其語法更類似于gas 風(fēng)格的匯編.nGNU提供的基于ARM平臺(tái)的編譯工具如下:匯編器arm-elf-as,作用是將匯編語言程序轉(zhuǎn)化為ELF格式的可重定位目標(biāo)代碼。C編譯器arm-elf-gcc,是ARM的交叉編譯器,運(yùn)行于Linux平臺(tái),它在編譯時(shí),首先通過預(yù)處理程序?qū)υ创a進(jìn)行處理,然后調(diào)用ccl將處理后的程序轉(zhuǎn)化為匯編代碼,最后通過arm-elf-as將匯編代碼編譯為目標(biāo)代碼。連接器arm-elf-ld,可以根據(jù)鏈接定位文件的代碼區(qū)
58、 數(shù)據(jù)區(qū) BSS區(qū)和棧區(qū)等定位信息,將多個(gè)可重定位的目標(biāo)模塊鏈接成一個(gè)單一的,絕對(duì)定位的,ELF格式的目標(biāo)程序。二進(jìn)制轉(zhuǎn)換工具arm-elf-objcopy,是目標(biāo)格式轉(zhuǎn)化工具,它能夠?qū)LF格式的文件轉(zhuǎn)化為其他格式的文件。119 Linux匯編程序中的標(biāo)號(hào)匯編程序中的標(biāo)號(hào) n標(biāo)號(hào)只能由az,AZ,09,“.”, _等字符組成.當(dāng)標(biāo)號(hào)為09的數(shù)字時(shí)為局部標(biāo)號(hào),局部標(biāo)號(hào)可以重復(fù)出現(xiàn),使用方法如下:標(biāo)號(hào)f:在引用的地方向前的標(biāo)號(hào);標(biāo)號(hào)b:在引用的地方向后的標(biāo)號(hào)n使用局部符號(hào)的例子(“”符號(hào)后的語句為注釋):1: subs r0,r0,#1 每次循環(huán)使r0=r0-1 bne 1f 跳轉(zhuǎn)到1標(biāo)號(hào)去執(zhí)行
59、n局部標(biāo)號(hào)代表它所在的地址,因此也可以當(dāng)作變量或者函數(shù)來使用。120 Linux匯編程序中的分段名匯編程序中的分段名 n段名:匯編系統(tǒng)預(yù)定義的段名有: .text、.data、.bss、.sdata、.sbss等,每一個(gè)段以段名為開始,以下一個(gè)段名或者文件結(jié)尾為結(jié)束.n用戶可以通過.section偽操作來自定義一個(gè)段,格式如下: .section section_name , flags, %type,flag_specific_argumentsn示例: .section .mysection 自定義數(shù)據(jù)段,段名為 “.mysection” .align2 .strtemp: .asciiT
60、emp string n0121 Linux匯編程序中的宏定義匯編程序中的宏定義n格式如下: .macro 宏名 參數(shù)名列表 偽指令.macro定義一個(gè)宏 宏體 .endm .endm表示宏結(jié)束n如果宏使用參數(shù),那么在宏體中使用該參數(shù)時(shí)添加前綴“”。宏定義時(shí)的參數(shù)還可以使用默認(rèn)值。n可以使用偽指令來退出宏。122Linux下下ARM匯編的常用偽操作匯編的常用偽操作 n數(shù)據(jù)定義偽操作: .byte,.short,.long,.quad, .float,.string/.asciz/.ascii,重復(fù)定義偽操作.rept,賦值語句.equ/.set ;n函數(shù)的定義 ;n對(duì)齊方式偽操作 .align;n源文
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全培訓(xùn)新課件
- 江西小學(xué)紅色文化課件教學(xué)
- 安全交通課件
- 漢服文化課件下載
- 漢教技能比賽課件題目
- 提高幼兒教育質(zhì)量
- 行政管理新形勢(shì)下的應(yīng)對(duì)策略試題及答案
- 護(hù)理創(chuàng)新與探索試題及答案
- 自考行政管理職業(yè)素養(yǎng)試題及答案
- 行政管理學(xué)子如何應(yīng)對(duì)語文考試試題及答案
- GB/T 1965-2023多孔陶瓷室溫彎曲強(qiáng)度試驗(yàn)方法
- 一種改進(jìn)的ip-q諧波電流檢測(cè)方法
- 擔(dān)保書之第三方擔(dān)保合同模板
- 南京大屠殺資料
- 獨(dú)醒之累:郭嵩燾與晚清大變局
- 河道治理水葫蘆施工方案
- 眼科門診病歷(清晰整齊)
- 學(xué)校專任教師基本情況統(tǒng)計(jì)樣表
- 焊接工藝評(píng)定報(bào)告模板
- 初中完形填空專項(xiàng)訓(xùn)練40篇(含答案)
- 二類費(fèi)用-工程建設(shè)其他費(fèi)用取費(fèi)標(biāo)準(zhǔn)集合(上海市-2023年版)
評(píng)論
0/150
提交評(píng)論