版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ARM體系結(jié)構(gòu)與開發(fā)流程ARM體系結(jié)構(gòu)與編程一嵌入式系統(tǒng)根本概念與開展歷史..3二ARM體系結(jié)構(gòu)版本與ARM處理器核..37三ARM結(jié)構(gòu)圖…………62四編程模型………….79五操作系統(tǒng)………….147六開發(fā)環(huán)境………….159一、嵌入式系統(tǒng)根本概念與開展歷史嵌入式計(jì)算機(jī)嵌入式系統(tǒng)的概念嵌入式系統(tǒng)的特點(diǎn)嵌入式系統(tǒng)的分類嵌入式系統(tǒng)的應(yīng)用范圍一.1嵌入式計(jì)算機(jī)嵌入式計(jì)算機(jī)的根本概念嵌入式計(jì)算機(jī)的根本特征和應(yīng)用范圍嵌入式計(jì)算機(jī)_根本概念傳統(tǒng)的計(jì)算機(jī)分類是按照計(jì)算機(jī)的處理字長(zhǎng)、體系結(jié)構(gòu)、運(yùn)算速度、結(jié)構(gòu)規(guī)模、適用領(lǐng)域進(jìn)行的,如通常所說的大型計(jì)算機(jī)、中型機(jī)、小型機(jī)和微型計(jì)算機(jī),并以此標(biāo)準(zhǔn)來組織學(xué)科和產(chǎn)業(yè)分工,這種分類方法也沿襲了多年。隨著近20年來微電子技術(shù)、計(jì)算機(jī)技術(shù)和移動(dòng)通信技術(shù)的迅速開展以及網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用,實(shí)際情況已經(jīng)產(chǎn)生了根本性的變化。例如在70年代末定義的微型計(jì)算機(jī)演變出來的個(gè)人計(jì)算機(jī)PC其處理速度已遠(yuǎn)遠(yuǎn)超過了當(dāng)年對(duì)大、中、小型計(jì)算機(jī)的定義。嵌入式計(jì)算機(jī)_根本概念隨著計(jì)算機(jī)技術(shù)對(duì)其它行業(yè)的廣泛滲透和與其它行業(yè)應(yīng)用技術(shù)的相互結(jié)合,以應(yīng)用為中心的分類方法變得似乎更加切合實(shí)際開展;也就是按計(jì)算機(jī)的嵌入式應(yīng)用和非嵌入式應(yīng)用將其分為通用計(jì)算機(jī)和嵌入式計(jì)算機(jī)。而通用計(jì)算機(jī)具有一般計(jì)算機(jī)的根本標(biāo)準(zhǔn)形態(tài),通過裝配不同的應(yīng)用軟件,以根本雷同的面目出現(xiàn)并應(yīng)用在社會(huì)的各個(gè)方面,其典型產(chǎn)品為PC;嵌入式計(jì)算機(jī)_根本概念通用的臺(tái)式機(jī)嵌入式計(jì)算機(jī)_根本概念而非通用計(jì)算機(jī)的計(jì)算機(jī)-嵌入式計(jì)算機(jī),那么是非通用計(jì)算機(jī)形態(tài)的計(jì)算機(jī)應(yīng)用它是以作為嵌入式系統(tǒng)的核心部件的形式隱藏在各種裝置、設(shè)備、產(chǎn)品和系統(tǒng)中。嵌入式計(jì)算機(jī)_根本概念后PC時(shí)代產(chǎn)品的蓬勃開展嵌入式計(jì)算機(jī)_根本概念后PC時(shí)代產(chǎn)品的蓬勃開展嵌入式計(jì)算機(jī)_根本特征和應(yīng)用范圍嵌入式計(jì)算機(jī)在應(yīng)用數(shù)量上已遠(yuǎn)遠(yuǎn)超過了各種通用計(jì)算機(jī),一臺(tái)通用計(jì)算機(jī)的外設(shè)中就包含了多個(gè)嵌入式微處理器。鍵盤、鼠標(biāo)、軟驅(qū)、硬盤、顯示卡、顯示器、Modem、網(wǎng)卡、聲卡、打印機(jī)、掃描儀、數(shù)碼相機(jī)、USB集線器等都是由嵌入式處理器控制的。在制造工業(yè)、過程控制、通訊、儀器、儀表、汽車、船舶、航空、航天、軍事裝備、消費(fèi)類產(chǎn)品等方面均是嵌入式計(jì)算機(jī)廣泛應(yīng)用的領(lǐng)域。一.2嵌入式系統(tǒng)的概念嵌入式系統(tǒng)是嵌入到對(duì)象體中的專用計(jì)算機(jī)系統(tǒng)以嵌入式計(jì)算機(jī)為核心的嵌入式系統(tǒng)是繼IT網(wǎng)絡(luò)技術(shù)之后,又一個(gè)新的技術(shù)開展方向。嵌入式系統(tǒng)的概念_IEEE的定義IEEE對(duì)嵌入式系統(tǒng)的定義為:嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作機(jī)器和設(shè)備的裝置”〔devicesusedtocontrol、monitor、orassisttheoperationofequipment、machineryorplants〕這主要是從應(yīng)用對(duì)象上加以定義,涵蓋了軟、硬件及輔助機(jī)械設(shè)備。嵌入式系統(tǒng)的概念_國(guó)內(nèi)的定義國(guó)內(nèi)普遍認(rèn)同的嵌入式系統(tǒng)定義為:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為根底、軟硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、本錢、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。相比較而言國(guó)內(nèi)的定義更全面一些,表達(dá)了嵌入式系統(tǒng)“嵌入”、“專用性”、“計(jì)算機(jī)”的根本要素和特征。一.3嵌入式系統(tǒng)的特點(diǎn)由于嵌入式系統(tǒng)是應(yīng)用于特定環(huán)境下,針對(duì)特定用途來設(shè)計(jì)的系統(tǒng),所以不同于通用計(jì)算機(jī)系統(tǒng)。同樣是計(jì)算機(jī)系統(tǒng),嵌入式系統(tǒng)是針對(duì)具體應(yīng)用設(shè)計(jì)的“專用系統(tǒng)”。它的硬件和軟件都必須高效率地設(shè)計(jì)、“量體裁衣”、去除冗余,力爭(zhēng)在較少的資源上實(shí)現(xiàn)更高的性能。它與通用的計(jì)算機(jī)系統(tǒng)相比具有以下顯著特點(diǎn):一.3嵌入式系統(tǒng)的特點(diǎn)
(嵌入式系統(tǒng)與PC之間的區(qū)別)嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計(jì)算平臺(tái)嵌入式系統(tǒng)的資源比PC少得多嵌入式系統(tǒng)軟件故障帶來的后果比PC機(jī)大得多嵌入式系統(tǒng)一般采用實(shí)時(shí)操作系統(tǒng)嵌入式系統(tǒng)大都有本錢、功耗的要求嵌入式系統(tǒng)得到多種微處理體系的支持嵌入式系統(tǒng)需要專用的開發(fā)工具一.4嵌入式系統(tǒng)的分類按表現(xiàn)形式分〔硬件范疇〕芯片級(jí)嵌入〔含程序或算法的處理器〕模塊級(jí)嵌入〔系統(tǒng)中的某個(gè)核心模塊〕系統(tǒng)級(jí)嵌入一.4嵌入式系統(tǒng)的分類按實(shí)時(shí)性要求分〔軟件范疇〕:非實(shí)時(shí)系統(tǒng)〔PDA〕軟實(shí)時(shí)系統(tǒng)〔消費(fèi)類產(chǎn)品〕硬實(shí)時(shí)系統(tǒng)〔工業(yè)和軍工系統(tǒng)〕一.5嵌入式系統(tǒng)的應(yīng)用領(lǐng)域
嵌入式技術(shù)無處不在嶄新的數(shù)字世界多彩的嵌入式應(yīng)用嵌入式技術(shù)無處不在文字處理、日常管理和生產(chǎn)控制的計(jì)算機(jī)各種使用嵌入式技術(shù)的品種繁多的電子產(chǎn)品,如:MP3、PDA、、智能玩具,網(wǎng)絡(luò)家電、智能家電、車載電子設(shè)備等在工業(yè)和效勞領(lǐng)域中,大量嵌入式技術(shù)也已經(jīng)應(yīng)用于工業(yè)控制、數(shù)控機(jī)床、智能工具、工業(yè)機(jī)器人、效勞機(jī)器人等各個(gè)行業(yè),正在逐漸改變著傳統(tǒng)的工業(yè)生產(chǎn)和效勞方式消費(fèi)電子嵌入式應(yīng)用信息家電智能玩具軍事電子通信設(shè)備移動(dòng)存貯工控設(shè)備智能儀表汽車電子網(wǎng)絡(luò)設(shè)備工業(yè)軍事國(guó)防電子商務(wù)網(wǎng)絡(luò)嵌入式技術(shù)無處不在的開展
無晶體管BTDECT1千萬(wàn)個(gè)晶體管
3個(gè)處理器諾基亞
超過7億個(gè)晶體管
(多數(shù)用于存儲(chǔ)器)
5-6個(gè)處理器1940 2001 2002計(jì)算機(jī)的開展AppleMacintosh
黑白顯示器
1MIP處理器惠普-康柏掌上電腦
彩色顯示
200MIP處理器64MB內(nèi)存
…袖珍型AcornArchimedes
彩色顯示器
10MIP處理器
…RISC集+=日用電器的開展AppleIPOD
100張CDs
袖珍型四處理器HP1315
照片質(zhì)量彩色打印機(jī)雙處理器GameBoyAdvance
手持式彩色聯(lián)網(wǎng)型雙處理器嵌入式控制和計(jì)算機(jī)的芯片使用量比較〔個(gè)〕Source:SemicoResearchCorp2002
嵌入式產(chǎn)品擁有璀璨的明天LotsofEmbeddedCoreShipments(32bitandabove)2003TotalEmbeddedCore*:1.48billionunitsSource:SemicoResearchCorp,Q12004782.8M126.2M119M88.3M*IncludesallSoCfor32-bit,64-bitandgreaterRISCandCISCarchitectures46.9M314M2004ARMEstimated:1.3billion嵌入式技術(shù)將成為后PC時(shí)代的主宰嵌入式技術(shù)成為當(dāng)前微電子技術(shù)與計(jì)算機(jī)技術(shù)中的一個(gè)重要分支。以嵌入式計(jì)算機(jī)為核心的嵌入式系統(tǒng)是繼IT網(wǎng)絡(luò)技術(shù)之后,又一個(gè)新的技術(shù)開展方向。使計(jì)算機(jī)的分類從以前的巨型機(jī)、大型機(jī)、小型機(jī)、微機(jī)之分變?yōu)榱送ㄓ糜?jì)算機(jī)和嵌入式系統(tǒng)兩大分類;嵌入式的應(yīng)用更是涉及金融、航天、電信、網(wǎng)絡(luò)、信息家電、醫(yī)療、工業(yè)控制、軍事等各個(gè)領(lǐng)域,并日益廣泛。嵌入式技術(shù)將成為后PC時(shí)代的主宰。
后PC時(shí)代產(chǎn)品的蓬勃開展嵌入式系統(tǒng)的應(yīng)用領(lǐng)域消費(fèi)類電子—智能玩具、手持通訊的核心嵌入式系統(tǒng)的應(yīng)用領(lǐng)域汽車電子嵌入式系統(tǒng)的應(yīng)用領(lǐng)域二ARM體系結(jié)構(gòu)與ARM處理器核本章將對(duì)ARM技術(shù)進(jìn)行全面論述,通過本章的學(xué)習(xí),使大家對(duì)ARM技術(shù)有個(gè)全面的了解和掌握,建立起以ARM技術(shù)為根底的嵌入式系統(tǒng)應(yīng)用技術(shù)根底。二ARM體系結(jié)構(gòu)與ARM處理器核二、1ARM簡(jiǎn)述第一片ARM處理器是1983年10月到1985年4月間在位于英國(guó)劍橋的AcornComputer公司開發(fā)1990年11月ARM公司在英國(guó)劍橋的一個(gè)谷倉(cāng)里成立,最初只有12人?,F(xiàn)在約千余人,其中大局部從事研發(fā)工作,ARM公司在全世界許多地區(qū)設(shè)有分公司,包括中國(guó)臺(tái)灣。
ARM擁有廣泛的全球技術(shù)合作伙伴,其中包括領(lǐng)先的半導(dǎo)體系統(tǒng)廠商、實(shí)時(shí)操作系統(tǒng)開發(fā)商、電子設(shè)計(jì)自動(dòng)化和工具供給商、應(yīng)用軟件公司、芯片制造商和設(shè)計(jì)中心。ARM公司既不生產(chǎn)芯片也不銷售芯片,它只出售芯片技術(shù)授權(quán)。ARM合作伙伴包括了許多世界頂級(jí)的半導(dǎo)體公司。目前5大半導(dǎo)體公司全都使用了ARM公司的技術(shù)授權(quán),前10中有9家,前25中有23家。ARM技術(shù)具有很高的性能和成效,因而容易被廠商接受。同時(shí),合作伙伴的增多,可獲得的第三方工具、制造和軟件支持,又使整個(gè)系統(tǒng)本錢降低,使產(chǎn)品進(jìn)入市場(chǎng)的時(shí)間加快,從而具有更大的競(jìng)爭(zhēng)優(yōu)勢(shì)。二ARM體系結(jié)構(gòu)與ARM處理器核二、2ARM芯片的特點(diǎn)1.ARM芯片具有RSIC體系的一般特點(diǎn),如具有大量的存放器;絕大多數(shù)操作都在存放器中進(jìn)行,通過Load/Store的體系結(jié)構(gòu)在內(nèi)存和存放器傳遞數(shù)據(jù)。尋址方式簡(jiǎn)單。采用固定長(zhǎng)度的指令格式。2.此外,ARM體系采用了一些特別的技術(shù),在保證高性能的同時(shí)盡量減小芯片的體積,減底芯片的功耗。這些技術(shù)有在同一條數(shù)據(jù)處理指令中包含算術(shù)邏輯處理和移位處理使用地址自動(dòng)增加〔減少〕來優(yōu)化程序中的循環(huán)處理。Load/Store指令可以批量傳輸數(shù)據(jù),從而提高數(shù)據(jù)傳輸?shù)男?。所有指令都可以根?jù)前面指令執(zhí)行結(jié)果,決定是否執(zhí)行,以提高指令執(zhí)行的效率。
二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V1版本1,本版本包括以下指令:乘法指令之外的根本數(shù)據(jù)處理指令;基于字節(jié),字和多字的存儲(chǔ)器訪問操作指令〔Load/Store〕;子程序調(diào)用指令BL在內(nèi)的跳轉(zhuǎn)指令;完成系統(tǒng)調(diào)用的軟件中斷指令SWI。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V2版本2,與版本1相比版本2〔2a〕增加了以下指令:乘和乘加指令;支持協(xié)處理器的指令;對(duì)于FIQ模式,提供了額外的影子存放器;SWP指令及SWPB指令。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V3-版本3較以前的版本發(fā)生了大的變化地址空間擴(kuò)展到了32位,但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空間;分開的當(dāng)前程序狀態(tài)存放器CPSR〔CurrentProgramStatusRegister〕和備份的程序狀態(tài)存放器SPSR〔SavedProgramStatusRegister〕,SPSR用于在程序異常中斷時(shí)保存被中斷的程序狀態(tài);增加了兩種異常模式,使操作系統(tǒng)代碼可以方便地使用數(shù)據(jù)訪問中止異常、指令預(yù)取中止異常和未定義指令異常;增加了MRS指令和MSR指令用于完成對(duì)CPSR和SPSR存放器的讀寫。修改了原來的從異常中返回的指令。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V4版本4。與版本3相比,版本4增加了以下指令
有符號(hào)、無符號(hào)的半字和有符號(hào)字節(jié)的load和store指令。增加了T變種,處理器可以工作于Thumb狀態(tài),在該狀態(tài)下的指令集是16位的Thumb指令集。增加了處理器的特權(quán)模式。在該模式下,使用的是用戶模式下的存放器。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V5-版本5主要由兩個(gè)變型版本5T、5TE組成相比與版本4,版本5的指令集有了如下的變化:提高了T變種中ARM/Thumb混合使用的效率。增加前導(dǎo)零記數(shù)〔CLZ〕指令,該指令可使整數(shù)除法和中斷優(yōu)先級(jí)排隊(duì)操作更為有效;增加了BKPT〔軟件斷點(diǎn)〕指令;為協(xié)處理器設(shè)計(jì)提供了更多的可供選擇的指令;更加嚴(yán)格地定義了乘法指令對(duì)條件碼標(biāo)志位的影響。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本V6-版本6是2001年發(fā)布的。新架構(gòu)v6在降低耗電量的同時(shí)還強(qiáng)化了圖形處理性能。通過追加有效進(jìn)行多媒體處理的SIMD功能,將語(yǔ)音及圖像的處理功能提高到了原機(jī)型的4倍。ARM體系版本6首先在2002年春季發(fā)布的ARM11處理器中使用。除此之外,v6還支持多微處理器內(nèi)核。二ARM體系結(jié)構(gòu)與ARM處理器核二.3ARM體系結(jié)構(gòu)版本v7版本,主要有Cortex-A8、Cortex-R4、Cortex-M3和Cortex-M1等處理器,其中A8是面向高性能的應(yīng)用處理器,最高可達(dá)1Ghz的處理速度,更好的支持多媒體及其他高性能要求,最高可達(dá)2000DMIPS;R4主要面向嵌入式實(shí)時(shí)應(yīng)用領(lǐng)域〔Real-Time〕,7級(jí)流水結(jié)構(gòu),相對(duì)于上代ARM1156內(nèi)核,R4在性能、功耗和面積〔PPA:Performance,PowerandArea〕取得更好的平衡,>1.5DMIPS/Mhz和高于400Mhz的處理速度。而M3主要是面向低本錢和高性能的MCU應(yīng)用領(lǐng)域,相比ARM7TDMI,M3面積更小,功耗更低,性能更高。Cortex-M3處理器的核心是基于哈佛架構(gòu)的3級(jí)流水線內(nèi)核,該內(nèi)核集成了分支預(yù)測(cè),單周期乘法,硬件除法等眾多功能強(qiáng)大的特性。二ARM體系結(jié)構(gòu)與ARM處理器核ARM體系結(jié)構(gòu)版本二ARM體系結(jié)構(gòu)與ARM處理器核ARM處理器核ARM7系列ARM9系列ARM10E系列ARM11系列SecurCore系列StrongARM系列Xscale系列系列核介紹ARM7TDMI是ARM公司最早為業(yè)界普遍認(rèn)可且得到了最為廣泛應(yīng)用的處理器核,特別是在和PDA中,隨著ARM技術(shù)的開展,它已是目前最低端的ARM核。ARM7:32位ARM體系結(jié)構(gòu)4T版本;T:“Thumb”16位壓縮指令集;D:支持片上Debug〔調(diào)試〕,使處理器能夠停止以響應(yīng)調(diào)試請(qǐng)求;M:增強(qiáng)型Multiplier,與前代相比具有較高的性能且產(chǎn)生64位的結(jié)果;I:“EmbeddedICE”硬件以支持片上斷點(diǎn)和觀察點(diǎn)ARM7系列核介紹1〕ARM7TDMI組織結(jié):ARM7TDMI重要的特性有實(shí)現(xiàn)ARM體系結(jié)構(gòu)版本4T,支持64位結(jié)果的乘法,半字、有符號(hào)字節(jié)存??;支持Thumb指令集,可降低系統(tǒng)開銷;32×8DSP乘法器;32位尋址空間-4GB線性地址空間;它包含了EmbeddedICE模塊以支持嵌入式系統(tǒng)調(diào)試;調(diào)試硬件由JTAG測(cè)試訪問端口訪問,因此JTAG控制邏輯被認(rèn)為是處理器核的一局部;廣泛的ARM和第三方支持,并與ARM9Thumb系列ARM10Thumb系列和StrongARM處理器相兼容。ARM7系列核介紹2〕ARM7TDMI應(yīng)用ARM7TDMI處理器核在存儲(chǔ)器配置較簡(jiǎn)單的系統(tǒng)中廣泛應(yīng)用,最為成功的典型例子是、PDA,在此應(yīng)用中,ARM7TDMI已成為用于控制和用戶接口功能的事實(shí)上的標(biāo)準(zhǔn)處理器。當(dāng)需要實(shí)現(xiàn)高性能時(shí),具有簡(jiǎn)單存儲(chǔ)器系統(tǒng)單純的ARM7TDMI已不能滿足,系統(tǒng)的復(fù)雜程度必然要增加。往往是在ARM7TDMI上增加Cache存儲(chǔ)器、以ARMCPU核的形式增加軟件從片外存儲(chǔ)器讀、寫性能。系列核介紹ARM8核是從1993年到1996年開發(fā)的,并開發(fā)了具有片上Cache及存儲(chǔ)器管理單元高性能ARMCPU芯片以滿足比ARM7的3級(jí)流水線更高性能的ARM核的需求。ARM9TDMI將流水線的級(jí)數(shù)從ARM7TDMI的3級(jí)增加到5級(jí),并使用分開的指令與數(shù)據(jù)存儲(chǔ)器的Harvard體系結(jié)構(gòu)。ARM9TDMI的性能在相同工藝條件下近似到達(dá)ARM7TDMI兩倍ARM9系列核介紹1〕ARM9TDMI技術(shù)特點(diǎn)支持Thumb指令集;含有EmbeddedICE模塊支持片上調(diào)試;通過采用5級(jí)流水線以增加最高時(shí)鐘速率;分開的指令與數(shù)據(jù)存儲(chǔ)器端口以改善CPI,提高處理器性能。ARM9系列核介紹2〕ARM9TDMI組織ARM9內(nèi)核采用了與后面要講到的StrongARM相同的5級(jí)流水線。ARM9TDMI與StrongARM核的主要區(qū)別在于StrongARM有一個(gè)與存放器讀出級(jí)并行操作的專用的轉(zhuǎn)移加法器進(jìn)行轉(zhuǎn)移地址計(jì)算,而ARM9TDMI使用數(shù)據(jù)路徑中的ALU來計(jì)算轉(zhuǎn)移目標(biāo)地址。ARM9系列核介紹3〕Thumb解碼和存儲(chǔ)器讀寫4〕協(xié)處理器支持5〕片上調(diào)試6〕低電壓操作7〕ARM9TDMI應(yīng)用8〕ARM9E-S及ARM946E-S和ARM966E-SARM10系列核ARM10TDMI屬于ARM處理器核中的高端處理器核,ARM10TDMI的性能在相同工藝條件下近似到達(dá)也以ARM9TDMI的兩倍性能工作。ARM1020E/ARM10200是基于ARM10TDMI核設(shè)計(jì)的高性能CPU核。增加最高時(shí)鐘速率。降低CPI。StrongARM和XScale系列核StrongARM的五級(jí)流水線取指〔從指令Cache〕。指令譯碼及存放器讀;轉(zhuǎn)移目標(biāo)計(jì)算及執(zhí)行。移位及ALU操作,包括數(shù)據(jù)傳送的存儲(chǔ)器地址計(jì)算。數(shù)據(jù)Cache訪問結(jié)果寫回到存放器文件存放器前推通路將中間結(jié)果傳給下一條指令,以防止讀后寫冒險(xiǎn)引起的存放器互鎖停頓。從下一條指令的取指級(jí)傳送PC+4的PC通路給出當(dāng)前指令的PC+8,作為r15并用于轉(zhuǎn)移目標(biāo)計(jì)算。StrongARM和XScale系列核StrongARM處理器流水線的特點(diǎn)要在一個(gè)周期內(nèi)完成存放器控制的移位和基址加變址尋址存儲(chǔ)操作,存放器需要有三個(gè)讀端口。要在一個(gè)周期內(nèi)完成自動(dòng)變址的裝入〔load〕操作,存放器需要兩個(gè)寫端口。執(zhí)行級(jí)的地址增值器支持多裝入〔load〕/存儲(chǔ)〔store〕指令。有很多源可以產(chǎn)生下一個(gè)PC值。StrongARM和XScale系列核IntelXScale系列處理器核是基于ARMv5TE體系結(jié)構(gòu)的,它提供了從手持互聯(lián)網(wǎng)設(shè)備到互聯(lián)網(wǎng)根底設(shè)施產(chǎn)品全面解決方案,支持16位Thumb指令和DSP擴(kuò)充?;赬Scale技術(shù)開發(fā)的系列微處理器,由于超低功率與高性能的組合使IntelXScale適用于廣泛的互聯(lián)網(wǎng)接入設(shè)備SecurCore系列核SecurCore系列微處理器專為平安需要而設(shè)計(jì),提供了完善的32位RISC技術(shù)的平安解決方案,因此,SecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)的低功耗、高性能的特點(diǎn)外,還具有其獨(dú)特的優(yōu)勢(shì),即提供了對(duì)平安解決方案的支持。
帶有靈活的保護(hù)單元,以確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的平安。采用軟內(nèi)核技術(shù),防止外部對(duì)其進(jìn)行掃描探測(cè)??杉捎脩糇约旱钠桨蔡匦院推渌麉f(xié)處理器。三ARM結(jié)構(gòu)圖ARM7ARM7內(nèi)核結(jié)構(gòu)圖ARM7TDMI內(nèi)核的外圍硬件接口信號(hào)圖ARM7芯片結(jié)構(gòu)例如ARM9ARM9內(nèi)部結(jié)構(gòu)圖——TCM緊耦合存儲(chǔ)ARM9內(nèi)部結(jié)構(gòu)圖——MMU存儲(chǔ)管理ARM9芯片結(jié)構(gòu)例如三ARM結(jié)構(gòu)圖ARM7ARM7內(nèi)核結(jié)構(gòu)圖ARM7TDMI內(nèi)核的外圍硬件接口信號(hào)圖三ARM結(jié)構(gòu)圖ARM7ARM9三ARM結(jié)構(gòu)圖ARM7ARM9ARM7TDMI內(nèi)核的外圍硬件接口信號(hào)圖三ARM結(jié)構(gòu)圖三ARM結(jié)構(gòu)圖ARM9ARM9內(nèi)核結(jié)構(gòu)圖ARM9內(nèi)部結(jié)構(gòu)圖——TCM緊耦合存儲(chǔ)ARM9內(nèi)部結(jié)構(gòu)圖——MMU存儲(chǔ)管理ARM9芯片結(jié)構(gòu)例如ARM9內(nèi)核結(jié)構(gòu)圖三ARM結(jié)構(gòu)圖三ARM結(jié)構(gòu)圖三ARM結(jié)構(gòu)圖ARM7ARM9三ARM結(jié)構(gòu)圖三ARM結(jié)構(gòu)圖四編程模型1指令系統(tǒng)2處理器工作狀態(tài)、工作模式、內(nèi)部存放器…………………..1523ARM存儲(chǔ)器接口及存儲(chǔ)器層次1674嵌入式應(yīng)用軟件開發(fā)的根本流程245指令系統(tǒng)介紹所有早期的ARM處理器核,直到ARM7TDMI,都是基于簡(jiǎn)單的取指―譯碼―執(zhí)行流水線。從AcornComputers公司在80年代早期開發(fā)的最初的ARM1,直到今天在多數(shù)移動(dòng)中使用的ARM7TDMI核,根本的操作原理幾乎沒變。ARM公司在第一個(gè)十年的開發(fā)工作都集中于以下幾個(gè)方面:通過關(guān)鍵路徑的優(yōu)化和工藝尺寸的縮小來改善性能。通過靜態(tài)CMOS邏輯、降低電源電壓和代碼壓縮〔Thumb指令集〕實(shí)現(xiàn)低功耗應(yīng)用。通過增加片上調(diào)試特性、片上總線和軟件工具來支持系統(tǒng)開發(fā)。ARM7TDMI代表這個(gè)開發(fā)過程的頂點(diǎn),在一個(gè)由PC和日益復(fù)雜的超標(biāo)量、超流水線、高性能〔也很高功耗〕微處理器占優(yōu)勢(shì)的世界里,它的商業(yè)成功顯示了原先非常簡(jiǎn)單的3級(jí)流水線的生命力。在ARM開發(fā)的第二個(gè)十年里,在尋求高性能中出現(xiàn)了ARM組織的審慎多樣化:向5級(jí)流水線邁出的第一步獲得了雙倍的性能〔所有其它因素都相等〕,代價(jià)是在核中參加某些前推邏輯,以及雙倍帶寬存儲(chǔ)器〔例如在ARM8中〕或分別的指令與數(shù)據(jù)存儲(chǔ)器〔例如在ARM9TDMI和StrongARM中〕。在ARM10TDMI中取得的下一步性能加倍是相當(dāng)艱難的。6級(jí)流水線與以前使用的5級(jí)流水線頗為相似,但是存儲(chǔ)器訪問的時(shí)間槽分配被擴(kuò)展了,使存儲(chǔ)器能夠不用花費(fèi)過多的功耗即可支持更高的時(shí)鐘速率。處理器核還采用了更多的分隔:在取指單元,使轉(zhuǎn)移能被預(yù)測(cè)并從指令流中去除,在數(shù)據(jù)存儲(chǔ)器接口,使得當(dāng)需要一些時(shí)間解決數(shù)據(jù)訪問時(shí)〔例如由于cache的失效〕處理器能夠繼續(xù)執(zhí)行。
性能的改善是通過增加時(shí)鐘頻率和降低CPI〔每條指令的平均時(shí)鐘數(shù)〕來實(shí)現(xiàn)的。增加時(shí)鐘速率通常需要流水線的級(jí)數(shù)增多,而這往往損失CPI,所以需要采取補(bǔ)救措施來挽回CPI的損失并進(jìn)一步改善它。到現(xiàn)在,所有ARM處理器都是基于每個(gè)時(shí)鐘周期至多發(fā)射一條指令的組織結(jié)構(gòu),而且總是按程序的順序。ARM10TDMI和AMULET3處理器處理無序的實(shí)現(xiàn),以便在數(shù)據(jù)讀寫速度較慢時(shí)保持指令流,這兩種處理器也包括轉(zhuǎn)移預(yù)測(cè)邏輯以減少在執(zhí)行轉(zhuǎn)移指令時(shí)對(duì)流水線的再填充。AMULET3消除了預(yù)測(cè)的轉(zhuǎn)移指令的取指但仍然執(zhí)行它;ARM10TDMI讀取轉(zhuǎn)移指令然而抑制了指令的執(zhí)行。但是按照今天高端PC和工作站處理器的標(biāo)準(zhǔn),這些仍然是很簡(jiǎn)單的機(jī)器。這種簡(jiǎn)單性在系統(tǒng)芯片的應(yīng)用中有直接的好處,這種簡(jiǎn)單的處理器比復(fù)雜的處理器需要較少的晶體管,因而使用較小的芯片面積,消費(fèi)較少的功耗。四編程模型1指令系統(tǒng)2處理器工作狀態(tài)、工作模式、存儲(chǔ)器結(jié)構(gòu)3ARM存儲(chǔ)器接口及存儲(chǔ)器層次4匯編程序設(shè)計(jì)5嵌入式應(yīng)用軟件開發(fā)的根本流程四.1
ARM指令集4.1.1ARM指令集概述4.1.2ARM尋址方式4.1.3ARM指令詳細(xì)介紹4.1.4Thumb指令集4.1.5Thumb指令詳細(xì)介紹ARM指令集概述ARM指令集是32位的,程序的啟動(dòng)都是從ARM指令集開始。所有的ARM指令集都可以是有條件執(zhí)行的。本節(jié)從以下三個(gè)方面介紹:1指令集編碼
2條件執(zhí)行
3指令分類及指令格式
指令集編碼ARM指令集是以32位二進(jìn)制編碼的方式給出的,大局部的指令編碼中定義了第一操作數(shù)、第二操作數(shù)、目的操作數(shù)、條件標(biāo)志影響位以及每條指令所對(duì)應(yīng)的不同功能實(shí)現(xiàn)的二進(jìn)制位。每條32位ARM指令都具有不同的二進(jìn)制編碼方式,和不同的指令功能相對(duì)應(yīng)。條件執(zhí)行ARM指令根據(jù)CPSR中的條件位自動(dòng)判斷是否執(zhí)行指令,在條件滿足時(shí),指令執(zhí)行,否那么指令被忽略。在ARM的指令編碼表中,統(tǒng)一占用編碼的最高四位[31:28]來表示“條件碼”〔即“cond”〕。ARM指令的根本格式如下:〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}條件域表1條件碼后綴標(biāo)
志含
義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號(hào)數(shù)大于或等于0011CCC清零無符號(hào)數(shù)小于0100MIN置位負(fù)數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出條件域表2條件碼后綴標(biāo)
志含
義1001LSC清零Z置位無符號(hào)數(shù)小于或等于1010GEN等于V帶符號(hào)數(shù)大于或等于1011LTN不等于V帶符號(hào)數(shù)小于1100GTZ清零且(N等于V)帶符號(hào)數(shù)大于1101LEZ置位或(N不等于V)帶符號(hào)數(shù)小于或等于1110AL忽略無條件執(zhí)行指令分類及指令格式ARM指令集可以分為六大類,分別為數(shù)據(jù)處理指令、Load/Store指令、跳轉(zhuǎn)指令、程序狀態(tài)存放器處理指令、協(xié)處理器指令和異常產(chǎn)生指令。ARM指令使用的根本格式如下:〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}指令格式中符號(hào)說明〈opcode〉{〈cond〉}{S}〈Rd〉,〈Rn〉{,〈operand2〉}opcode 操作碼;指令助記符,如LDR、STR等。cond 可選的條件碼;執(zhí)行條件,如EQ、NE等。S 可選后綴;假設(shè)指定“S”,那么根據(jù)指令執(zhí)行結(jié)果更新CPSR中的條件碼。Rd 目標(biāo)存放器。Rn 存放第1操作數(shù)的存放器。operand2 第2個(gè)操作數(shù)4.1.1.4Thumb指令集概述
ARM開發(fā)工具完全支持Thumb指令,應(yīng)用程序可以靈活的將ARM和Thumb子程序混合編程以便在例程的根底上提高性能或代碼密度。在編寫Thumb指令時(shí),先要用偽指令CODE16聲明〔ADS的編譯環(huán)境下〕,而且在ARM指令中要使用BX指令跳轉(zhuǎn)到Thumb指令,以切換處理器狀態(tài)。本節(jié)可以分為以下幾個(gè)局部:Thumb指令集編碼4.1.2Thumb狀態(tài)切換4.1.3編程模型4.1.4Thumb指令集特性指令集編碼Thumb指令集編碼如下:編程模型Thumb指令集是ARM指令集的一個(gè)子集,并只能對(duì)限定的ARM存放器進(jìn)行操作。其編程模型如以下圖所示:
r0r1r2r3r4r5r6r7r8r9r10r11r12SP(r13)LR(r14)PC(r15)Lo寄存器Hi寄存器CPSR有陰影的寄存器訪問時(shí)受到限制指令集特點(diǎn)Thumb指令繼承了ARM指令集的許多特點(diǎn)Thumb指令也是采用Load/Store結(jié)構(gòu),有數(shù)據(jù)處理、數(shù)據(jù)傳送及流控制指令等。Thumb指令集丟棄了ARM指令集一些特性大多數(shù)Thumb指令是無條件執(zhí)行的〔除了轉(zhuǎn)移指令B〕,而所有ARM指令都是條件執(zhí)行的。許多Thumb數(shù)據(jù)處理指令采用2地址格式,即目的存放器與一個(gè)源存放器相同,而大多數(shù)ARM數(shù)據(jù)處理指令采用的是3地址格式〔除了64位乘法指令外〕。Thumb異常時(shí)表現(xiàn)的一些特點(diǎn)所有異常都會(huì)使微處理器返回到ARM模式狀態(tài),并在ARM的編程模式中處理。由于ARM微處理器字傳送地址必須可被4整除〔即字對(duì)準(zhǔn)〕,半字傳送地址必須可被2整除〔即半字對(duì)準(zhǔn)〕。而Thumb指令是2個(gè)字節(jié)長(zhǎng),而不是4個(gè)字節(jié),所以,由Thumb執(zhí)行狀態(tài)進(jìn)入異常時(shí)其自然偏移與ARM不同。ARM尋址方式立即尋址存放器尋址存放器間接尋址基址加偏址尋址堆棧尋址塊拷貝尋址相對(duì)尋址
立即尋址
立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就在指令中給出,只要取出指令也就取到了操作數(shù),這個(gè)操作數(shù)被稱為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。例如以下指令:
ADD R0,R0,#1 /*R0←R0+1*/ADD R0,R0,#0x3f /*R0←R0+0x3f*/
在以上兩條指令中,第二個(gè)源操作數(shù)即為立即數(shù),要求以“#”為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在“#”后加上“0x”。存放器尋址存放器尋址就是利用存放器中的數(shù)值作為操作數(shù),這種尋址方式是各類微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。以下指令:ADD R0,R1,R2 /*R0←R1+R2*/
該指令的執(zhí)行效果是將存放器R1和R2的內(nèi)容相加,其結(jié)果存放在存放器R0中。存放器尋址第二操作數(shù)為存放器型的移位操作在ARM指令的數(shù)據(jù)處理指令中參與操作的第二操作數(shù)為存放器型時(shí),在執(zhí)行存放器尋址操作時(shí),可以選擇是否對(duì)第二操作數(shù)進(jìn)行移位,即Rm,{<shift>},其中Rm稱為第二操作數(shù)存放器,<shift>用來指定移位類型〔LSL,LSR,ASL,ASR,ROR或RRX〕和移位位數(shù)。移位位數(shù)可以是5位立即數(shù)〔#<#shift>〕或存放器〔Rs〕。在指令執(zhí)行時(shí)將移位后的內(nèi)容作為第二操作數(shù)參與運(yùn)算。例如指令:ADDR3,R2,R1,LSR#2;R3<—R2+R1÷4存放器尋址第二操作數(shù)移位方式LSL:邏輯左移,空出的最低有效位用0填充。LSR:邏輯右移,空出的最高有效位用0填充。ASL:算術(shù)左移,由于左移空出的有效位用0填充,因此它與LSL同義。ASR:算術(shù)右移,算術(shù)移位的對(duì)象是帶符號(hào)數(shù),移位過程中必須保持操作數(shù)的符號(hào)不變。如果源操作數(shù)是正數(shù),空出的最高有效位用0填充,如果是負(fù)數(shù)用1填充。ROR:循環(huán)右移,移出的字的最低有效位依次填入空出的最高有效位。RRX:帶擴(kuò)展的循環(huán)右移。將存放器的內(nèi)容循環(huán)右移1位,空位用原來C標(biāo)志位填充。存放器尋址存放器尋址第二操作數(shù)的移位位數(shù)移位位數(shù)可以用立即數(shù)方式或者存放器方式給出,如下所示:ADDR3,R2,R1,LSR#2 ;R3<—R2+R1÷4ADDR3,R2,R1,LSRR4 ;R3<—R2+R1÷2R4存放器R1的內(nèi)容分別邏輯右移2位、R4位〔亦即R1÷4、R1÷2R4〕,再與存放器R2的內(nèi)容相加,結(jié)果放入R3中。存放器間接尋址 存放器間接尋址就是以存放器中的值作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。例如以下指令:LDR R0,[R1] /*R0←[R1]*/STR R0,[R1] /*[R1]←R0*/第一條指令將以R1的值為地址的存儲(chǔ)器中的數(shù)據(jù)傳送到R0中。第二條指令將R0的值傳送到以R1的值為地址的存儲(chǔ)器中?;芳悠穼ぶ?基址變址尋址就是將存放器〔該存放器一般稱作基址存放器〕的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于訪問某基地址附近的地址單元。采用變址尋址方式的指令又可以分為以下幾種形式:前變址模式:LDRR0,[R1,#4] ;R0←[R1+4]自動(dòng)變址模式:LDRR0,[R1,#4]! ;R0←[R1+4]、R1←R1+4后變址模式:LDRR0,[R1],#4 ;R0←[R1]、R1←R1+4基址加偏址尋址 基址存放器的地址偏移可以是一個(gè)立即數(shù),也可以是另一個(gè)存放器,并且在加到基址存放器前還可以經(jīng)過移位操作,如下所示:LDRr0,[r1,r2];r0<—mem32[r1+r2]LDRr0,[r1,r2,LSL#2];r0<—[r1+r2*4] 但常用的是立即數(shù)偏移的形式,地址偏移為存放器形式的指令很少使用。堆棧尋址堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出〔FirstInLastOut,F(xiàn)ILO〕的方式工作,使用一個(gè)稱作堆棧指針的專用存放器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱為滿堆?!睩ullStack〕,而當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱為空堆棧〔EmptyStack〕。即訪問存儲(chǔ)器時(shí),存儲(chǔ)器的地址向高地址方向生長(zhǎng),稱為遞增堆?!瞐scendingstack〕。存儲(chǔ)器的地址向低地址方向生長(zhǎng),稱為遞減堆?!瞕escendingstack〕。堆棧尋址四種類型的堆棧工作方式
滿遞增堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。滿遞減堆棧:堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成??者f增堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成??者f減堆棧:堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成塊拷貝尋址塊拷貝尋址是多存放器傳送指令LDM/STM的尋址方式。LDM/STM指令可以把存儲(chǔ)器中的一個(gè)數(shù)據(jù)塊加載到多個(gè)存放器中,也可以把多個(gè)存放器中的內(nèi)容保存到存儲(chǔ)器中。尋址操作中的存放器可以是R0-R15這16個(gè)存放器的子集或是所有存放器。LDM/STM指令依據(jù)其后綴名的不同其尋址的方式也有很大不同,見下表。相對(duì)尋址
與基址變址尋址方式相類似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。以下程序段完成子程序的調(diào)用和返回,跳轉(zhuǎn)指令BL采用了相對(duì)尋址方式:
BL NEXT ;跳轉(zhuǎn)到子程序
;
NEXT處執(zhí)行
……
NEXT …… MOV PC,LR ;從子程序返回
四.2處理器工作狀態(tài)、工作模式、內(nèi)部存放器處理器狀態(tài)ARM7TDMI處理器內(nèi)核使用V4T版本的ARM結(jié)構(gòu),該結(jié)構(gòu)包含32位ARM指令集和Thumb指令集,因此ARM7TDMI處理器有兩種操作狀態(tài):ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行的是字方式的ARM指令;Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式的Thumb指令。兩個(gè)狀態(tài)之間的切換并不影響處理器模式或存放器內(nèi)容。四.2處理器工作狀態(tài)、工作模式、內(nèi)部存放器工作模式ARM體系結(jié)構(gòu)支持7種處理器工作模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率。四.2處理器工作狀態(tài)、工作模式、內(nèi)部存放器工作模式工作模式說明旁注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式的特權(quán)快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理快中斷異常響應(yīng)時(shí)進(jìn)入此模式中斷(irq)用于通用中斷處理普通中斷響應(yīng)時(shí)進(jìn)入此模式管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí)進(jìn)入此模式中止(abt)用于支持虛擬內(nèi)存和/或存儲(chǔ)器保護(hù)在ARM7TDMI沒有多大用處未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時(shí)進(jìn)入此模式四.2處理器工作狀態(tài)、工作模式、內(nèi)部存放器ARM狀態(tài)下的存放器組織在ARM7TDMI處理器內(nèi)部有37個(gè)用戶可見的存放器。不同的工作模式和處理器狀態(tài)下,程序員可以訪問的存放器也不盡相同。R0R1R2R3R4R5R6R7R8R9R10R11R12R15(PC)通用寄存器和程序計(jì)數(shù)器狀態(tài)寄存器R14(LR)R14-svcR14-abtR14-undR14-irqR14-fiqCPSR無SPSR-svc系統(tǒng)管理中止未定義普通中斷快速中斷R13(SP)R13-svcR13-abtR13-undR13-irqR13-fiqR12-fiqR11-fiqR10-fiqR9-fiqR8-fiqSPSR-abtSPSR-undSPSR-irqSPSR-fiq用戶異常模式
特權(quán)模式
ARM狀態(tài)下的寄存器組織
模式ARM狀態(tài)下的存放器組織1.ARM狀態(tài)的存放器簡(jiǎn)介2.ARM狀態(tài)的通用存放器3.ARM程序狀態(tài)存放器四.2處理器工作狀態(tài)、工作模式、內(nèi)部存放器ARM程序狀態(tài)存放器條件碼標(biāo)志控制位最低8位I,F(xiàn),T和M[4:0]位用做控制位。當(dāng)異常出現(xiàn)時(shí)改變控制位。當(dāng)處理器在特權(quán)模式下時(shí)也可以由軟件改變。I&F中斷禁止位I=1那么禁止IRQ中斷;F=1那么禁止FIQ中斷。T位T=0指示ARM執(zhí)行;T=1指示Thumb執(zhí)行。M模式位M0,M1,M2,M3和M4〔M[4:0]〕是模式位,這些位決定處理器的工作模式,如圖2-4所示。注意,M[4:0]其他組合的結(jié)果是不可預(yù)知的。其他位NZCV..…….IFTM4M3M2M1M0M[4:0]0b100000b100010b100100b10011模式用戶FIQIRQ管理0b101110b11011中止未定義0b11111系統(tǒng)模式位工作狀態(tài)位1:Thumb0:ARMFIQ中斷禁止位1:禁止0:允許IRQ中斷禁止位1:禁止0:允許OverflowCarryZeroNegative圖2-5程序狀態(tài)寄存器條件碼標(biāo)志位保留位控制位ARM存放器組成ARM存放器組成概述ARM狀態(tài)下的存放器組織Thumb狀態(tài)下的存放器組織Thumb狀態(tài)下的存放器組織Thumb狀態(tài)下的存放器組織概述Thumb狀態(tài)和ARM狀態(tài)下的存放器關(guān)系Thumb狀態(tài)下的存放器組織概述Thumb狀態(tài)下的存放器集是ARM狀態(tài)下存放器集的子集。程序員可以直接訪問8個(gè)通用的存放器〔R0~R7〕,程序計(jì)數(shù)器PC、堆棧指針SP、連接存放器LR和當(dāng)前狀態(tài)存放器CPSP。每一種特權(quán)模式都各有一組SP,LR和SPSR。圖2-6為Thumb狀態(tài)下存放器組織圖。圖2-6Thumb狀態(tài)下的寄存器組織R0R1R2R3R4R5R6R7R15(PC)R14(LR)R14-svcR14-abtR14-undR14-irqR14-fiqCPSR無SPSR-svc系統(tǒng)管理中止未定義普通中斷快速中斷R13(SP)R13-svcR13-abtR13-undR13-irqR13-fiqSPSR-abtSPSR-undSPSR-irqSPSR-fiq用戶Thumb狀態(tài)和ARM狀態(tài)下的存放器關(guān)系Thumb狀態(tài)的R0~R7與ARM狀態(tài)的R0~R7是一致的。Thumb狀態(tài)的CPSR和SPSR與ARM狀態(tài)的CPSR和SPSR是一致的。Thumb狀態(tài)的SP映射到ARM狀態(tài)的R13。Thumb狀態(tài)的LR映射到ARM狀態(tài)的R14。Thumb狀態(tài)的PC映射到ARM狀態(tài)的PC〔R15〕。高存放器R8~R15并不是標(biāo)準(zhǔn)存放器集的一局部,在使用它們時(shí)有一定的限制。四.3ARM存儲(chǔ)器接口及存儲(chǔ)器層次
ARM存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式ARM的存儲(chǔ)器層次簡(jiǎn)介ARM存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式ARM支持的數(shù)據(jù)類型ARM處理器支持以下6種數(shù)據(jù)類型:8位有符號(hào)和無符號(hào)字節(jié)。16位有符號(hào)和無符號(hào)半字,它們以兩字節(jié)的邊界定位。32位有符號(hào)和無符號(hào)字,它們以4字節(jié)的邊界定位。較早的ARM處理器不支持半字和有符號(hào)字節(jié)〕ARM存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式ARM存儲(chǔ)數(shù)據(jù)類型和存儲(chǔ)格式“小端”格式:較高的有效字節(jié)存放在較高的存儲(chǔ)器地址,較低的有效字節(jié)存放在較低的存儲(chǔ)器地址?!按蠖恕备袷剑狠^高的有效字節(jié)存放在較低的存儲(chǔ)器地址,較低的有效字節(jié)存放在較高的存儲(chǔ)器地址。ARM處理器能方便的配置為其中任何一種存儲(chǔ)器方式,但它們的缺省設(shè)置為小端格式。在本書中我們將通篇采用“小端”格式,即較高的有效字節(jié)存放在較高存儲(chǔ)器地址ARM的存儲(chǔ)器層次簡(jiǎn)介存放器組片上RAM/FLASH片上Cache主存儲(chǔ)器4.4嵌入式應(yīng)用軟件開發(fā)的根本流程圖1-7嵌入式軟件開發(fā)流程圖鏈接器命令文件編譯預(yù)處理編譯器匯編器Archive工具鏈接器和定位器頭文件(*.h,*.hpp)可重定位目標(biāo)文件庫(kù)文件(*.a,*.lib)頭文件(*.h,*.hpp)C/C++源代碼匯編源代碼源文件列表源文件列表源代碼編輯階段源文件編譯階段鏈接與重定位調(diào)試與下載階段重定位文件表(*.o,*.a)共享目標(biāo)文件(*.o,*.a)可執(zhí)行映象(*.elf,*.coff)鏈接映射文件(*.map)設(shè)備程序員目標(biāo)開發(fā)系統(tǒng)開發(fā)流程工程建立源文件編譯調(diào)試固化C語(yǔ)言程序*.c匯編源程序*.s鏈接腳本文件*.ld命令腳本文件*.CS存儲(chǔ)區(qū)映像文件*.map在系統(tǒng)級(jí)別的嵌入式開發(fā)中需要使用鏈接定位文件,該文件描述代碼鏈接定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對(duì)整個(gè)系統(tǒng)的代碼做正確的定位,該文件稱為鏈接腳本文件〔*.ld〕SECTIONS{ .=0x0C000000; Image_RO_Base=.;
.text
:{*(.text)}; Image_RO_Limit=.; Image_RW_Base=.;
.data:{*(.data)};
.rodata:{*(.rodata)}; Image_ZI_Base=.;
.bss:{*(.bss)}; Image_ZI_Limit=.; Image_RW_Limit=.; __bss_start__=.; __bss_end__=.; __EH_FRAME_BEGIN__=.; __EH_FRAME_END__=.;PROVIDE(__stack=.); end=.; _end=.; .debug_info 0:{*(.debug_info)} .debug_line 0:{*(.debug_line)} .debug_abbrev 0:{*(.debug_abbrev)} .debug_frame 0:{*(.debug_frame)}}賦當(dāng)前地址,可能為RAM或Flash的訪問地址只讀區(qū)域基地址,啟動(dòng)程序中使用的符號(hào)代碼段,在這里標(biāo)識(shí)開始放置程序代碼只讀區(qū)域長(zhǎng)度,啟動(dòng)程序中使用的符號(hào)讀寫區(qū)域基地址,啟動(dòng)程序中使用的符號(hào)數(shù)據(jù)段,程序中已初始化的全局變量放在該段只讀數(shù)據(jù)段,程序中靜態(tài)全局變量等固定值放在該段清零區(qū)域基地址,啟動(dòng)程序中使用的符號(hào)包含未初始化的全局可用數(shù)據(jù),如未初始化全局變量清零區(qū)域長(zhǎng)度,啟動(dòng)程序中使用的符號(hào)讀寫區(qū)域基長(zhǎng)度,啟動(dòng)程序中使用的符號(hào)調(diào)試信息gcc庫(kù)專用鏈接腳本文件及例如SECTIONS{
.=0x0C000000;Image_RO_Base=.;
.text:{*(.text)};
Image_RO_Limit=.;
Image_RW_Base=.;
.data:{*(.data)};.rodata:{*(.rodata)};Image_ZI_Base=.;
.bss:{*(.bss)};Image_ZI_Limit=.;Image_RW_Limit=.;……SECTIONS{
.=0x00000000;
Image_RO_Base=.;
.text:{*(.text)};.rodata:{*(.rodata)};
Image_RO_Limit=.;
.=0x0C000000;Image_RW_Base=.;
.data:{*(.data)};
Image_ZI_Base=.;
.bss:{*(.bss)};Image_ZI_Limit=.;Image_RW_Limit=.;……鏈接腳本文件比較在RAM中調(diào)試在Flash中固化RAM地址FLASH地址只讀數(shù)據(jù)intA1;intA2=5;constintA3=10;
voidmain(){ intA4; registerintA5; A4=A3;}.text:{*(.text)};代碼段,在這里標(biāo)識(shí)從0開始放置程序代碼
.rodata:{*(.rodata)};只讀數(shù)據(jù)段,程序中靜態(tài)全局變量等固定值放在該段.data:{*(.data)};數(shù)據(jù)段,程序中已初始化的全局變量放在該段.bss:{*(.bss)}; 包含未初始化的全局可用數(shù)據(jù),如未初始化全局變量變量A1作為未初始化的變量將保存在.bss段中變量A2作為已初始化的變量將保存在.data段中常量A3保存在只讀數(shù)據(jù)斷.rodata段中main函數(shù)對(duì)應(yīng)的代碼保存在.text段中寄存器變量A5直接保存在ARM的一個(gè)寄存器中局部變量A4當(dāng)程序執(zhí)行到main函數(shù)時(shí)存放在main函數(shù)對(duì)應(yīng)的函數(shù)棧中鏈接腳本與程序的對(duì)應(yīng)鏈接標(biāo)準(zhǔn)函數(shù)庫(kù)鏈接排列順序?yàn)?/p>
-lm
-lc
-lgcc
-lgEmbestIDE附帶的GNU標(biāo)準(zhǔn)函數(shù)庫(kù)標(biāo)準(zhǔn)C函數(shù)庫(kù)libc.a -lc標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)庫(kù)libm.a -lm標(biāo)準(zhǔn)函數(shù)庫(kù)的支持庫(kù)libg.a -lgGCC的支持庫(kù)libgcc.a -lgcc函數(shù)庫(kù)的支持模式ARM
Little-EndianARM
Little-Endian
InterworkARM
Big-EndianARM
Big-Endian
InterworkThumb
Little-EndianThumb
Little-Endian
InterworkThumb
Big-EndianThumb
Big-Endian
Interwork啟動(dòng)代碼分析中斷程序解析ARM編程特別是系統(tǒng)初始化代碼的編寫中通常需要實(shí)現(xiàn)中斷的響應(yīng)、解析跳轉(zhuǎn)和返回等操作,以便支持上層應(yīng)用程序的開發(fā),而這往往是困擾初學(xué)者的一個(gè)難題。中斷處理的編程實(shí)現(xiàn)需要深入了解ARM內(nèi)核和處理器本身的中斷特征,從而設(shè)計(jì)一種快速簡(jiǎn)便的中斷處理機(jī)制。ARM微處理器會(huì)執(zhí)行以下幾步操作:
1〕保存處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位;
2〕設(shè)置當(dāng)前程序狀態(tài)存放器CPSR中相應(yīng)的位;
3〕將存放器lr_mode設(shè)置成返回地址;
4〕將程序計(jì)數(shù)器(PC)值設(shè)置成該異常中斷的中斷向量地址,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。
ARM處理器內(nèi)核會(huì)自動(dòng)執(zhí)行以上四步,程序計(jì)數(shù)器PC總是跳轉(zhuǎn)到相應(yīng)的固定地址。從異常中斷處理程序中返回包括下面兩個(gè)根本操作:
1〕恢復(fù)被屏蔽的程序的處理器狀態(tài);
2〕返回到發(fā)生異常中斷的指令的下一條指令處繼續(xù)執(zhí)行。
解析程序的概念和作用
如前所述,ARM處理器響應(yīng)中斷的時(shí)候,總是從固定的地址開始的,而在高級(jí)語(yǔ)言環(huán)境下開發(fā)中斷效勞程序時(shí),無法控制固定地址開始的跳轉(zhuǎn)流程。為了使得上層應(yīng)用程序與硬件中斷跳轉(zhuǎn)聯(lián)系起來,需要編寫一段中間的效勞程序來進(jìn)行連接。這樣的效勞程序常被稱作中斷解析程序。每個(gè)異常中斷對(duì)應(yīng)一個(gè)4字節(jié)的空間,正好放置一條跳轉(zhuǎn)指令或者向PC存放器賦值的數(shù)據(jù)訪問指令。理論上可以通過這兩種指令直接使得程序跳轉(zhuǎn)到對(duì)應(yīng)的中斷處理程序中去。但實(shí)際上由于函數(shù)地址值為未知和其它一些問題,并不這么做。這里給出一種常用的中斷跳轉(zhuǎn)流程:
這個(gè)流程中的關(guān)鍵局部是中斷向量表,為了讓解析程序能找到向量表,應(yīng)該將向量表的地址固定化〔編程者自定義〕。這樣,整個(gè)跳轉(zhuǎn)流程的所有程序地址都是固定的,當(dāng)中斷觸發(fā)后,就可以自動(dòng)運(yùn)行。其中,只有向量表的內(nèi)容是可變的,編程者只要在向量表中填入正確的目標(biāo)地址值就可以了。這使得上層中斷處理程序和底層硬件跳轉(zhuǎn)有機(jī)地聯(lián)系起來。
事例就可防止在應(yīng)用程序中計(jì)算中斷的跳轉(zhuǎn)地址,并且可以很方便的選擇不同的函數(shù)作為指定中斷的效勞程序。當(dāng)然,在程序開發(fā)時(shí)要合理開辟好向量表,防止對(duì)向量表地址空間不必要的寫操作。解析程序的擴(kuò)展
眾所周知,在ARM處理器中會(huì)包含很多中斷源,通常會(huì)在ARM內(nèi)核外面擴(kuò)展一個(gè)中斷控制器來管理各種原因產(chǎn)生的中斷。比方,三星公司的S3C4510B處理器中的IRQ/FIQ類型的中斷源可以有21個(gè),S3C44B0X有26個(gè)。S3C2410X有56個(gè)這時(shí)候中斷處理的原理還是一樣的,無非是向量表更長(zhǎng),并且當(dāng)一個(gè)中斷觸發(fā)以后,需要在解析程序里查詢中斷控制器的狀態(tài)來確定具體的中斷源,再根據(jù)中斷源來讀取向量表中的對(duì)應(yīng)地址內(nèi)容。其處理流程可用以下圖表示。
向量中斷的處理
一些處理器在設(shè)計(jì)外擴(kuò)的中斷控制器時(shí)提供了一種叫做“向量中斷”的中斷跳轉(zhuǎn)機(jī)制。這與擴(kuò)展解析跳轉(zhuǎn)流程有所不同,它不需要軟件來識(shí)別具體的中斷源,也就是不需要添加上圖中的IRQ/FIQ效勞程序,而完全由硬件自動(dòng)跳轉(zhuǎn)到對(duì)應(yīng)的中斷地址。其它跳轉(zhuǎn)流程的原理都是一樣的。這相當(dāng)于擴(kuò)展了ARM內(nèi)核的硬件中斷向量表,減小了中斷響應(yīng)延時(shí)。以S3C44B0X處理器的外部中斷0為例,需要在其對(duì)應(yīng)的硬件固定跳轉(zhuǎn)地址0x00000020處添加指令:ldr
pc,=HandlerEINT,使得程序跳轉(zhuǎn)到其效勞程序HandlerEINT0處執(zhí)行。
五操作系統(tǒng)操作系統(tǒng)簡(jiǎn)介常見的操作系統(tǒng)有:商用型:VxWorks、WindowsCE、Psos、PalmOS、OS-9、LynxOS、QNX、LYN免費(fèi)型:linux、μC/OS-Ⅱ、eCos等在什么情況下需要操作系統(tǒng):完全取決于軟件的復(fù)雜程度操作系統(tǒng)在什么情況下需要操作系統(tǒng)?完全取決于軟件的復(fù)雜程度嵌入式實(shí)時(shí)多任務(wù)操作系統(tǒng)的主要特征:一個(gè)是多任務(wù),二是實(shí)時(shí),三是基于優(yōu)先級(jí)控制,所以用戶需不需要使用實(shí)時(shí)多任務(wù)操作系統(tǒng),也主要是考慮對(duì)這三個(gè)方面的需求。如果一個(gè)軟件工程并行的功能模塊比較多,定時(shí)處理的功能比較多,程序的執(zhí)行需要判斷很多條件參數(shù)和資源,這時(shí)候我們可以考慮利用RTOS的多任務(wù)能力同樣,如果我們經(jīng)常需要考慮某些代碼之間執(zhí)行的優(yōu)先順序,那么可以利用RTOS的基于優(yōu)先級(jí)的控制能力操作系統(tǒng)以u(píng)c/osII為例簡(jiǎn)要介紹。μC/OS-Ⅱ簡(jiǎn)介
μC/OS-Ⅱ是一個(gè)真正的實(shí)時(shí)操作系統(tǒng),采用可剝奪型內(nèi)核,即它總是執(zhí)行就緒條件下優(yōu)先級(jí)最高的任務(wù)。為了簡(jiǎn)化系統(tǒng)的設(shè)計(jì),μC/OS-Ⅱ規(guī)定所有任務(wù)的優(yōu)先級(jí)必須不同,任務(wù)的優(yōu)先級(jí)就唯一地標(biāo)識(shí)了該任務(wù)的重要性及執(zhí)行次序。μC/OS-Ⅱ?qū)嶋H上是一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,只包含任務(wù)調(diào)度、任務(wù)管理、時(shí)間管理、內(nèi)存管理和任務(wù)間的通信與同步等根本功能。沒有提供輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)之類的額外效勞。但是由于μC/OS-Ⅱ的可移植性和開源性,用戶可以自己添加所需的各種效勞。目前,已經(jīng)出現(xiàn)了專門為μC/OS-Ⅱ開發(fā)文件系統(tǒng)、TCP/IP協(xié)議棧、用戶顯示接口等的第三方商家。64個(gè)任務(wù)無限循環(huán)的函數(shù)空閑任務(wù)OSTaskIdle〔〕統(tǒng)計(jì)任務(wù)OSTaskStat〔〕1、任務(wù)管理uC/OS-II提供以下任務(wù)的管理的函數(shù)
OSTaskCreate()建立任務(wù)OSTaskDel()刪除任務(wù)OSTaskDelReq()請(qǐng)求刪除任務(wù)OSTaskChangePrio()改變?nèi)蝿?wù)的優(yōu)先級(jí)OSTaskSuspend()掛起任務(wù)OSTaskResume()恢復(fù)任務(wù)OSTaskStkChk()堆棧檢驗(yàn)OSTaskQuery()獲得有關(guān)任務(wù)的信息2、內(nèi)存管理ANSIC中,一般采用malloc〔〕和free〔〕這兩個(gè)函數(shù)動(dòng)態(tài)地分配和釋放內(nèi)存。這樣,隨著內(nèi)存空間的不斷分配與釋放,就會(huì)把原來很大的一塊連續(xù)內(nèi)存區(qū)域逐漸地分割成許多非常小的但彼此之間又不相鄰的內(nèi)存塊,這樣就會(huì)產(chǎn)生內(nèi)存碎片問題。為了消除了屢次分配與釋放內(nèi)存所引起的內(nèi)存碎片問題,μC/OS-Ⅱ把連續(xù)的大塊內(nèi)存按分區(qū)來管理。每個(gè)分區(qū)中都包含整數(shù)個(gè)大小相同的內(nèi)存塊,但不同分區(qū)之間內(nèi)存塊的大小可以不同。這樣,用戶在需要?jiǎng)討B(tài)分配內(nèi)存時(shí),可選擇一個(gè)適當(dāng)?shù)姆謪^(qū),按塊來進(jìn)行內(nèi)存分配。釋放內(nèi)存時(shí)將該塊放回它以前所屬的分區(qū),這樣就能有效解決內(nèi)存碎片問題。而且每次調(diào)用malloc〔〕和free〔〕分配和釋放的都是整數(shù)倍的固定內(nèi)存塊長(zhǎng),這樣執(zhí)行時(shí)間就是確定的了。3、時(shí)間管理μC/OS-Ⅱ要求用戶提供一個(gè)稱為時(shí)鐘節(jié)拍的定時(shí)中斷,以實(shí)現(xiàn)延時(shí)與超時(shí)控制等功能。該中斷每秒發(fā)生10至100次,時(shí)鐘節(jié)拍的實(shí)際頻率是由用戶控制的。任務(wù)申請(qǐng)延時(shí)或超時(shí)控制的計(jì)時(shí)基準(zhǔn)就是該時(shí)鐘節(jié)拍。該時(shí)鐘節(jié)拍同時(shí)還是任務(wù)調(diào)度的時(shí)間基準(zhǔn)。μC/OS-Ⅱ提供了與時(shí)鐘節(jié)拍相關(guān)的系統(tǒng)效勞,允許任務(wù)延時(shí)一定數(shù)量的時(shí)鐘節(jié)拍或按時(shí)、分、秒、毫秒進(jìn)行延時(shí)。uC/OS-II提供如下的時(shí)間管理函數(shù)OSTimeDly()任務(wù)延時(shí)函數(shù)OSTimeDlyHMSM()按時(shí)、分、秒延時(shí)函數(shù)OSTimeDlyResume()讓處在延時(shí)期的任務(wù)結(jié)束延時(shí)OSTimeGet()獲取系統(tǒng)時(shí)間OSTimeSet()設(shè)置系統(tǒng)時(shí)間4、任務(wù)間的通信與同步對(duì)于一個(gè)多任務(wù)操作系統(tǒng)來說,任務(wù)間的通信與同步必不可少的。μC/OS-Ⅱ提供了四種同步對(duì)象,分別是信號(hào)量、郵箱、消息隊(duì)列和事件。通過郵箱和消息隊(duì)列還可以進(jìn)行任務(wù)間的通信。所有的同步對(duì)象都有相應(yīng)的創(chuàng)立、等待、發(fā)送的函數(shù)。但這些對(duì)象一旦創(chuàng)立就不能刪除,所以要防止創(chuàng)立過多的同步對(duì)象以節(jié)約系統(tǒng)資源。μC/OS-Ⅱ的文件體系
μC/OS-Ⅱ的文件體系結(jié)構(gòu)如以下圖所示,包括以下三個(gè)局部,應(yīng)用軟件層是基于μC/OS-Ⅱ的代碼。應(yīng)用軟件核心代碼(處理器無關(guān))
OS_CORE.C OS_MBOX.C OS_MEM.C OS_Q.C OS_SEM.C OS_TASK.C OS_TIME.C uCOS_II.H設(shè)置代碼(應(yīng)用相關(guān)) OS_CFG.H INCLUDES.H
核心代碼
消息隊(duì)列
存儲(chǔ)管理
消息管理信號(hào)量任務(wù)調(diào)度定時(shí)管理OS_CPU.H OS_CPU_A.ASM OS_CPU_C.C
1、核心代碼局部〔與處理器無關(guān)〕2、設(shè)置代碼局部〔與應(yīng)用相關(guān)〕3、處理器相關(guān)的移植代碼局部六開發(fā)環(huán)境常見的嵌入式開發(fā)環(huán)境嵌入式開發(fā)環(huán)境的組成嵌入式開發(fā)環(huán)境的調(diào)試通道基于EmbestIDEforARM環(huán)境的軟件開發(fā)實(shí)例
常見的嵌入式開發(fā)環(huán)境ADS/SDTIDE開發(fā)環(huán)境:它由ARM公司開發(fā),使用了CodeWarrior公司的編譯器;集成了GNU開發(fā)工具的IDE開發(fā)環(huán)境::它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。嵌入式開發(fā)環(huán)境組成交叉開發(fā)環(huán)境作為嵌入式系統(tǒng)應(yīng)用的ARM處理器,其應(yīng)用軟件的開發(fā)屬跨平臺(tái)開發(fā),因此需要一個(gè)交叉開發(fā)環(huán)境。交叉開發(fā)是指在一臺(tái)通用計(jì)算機(jī)上進(jìn)行軟件的編輯編譯,然后下載到嵌入式設(shè)備中進(jìn)行運(yùn)行調(diào)試的開發(fā)方式。用來開發(fā)的通用計(jì)算機(jī)可以選用比較常見的PC機(jī)、工作站等,運(yùn)行通用的Windows或Unix操作系統(tǒng)。開發(fā)計(jì)算機(jī)一般稱宿主機(jī),嵌入式設(shè)備稱為目標(biāo)機(jī),在宿主機(jī)上編譯好的程序,下載到目標(biāo)機(jī)上運(yùn)行,交叉開發(fā)環(huán)境提供調(diào)試工具對(duì)目標(biāo)機(jī)上運(yùn)行的程序進(jìn)行調(diào)試。交叉開發(fā)環(huán)境一般由運(yùn)行于宿主機(jī)上的交叉開發(fā)軟件(最少必須包含編譯調(diào)試模塊)、宿主機(jī)到目標(biāo)機(jī)的調(diào)試通道組成。運(yùn)行于宿主機(jī)上的交叉開發(fā)軟件最少必須包含編譯調(diào)試模塊,其編譯器為交叉編譯器。作為宿主機(jī)的一般為基于x86體系的桌上型計(jì)算機(jī),而編譯出的代碼必須在ARM體系結(jié)構(gòu)的目標(biāo)機(jī)上運(yùn)行,這就是所謂的交叉編譯了。在宿主機(jī)上編譯好目標(biāo)代碼后,通過宿主機(jī)到目標(biāo)機(jī)的調(diào)試通道將代碼下載到目標(biāo)機(jī),然后由運(yùn)行于宿主機(jī)的調(diào)試軟件控制代碼在目標(biāo)機(jī)上運(yùn)行調(diào)試。為了方便調(diào)試開發(fā),交叉開發(fā)軟件一般為一個(gè)整合編輯、編譯匯編鏈接、調(diào)試、工程管理及函數(shù)庫(kù)等功能模塊的集成開發(fā)環(huán)境IDE〔IntegratedDevelopmentEnvironment〕。組成ARM交叉開發(fā)環(huán)境的宿主機(jī)到目標(biāo)機(jī)的調(diào)試通道一般有以下三種:
基于JTAG的ICD(In-CircuitDebugger)。
Angel調(diào)試監(jiān)控軟件。
在線仿真器ICE(In-CircuitEmulator)。
JTAG的ICD也稱為JTAG仿真器,是通過ARM芯片的JTAG邊界掃描口進(jìn)行調(diào)試的設(shè)備。JTAG仿真器通過ARM處理器的JTAG調(diào)試接口與目標(biāo)機(jī)通信,通過并口或串口、網(wǎng)口、USB口與宿主機(jī)通信。JTAG仿真器比較廉價(jià),連接比較方便。通過現(xiàn)有的JTAG邊界掃描口與ARMCPU核通信,屬于完全非插入式(即不使用片上資源)調(diào)試,它無需目標(biāo)存儲(chǔ)器,不占用目標(biāo)系統(tǒng)的任何應(yīng)用端口。通過JTAG方式可以完成:讀出/寫入CPU的存放器,訪問控制ARM處理器內(nèi)核。
讀出/寫入內(nèi)存,訪問系統(tǒng)中的存儲(chǔ)器。
訪問I/O系統(tǒng)
控制程序單步執(zhí)行和實(shí)時(shí)執(zhí)行實(shí)時(shí)地設(shè)置基于指令地址值或者基于數(shù)據(jù)值的斷點(diǎn)?;贘TAG仿真器的調(diào)試是目前ARM開發(fā)中采用最多的一種方式。
基于EmbestIDEforARM環(huán)境的軟件開發(fā)實(shí)例
6.1ARM匯編語(yǔ)言的偽操作、宏指令與偽指令
兩種常見的ARM編譯開發(fā)環(huán)境ADS編譯環(huán)境下的偽操作和宏指令GNU編譯環(huán)境下的偽操作和宏指令A(yù)RM匯編語(yǔ)言的偽指令
兩種常見的ARM編譯開發(fā)環(huán)境ADS/SDTIDE開發(fā)環(huán)境:它由ARM公司開發(fā),使用了CodeWarrior公司的編譯器;集成了GNU開發(fā)工具的IDE開發(fā)環(huán)境::它由GNU的匯編器as、交叉編譯器gcc、和鏈接器ld等組成。ARM匯編語(yǔ)言中語(yǔ)句一般由以下幾個(gè)局部組成:指令偽操作宏指令偽指令偽操作:是ARM匯編語(yǔ)言程序里的一些特殊指令助記符,作用主要是為完成匯編程序做各種準(zhǔn)備工作。在源程序進(jìn)行匯編時(shí)由匯編程序處理。而不是在計(jì)算機(jī)運(yùn)行期間由機(jī)器執(zhí)行。宏指令:是一段獨(dú)立的程序代碼,可插在源程序中,它通過偽操作來定義。編譯環(huán)境下的偽操作和宏指令
ADS編譯環(huán)境下的偽操作可分為以下幾類:符號(hào)定義〔SymbolDefinition〕偽操作數(shù)據(jù)定義〔DataDefinition〕偽操作匯編控制〔AssemblyControl〕偽操作信息報(bào)告〔Reporting〕偽操作其他〔Miscellaneous〕偽操作
GNU編譯環(huán)境下的偽操作和宏指令
GNU編譯環(huán)境下的偽操作可分為以下幾類:常量編譯控制偽操作匯編程序代碼控制偽操作宏及條件編譯控制偽操作其他偽操作6.2ARM匯編語(yǔ)言程序設(shè)計(jì)
ARM匯編中的文件格式ARM匯編語(yǔ)言語(yǔ)句格式ARM匯編語(yǔ)言編程的重點(diǎn)
ARM匯編程序?qū)嵗齾R編中的文件格式
ARM源程序文件〔可簡(jiǎn)稱為源文件〕可以由任意一種文本編輯器來編寫程序代碼,它一般為文本格式。在ARM程序設(shè)計(jì)中,常用的源文件可簡(jiǎn)單分為以下幾種:源程序文件文件名說
明匯編程序文件*.S用ARM匯編語(yǔ)言編寫的ARM程序或Thumb程序。C程序文件*.C用C語(yǔ)言編寫的程序代碼。頭文件*.H為了簡(jiǎn)化源程序,把程序中常用到的常量命名、宏定義、數(shù)據(jù)結(jié)構(gòu)定義等等單獨(dú)放在一個(gè)文件中,一般稱為頭文件。匯編語(yǔ)言語(yǔ)句格式
ARM匯編語(yǔ)言語(yǔ)句格式如下所示:{symbol}
{instruction|directive|pseudo-instruction}
{;comment}
其中:instruction為指令。directive為偽操作。pseudo-instruction為偽指令。symbol為符號(hào)。comment為語(yǔ)句的注釋。
ARM匯編語(yǔ)言程序格式ARM匯編語(yǔ)言是以段〔section〕為單位來組織源文件的。段是相對(duì)獨(dú)立的、具有特定名稱的、不可分割的指令或者數(shù)據(jù)序列。段又可以分為代碼段和數(shù)據(jù)段,代碼段存放執(zhí)行代碼,數(shù)據(jù)段存放代碼運(yùn)行時(shí)需要用到的數(shù)據(jù)。一個(gè)ARM源程序至少需要一個(gè)代碼段,大的程序可以包含多個(gè)代碼段和數(shù)據(jù)段。舉例說明ARM匯編語(yǔ)言源程序的根本結(jié)構(gòu)AREAEXAMPLE,CODE,READONLYENTRYstartMOVr0,#10MOVr1,#3ADDr0,r0,r1END本程序的程序體局部實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的加法運(yùn)算。ARM匯編語(yǔ)言編程的重點(diǎn)ARM數(shù)據(jù)處理操作設(shè)置條件碼匯編語(yǔ)言子程序調(diào)用及返回ARM與Thumb之間的狀態(tài)轉(zhuǎn)換及函數(shù)的相調(diào)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 北師大版六年級(jí)下數(shù)學(xué)表格式教案
- 酶解法制備高效環(huán)保洗滌劑配方
- 森林經(jīng)營(yíng)實(shí)施方案
- 2024高中地理第二章地球上的大氣第二節(jié)氣壓帶和風(fēng)帶第1課時(shí)氣壓帶和風(fēng)帶的形成學(xué)案新人教版必修1
- 2024高中物理第四章電磁感應(yīng)章末質(zhì)量評(píng)估含解析新人教版選修3-2
- 2024高中語(yǔ)文第三單元因聲求氣吟詠詩(shī)韻將進(jìn)酒訓(xùn)練含解析新人教版選修中國(guó)古代詩(shī)歌散文欣賞
- 2024高中語(yǔ)文精讀課文一第2課2魯迅:深刻與偉大的另一面是平和二作業(yè)含解析新人教版選修中外傳記蚜
- 2024高考化學(xué)一輪復(fù)習(xí)第2章元素與物質(zhì)世界第6講氧化還原反應(yīng)的基本概念和規(guī)律學(xué)案
- 2024高考地理一輪復(fù)習(xí)專練58區(qū)域地理環(huán)境的差異和發(fā)展含解析新人教版
- 2025高考數(shù)學(xué)考二輪題型專項(xiàng)練3客觀題8+3+3標(biāo)準(zhǔn)練(C)-專項(xiàng)訓(xùn)練【含答案】
- 農(nóng)村開荒土地承包權(quán)轉(zhuǎn)讓協(xié)議書
- DLT 265-2012 變壓器有載分接開關(guān)現(xiàn)場(chǎng)試驗(yàn)導(dǎo)則
- 牙科門診病歷
- SYT 6276-2014 石油天然氣工業(yè)健康、安全與環(huán)境管理體系
- 注射用更昔洛韋的臨床療效研究
- 小學(xué)三年級(jí)上冊(cè)豎式計(jì)算題
- 機(jī)場(chǎng)亮化工程
- 2024年青海西部機(jī)場(chǎng)集團(tuán)青海機(jī)場(chǎng)有限公司招聘筆試參考題庫(kù)含答案解析
- 2023年小學(xué)科學(xué)教研組教研工作總結(jié)(5篇)
- 中國(guó)綠色建筑現(xiàn)狀與未來展望
- 三年級(jí)上冊(cè)遞等式計(jì)算練習(xí)300題及答案
評(píng)論
0/150
提交評(píng)論