




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、PAGE PAGE 26一1.嵌入式系統(tǒng)定義“以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)?!?.嵌入式系統(tǒng)與pc和單片機(jī)的區(qū)別嵌入式系統(tǒng) PC機(jī)嵌入式系統(tǒng)一般是專用系統(tǒng),而PC是通用計(jì)算平臺嵌入式系統(tǒng)的資源比PC少得多嵌入式系統(tǒng)軟件故障帶來的后果比PC機(jī)大得多嵌入式系統(tǒng)一般采用實(shí)時操作系統(tǒng)嵌入式系統(tǒng)大都有成本、功耗的要求嵌入式系統(tǒng)得到多種微處理體系的支持嵌入式系統(tǒng)需要專用的開發(fā)工具嵌入式系統(tǒng) 單片機(jī)系統(tǒng)目前嵌入式系統(tǒng)的主流是以32位嵌入式微處理器為核心的硬件設(shè)計(jì)和基于實(shí)時操作系統(tǒng)(RTOS)的軟件設(shè)計(jì);單片機(jī)系統(tǒng)多為4位、8位、16
2、位機(jī),不適合運(yùn)行操作系統(tǒng),難以完成復(fù)雜的運(yùn)算及處理功能;嵌入式系統(tǒng)強(qiáng)調(diào)基于平臺的設(shè)計(jì)、軟硬件協(xié)同設(shè)計(jì);單片機(jī)大多采用軟硬件流水設(shè)計(jì);嵌入式系統(tǒng)設(shè)計(jì)的核心是軟件設(shè)計(jì)(占70%左右的工作量);單片機(jī)系統(tǒng)軟硬件設(shè)計(jì)所占比例基本相同。3.實(shí)時系統(tǒng)的定義(軟、硬)實(shí)時系統(tǒng):如果邏輯和時序出現(xiàn)偏差將會引起嚴(yán)重后果的系統(tǒng)軟實(shí)時系統(tǒng):系統(tǒng)的宗旨是使各個任務(wù)運(yùn)行得越快越好,并不要求限定某一任務(wù)必須在多長時間內(nèi)完成(響應(yīng)時間為數(shù)十秒)硬實(shí)時系統(tǒng):各任務(wù)不僅要執(zhí)行無誤而且要做到準(zhǔn)時(響應(yīng)時間在ms或us級)二1. BSP的概念和特點(diǎn)BSP(板級支持包)是介于底層硬件和操作系統(tǒng)之間的軟件層,它完成系統(tǒng)上電后最初的硬件
3、和軟件初始化,并對底層硬件進(jìn)行封裝,使得操作系統(tǒng)不再面對具體的操作。BSP的特點(diǎn):1)硬件相關(guān)性:因?yàn)榍度胧较到y(tǒng)的硬件具有應(yīng)用相關(guān)性,所以,作為高層軟件與硬件之間的接口,BSP必須為操作系統(tǒng)提供操作和控制具體硬件的方法。2)操作系統(tǒng)相關(guān)性:不同的操作系統(tǒng)具有各自的軟件層次結(jié)構(gòu),因此,針對不同的操作系統(tǒng)具有特定的接口形式。2. SoC定義SoC 就是System on Chip ,SoC嵌入式系統(tǒng)微處理器就是一種電路系統(tǒng)。SoC是追求產(chǎn)品系統(tǒng)最大包容的集成器件,SOC最大的特點(diǎn)是成功實(shí)現(xiàn)了軟硬件無縫結(jié)合,支持直接在處理器片內(nèi)嵌入操作系統(tǒng)的代碼模塊。3.馮諾依曼體系結(jié)構(gòu)/哈佛體系結(jié)構(gòu)馮諾依曼體系的
4、特點(diǎn):數(shù)據(jù)與指令都存儲在同一存儲空間中統(tǒng)一編址,指令和數(shù)據(jù)通過同一總線訪問被大多數(shù)計(jì)算機(jī)所采用ARM7馮諾依曼體系缺點(diǎn):取指令和存取數(shù)據(jù)要從同一個存儲空間存取,經(jīng)由同一總線傳 輸,因而它們無法重疊執(zhí)行哈佛體系結(jié)構(gòu)的特點(diǎn): 程序與數(shù)據(jù)在不同存儲空間;每個存儲器獨(dú)立編址、獨(dú)立訪問 使用程序和數(shù)據(jù)總線(兩條獨(dú)立的總線),使數(shù)據(jù)吞吐率提高一倍 適合于數(shù)字信號處理大多數(shù)DSP都是哈佛結(jié)構(gòu)ARM9是哈佛結(jié)構(gòu)由于取指令和存取數(shù)據(jù)分別經(jīng)由不同的存儲空間和不同的總線,使得各條指令可以重疊執(zhí)行,這樣,也就克服了數(shù)據(jù)流傳輸?shù)钠款i,提高了運(yùn)算速度。4.CISC/RISCCISC:復(fù)雜指令集(Complex Instr
5、uction Set Computer)具有大量的指令和尋址方式8/2原則:80%的程序只使用20%的指令大多數(shù)程序只使用少量的指令就能夠運(yùn)行。RISC:精簡指令集(Reduced Instruction Set Computer)在通道中只包含最有用的指令確保數(shù)據(jù)通道快速執(zhí)行每一條指令使CPU硬件結(jié)構(gòu)設(shè)計(jì)變得更為簡單指令規(guī)整、對稱、簡單,指令小于100條,基本尋址方式只有23種單周期指令,便于流水操作大量的寄存器(不少于32個)類別CISCRISC指令系統(tǒng)指令數(shù)量很多較少,通常少于100執(zhí)行時間有些指令執(zhí)行時間很長,如整塊的存儲器內(nèi)容復(fù)制;或?qū)⒍鄠€寄存器的內(nèi)容復(fù)制到存貯器沒有較長執(zhí)行時間的指
6、令編碼長度編碼長度可變,1-15字節(jié)編碼長度固定,通常為4個字節(jié)尋址方式尋址方式多樣簡單尋址操作可以對存儲器和寄存器進(jìn)行算術(shù)和邏輯操作只能對寄存器進(jìn)行算術(shù)和邏輯操作,Load/Store體系結(jié)構(gòu)編譯難以用優(yōu)化編譯器生成高效的目標(biāo)代碼程序 采用優(yōu)化編譯技術(shù),生成高效的目標(biāo)代碼程序 5.流水線流水線:在CPU中把一條指令分解成多個可單獨(dú)處理的操作,使每個操作在一個專門的硬件站(stage)上執(zhí)行,這樣一條指令需要順序地經(jīng)過流水線中多個站的處理才能完成,但是前后相連的幾條指令可以依次流入流水線中,在多個站間重疊執(zhí)行,因此可以實(shí)現(xiàn)指令的并行處理。6.高速緩存Cache的設(shè)計(jì)思想:把在一段時間內(nèi)、一定地
7、址范圍中被頻繁訪問的信息集合,成批地從主存中讀到一個能高速存取的小容量存儲器中存放起來,供程序在這段時間內(nèi)隨時使用,從而減少或不再去訪問速度較慢的主存,以加快程序的運(yùn)行速度。7.IP核知識產(chǎn)權(quán)(IP) 電路或核是設(shè)計(jì)好并經(jīng)過驗(yàn)證的集成電路功能單元。Soft Cores(“code”)(軟核)HDL語言描述;靈活度高,可修改;與工藝獨(dú)立,可根據(jù)具體的加工工藝重新綜合;IP很難保護(hù)。Firm cores(“code+structure”)(固核)邏輯綜合后的描述;與工藝相關(guān)。Hard cores(“physical”)(硬核)物理綜合后的描述;準(zhǔn)備流片;包含工藝相關(guān)的布局和時序信息;IP很容易保護(hù)
8、,但靈活性和可移植性差。多數(shù)的處理器和存儲器IP核的商業(yè)模型(三種模式)1)設(shè)計(jì)者提供設(shè)計(jì)和工具的許可證DSP Group (Pine and Oak Cores), 3Soft, ARM。 提供包括HDL在內(nèi)的模擬模型,工具或仿真器。使用者負(fù)責(zé)設(shè)計(jì)制造。2)核廠商設(shè)計(jì)并制造集成電路芯片:TI, Motorola, Lucent。VLSI, SSI, Cirrus, Adaptec。3)核廠商賣核, 負(fù)責(zé)為客戶設(shè)計(jì)并制造芯片:LSI logic, TI, Lucent。8.嵌入式操作系統(tǒng)的分類和特點(diǎn)從應(yīng)用領(lǐng)域來分面向信息家電的嵌入式操作系統(tǒng)面向智能手機(jī)的嵌入式操作系統(tǒng),如SymbianOS、M
9、S Mobile OS、PalmOS、Embedded Linux等面向汽車電子的嵌入式操作系統(tǒng) 面向工業(yè)控制的嵌入式操作系統(tǒng)從實(shí)時性的角度來分實(shí)時嵌入式操作系統(tǒng):具有強(qiáng)實(shí)時特點(diǎn),如VxWorks、QNX、Nuclear、OSE、DeltaOS、各種ITRON OS等。非實(shí)時嵌入式操作系統(tǒng):一般只具有弱實(shí)時特點(diǎn),如WinCE、版本眾多的嵌入式Linux、PalmOS等。從嵌入式系統(tǒng)的商業(yè)模式來分類商用型:功能穩(wěn)定、可靠,有完善的技術(shù)支持和售后服務(wù),開發(fā)費(fèi)用+版稅。開源型:開放源碼,只收服務(wù)費(fèi),沒有版稅。 如Embedded linux,RTEMS,eCOS。嵌入式操作系統(tǒng)可以統(tǒng)稱為應(yīng)用在嵌入式
10、系統(tǒng)的操作系統(tǒng),它具有一般操作系統(tǒng)的功能,同時具有嵌入式軟件的特點(diǎn),主要有:可固化存儲;可配置、可剪裁;獨(dú)立的板級支持包,可修改;不同的CPU有不同的版本;應(yīng)用的開發(fā)需要有集成的交叉開發(fā)工具9.可重入函數(shù)可以被一個以上的任務(wù)調(diào)用,而不必?fù)?dān)心數(shù)據(jù)的破壞??芍厝胄秃瘮?shù)任何時候都可以被中斷,一段時間以后又可以運(yùn)行,而相應(yīng)數(shù)據(jù)不會丟失??芍厝胄秃瘮?shù)只使用局部變量,即變量保存在CPU寄存器或堆棧中。一個可重入型函數(shù)的例子Void swap (int *x,int*y)int Temp;Temp=*x;*X=*Y;*y=Temp;一個不可重入型函數(shù)的例子int Temp;Void swap (int *x
11、,int*y)Temp=*x;*X=*Y;*y=Temp;三1.交叉開發(fā)環(huán)境交叉開發(fā)環(huán)境由宿主機(jī)和目標(biāo)機(jī)組成,宿主機(jī)與目標(biāo)機(jī)之間在物理連接的基礎(chǔ)上建立起邏輯連接。交叉開發(fā)環(huán)境是指用于嵌入式軟件開發(fā)的所有工具軟件的集合,一般包括:1)文本編輯器2)交叉編譯器3)交叉調(diào)試器4)仿真器5)下載器等2.嵌入式系統(tǒng)的調(diào)試方法1)模擬調(diào)試(Simulator)調(diào)試工具和待調(diào)試的嵌入式軟件都在主機(jī)上運(yùn)行,由主機(jī)提供一個模擬的目標(biāo)運(yùn)行環(huán)境,可以進(jìn)行語法和邏輯上的調(diào)試。優(yōu)點(diǎn):簡單方便,不需要目標(biāo)板,成本低缺點(diǎn):功能非常有限,無法實(shí)時調(diào)試大多數(shù)調(diào)試工具都提供Simulator功能2)軟件調(diào)試(Debugger)主
12、機(jī)和目標(biāo)板通過某種接口(通常是串口)連接,主機(jī)上提供調(diào)試界面,待調(diào)試軟件下載到目標(biāo)板上運(yùn)行。這種方式的先決條件是要在Host和Target之間建立起通信聯(lián)系(目標(biāo)板上稱為監(jiān)控程序Monitor或Angel)優(yōu)點(diǎn):純軟件,價格較低,簡單,軟件調(diào)試能力較強(qiáng)缺點(diǎn):需要事先燒制Monitor(往往需多次試驗(yàn)才能成功)且目標(biāo)板工作正常,功能有限,特別是硬件調(diào)試能力較差。3)BDM/JTAG調(diào)試(BDM/JTAG Debugger)要求有一個硬件調(diào)試體。該硬件調(diào)試體與目標(biāo)板通過BDM、JTAG等調(diào)試接口相連,與主機(jī)通過串口、并口、網(wǎng)口或USB口相連。待調(diào)試軟件通過BDM/JTAG調(diào)試器下載到目標(biāo)板上運(yùn)行。
13、優(yōu)點(diǎn):方便、簡單,無須制作Monitor,軟硬件均可調(diào)試缺點(diǎn):需要目標(biāo)板,且目標(biāo)板工作基本正常(至少M(fèi)CU工作正常),僅適用于有調(diào)試接口的芯片4)全仿真調(diào)試(Emulator)用仿真器完全取代目標(biāo)板上的MCU,因而目標(biāo)系統(tǒng)對開發(fā)者來說完全是透明的、可控的。仿真器與目標(biāo)板通過仿真頭連接,與主機(jī)有串口、并口、網(wǎng)口或USB口等連接方式。由于仿真器自成體系,調(diào)試時既可以連接目標(biāo)板,也可以不連接目標(biāo)板(Stand alone)。優(yōu)點(diǎn):功能非常強(qiáng)大,軟硬件均可做到完全實(shí)時在線調(diào)試 缺點(diǎn):價格昂貴。3.鏈接文件的作用.ld文件:描述代碼鏈接定位的有關(guān)信息,包括代碼段,數(shù)據(jù)段,地址段等,鏈接器必須使用該文件對
14、整個系統(tǒng)的代碼做正確的定位.map文件:防止軟件調(diào)試過程中訪問非法存儲區(qū)時產(chǎn)生異常中斷;.CS文件:通過一組命令序列來讓集成環(huán)境自動完成一些特定的功能四1.ARM?ARM微處理器的特點(diǎn)ARM(Advanced RISC Machines)是英國知識產(chǎn)權(quán)核(IP)設(shè)計(jì)公司,既可以認(rèn)為是一個公司的名字,也可以認(rèn)為是對一類微處理器的統(tǒng)稱,還可以認(rèn)為是一種技術(shù)的名字。ARM 處理器共有37個寄存器,被分為若干個組,這些寄存器包括:31個通用寄存器,包括程序計(jì)數(shù)器(PC 指針),均為32位的寄存器;6個狀態(tài)寄存器,用于標(biāo)識CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位。ARM微處理器的特點(diǎn):低功耗、低成本
15、、高性能1)采用RISC指令集采用RISC架構(gòu)的ARM處理器一般具有如下特點(diǎn):固定長度的指令格式,指令歸整、簡單,基本尋址方式有23種;使用單周期指令,便于流水線操作執(zhí)行大量使用寄存器,數(shù)據(jù)處理指令只對寄存器進(jìn)行操作,只有加載/存儲指令可以訪問存儲器,以提高指令的執(zhí)行效率。2)使用大量的寄存器:ARM 處理器共有37個寄存器,被分為若干個組,這些寄存器包括:31個通用寄存器,包括程序計(jì)數(shù)器(PC 指針),均為32位的寄存器;6個狀態(tài)寄存器,用于標(biāo)識CPU的工作狀態(tài)及程序的運(yùn)行狀態(tài),均為32位。3)ARM/THUMB指令支持ARM微處理器支持兩種指令集:ARM指令集和Thumb指令集。ARM指令
16、為32位的長度,Thumb指令為16位長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM代碼相比較,可節(jié)省3040以上的存儲空間,同時具備32位代碼的所有優(yōu)點(diǎn)。4)三/五級流水線除此以外,ARM體系結(jié)構(gòu)還采用了一些特別的技術(shù),在保證高性能的前提下盡量縮小芯片的面積,并降低功耗。2.ARM微處理器的主要系列Processor FamilyARM7 ARM9ARM10ARM11ARM Cortex結(jié)構(gòu)體系版本(Architecture)ARM v4TARM v5TE ARM v6ARM Cortex (v7)按應(yīng)用特征分類應(yīng)用處理器 Application Processor特征:M
17、MU, Cache 最快頻率、最高性能、合理功耗 實(shí)時控制處理器 Real-time Controller特征:MPU, Cache 實(shí)時響應(yīng)、合理性能、較低功耗 微控制器 Micro-controller特征:no sub-memory system 一般性能、最低成本、極低功耗 3.ARM7TDMI含義1)Thumb 架構(gòu)擴(kuò)展, 提供兩個獨(dú)立的指令集:ARM 指令,均為 32位Thumb指令,均為 16位兩種運(yùn)行狀態(tài),用來選擇哪個指令集被執(zhí)行2)內(nèi)核具有Debug擴(kuò)展結(jié)構(gòu)3)EmbeddedICE 邏輯4)增強(qiáng)乘法器 (32x8) 支持64位結(jié)果4.Cache與Buffer的區(qū)別Write
18、 Buffer:當(dāng)數(shù)據(jù)寫到Write Buffer后不需要CPU的任何干預(yù)而由Write Buffer控制邏輯自動的將數(shù)據(jù)寫到最終的地方;Cache的回寫則需要CPU的干預(yù)。Write Buffer較小,通常只有幾十個字節(jié)。Read Buffer:當(dāng)讀數(shù)據(jù)時Read Buffer自動多讀取一些字節(jié),但是不占用CPU的總線時間,所以能加快讀數(shù)據(jù)的速度;當(dāng)使用Cache時如果要從內(nèi)存中讀取數(shù)據(jù)則每個數(shù)據(jù)都會占用CPU的時間,這是與Read Buffer的最大不同點(diǎn)。Read Buffer較小,通常只有幾十個字節(jié)。5.Thumb技術(shù)產(chǎn)生的原因或特點(diǎn)原因:在ARM技術(shù)發(fā)展的歷程中,尤其是ARM7體系結(jié)
19、構(gòu)被廣泛接受和使用時,嵌入式控制器的市場仍然大都由8位、16位的處理器占領(lǐng)。而這些產(chǎn)品卻不能滿足高端應(yīng)用(如移動電話、磁盤驅(qū)動器、調(diào)制解調(diào)器等設(shè)備)對處理器性能的要求。這些高端消費(fèi)類產(chǎn)品需要32位RISC處理器性能和更優(yōu)于16位的CISC處理器的代碼密度。這就要求要以更低的成本取得更好的性能和更優(yōu)于16位的CISC處理器的代碼密度。ARM的RISC體系結(jié)構(gòu)的發(fā)展中已經(jīng)提供了低功耗、小體積、高性能的方案。同時為了解決代碼長度的問題,ARM體系結(jié)構(gòu)又增加了變種,開發(fā)了一種新的指令體系,這就是Thumb指令集。特點(diǎn):支持Thumb的核有2套獨(dú)立的指令集,它使設(shè)計(jì)者得到ARM32位指令的性能,又能享有
20、Thumb指令集產(chǎn)生的代碼方面的優(yōu)勢??梢栽谛阅芎痛a大小之間取得平衡;在需要較低的存儲代碼時采用Thumb指令系統(tǒng),但有比純粹16位系統(tǒng)高的實(shí)現(xiàn)性能,因?yàn)閷?shí)際執(zhí)行的是32位指令,用Thumb指令編寫最小代碼量的程序,卻取得以ARM代碼執(zhí)行的最好性能;獨(dú)立的兩套指令集也使得解碼邏輯極其的簡單,從而維持了較小的硅片面積,保證了領(lǐng)先的“低功耗、高性能、小體積”的技術(shù)要求,滿足了對嵌入式系統(tǒng)的設(shè)計(jì)需求。五1.ARM微處理器的兩種工作狀態(tài)、如何切換ARM狀態(tài),處理器執(zhí)行32位的字對齊的ARM指令;Thumb狀態(tài),處理器執(zhí)行16位的、半字對齊的Thumb指令。在Thumb狀態(tài)下,程序計(jì)數(shù)器PC使用位1選
21、擇另一個半字。切換:BX 指令以通用寄存器(R0-R15)為操作數(shù),通過拷貝Rn 到PC 來實(shí)現(xiàn)4GB 空間范圍內(nèi)的一個絕對跳轉(zhuǎn)。 BX 利用Rn 寄存器中存儲的目標(biāo)地址值的最后一位來判斷跳轉(zhuǎn)后的狀態(tài)。進(jìn)入Thumb狀態(tài):當(dāng)操作數(shù)寄存器Rm的狀態(tài)位bit0為1時,執(zhí)行 BX Rm 指令進(jìn)入 Thumb狀態(tài)。所有的異常都是在ARM狀態(tài)下進(jìn)行,如果處理器在Thumb狀態(tài)進(jìn)入異常,則當(dāng)異常處理(IRQ,F(xiàn)IQ,Undef,Abort和SWI)返回時,自動切換到Thumb狀態(tài)。進(jìn)入ARM狀態(tài):當(dāng)操作數(shù)寄存器Rm的狀態(tài)位bit0為0時,執(zhí)行 BX Rm 指令進(jìn)入ARM狀態(tài)。如果處理器進(jìn)行異常處理(IRQ
22、,F(xiàn)IQ,Undef,Abort和SWI),在此情況下,把PC放入異常模式鏈接寄存器LR中,從異常向量地址開始執(zhí)行也可以進(jìn)入ARM狀態(tài)。 例:從ARM狀態(tài)切換到Thumb狀態(tài): LDR R0,=Label+1 BX R0從Thumb狀態(tài)切換到ARM狀態(tài): LDR R0,=Label BX R02.七種工作模式、變換過程處理器模式說明備注 用戶 (usr)正常程序執(zhí)行模式不能直接切換到其它模式 系統(tǒng) (sys)運(yùn)行操作系統(tǒng)的特權(quán)任務(wù)與用戶模式類似,但具有可以直接切換到其它模式等特權(quán) 快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入此模式 中斷 (irq)用于通用中斷處理IRQ異常響
23、應(yīng)時進(jìn)入此模式 管理 (svc)操作系統(tǒng)保護(hù)模式系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進(jìn)入此模式 中止 (abt)用于支持虛擬內(nèi)存和/或存儲器保護(hù)在ARM7TDMI沒有大用處 未定義 (und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進(jìn)入此模式1異常模式:主要是在外部中斷或者程序執(zhí)行非法操作時會觸發(fā)2特權(quán)模式可以存取系統(tǒng)中的任何資源3七種模式由CPSR4:0組合決定 管理模式(Supervisor)多種特權(quán)模式變化 設(shè)置成用戶程序運(yùn)行模式 復(fù)位后的初始模式 (堆棧初始化階段) 注意不要進(jìn)入用戶模式 用戶選擇1)在最后階段才能把模式轉(zhuǎn)換成最終應(yīng)用程序運(yùn)行所需的模式(用戶模式);2)內(nèi)核級的中斷使能也要考
24、慮在用戶模式進(jìn)行。過早地打開中斷可能會造成系統(tǒng)死機(jī)。3.ARM寄存器組成ARM處理器總共有37個寄存器,這37個寄存器按它在用戶編程中的功能劃分,可以分為以下兩類寄存器: 31個通用寄存器:包括了程序計(jì)數(shù)器(PC),這些寄存器都是32位的。R0R15R13_svc、R14_svc;R13_abt、R14_abt;R13_und、R14_und;R13_irq、R14_irq;R8_frqR14_frq。 6個狀態(tài)寄存器 CPSR;SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq。6個狀態(tài)寄存器也是32位的,但目前只使用了其中的12-14位 4.SPSR的
25、功能1)保存ALU中的當(dāng)前操作信息2)控制允許/禁止中斷3)設(shè)置處理器的運(yùn)行模式5.ARM的異常定義及分類定義:當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常ARM體系結(jié)構(gòu)中的異常,與8位/16位體系結(jié)構(gòu)的中斷有很大的相似之處,但異常與中斷的概念并不完全等同。 異常的產(chǎn)生必須考慮與處理器時鐘的同步。實(shí)際上,異常往往被稱為同步中斷。異常是由內(nèi)部或者外部原因引起的,當(dāng)異常發(fā)生時CPU將暫停執(zhí)行當(dāng)前指令,自動到指定的向量地址讀取指令并且執(zhí)行。分類:類別原因異步/同步返回行為中斷來自I/O設(shè)備的信號異步總是返回到下一條指令陷井有意的異常同步總是返回到下一條指令故障潛在可恢復(fù)的錯誤同步可能返回到當(dāng)前指
26、令終止不可恢復(fù)的錯誤同步不會返回異常類型向量地址優(yōu)先級異常中斷含義復(fù)位(Reset)0 x000000001(最高)當(dāng)處理器的復(fù)位引腳有效時,系統(tǒng)產(chǎn)生復(fù)位異常中斷,程序跳轉(zhuǎn)到復(fù)位異常中斷處理程序處執(zhí)行。 復(fù)位異常中斷通常用在下面幾種情況下: 系統(tǒng)加電時 系統(tǒng)復(fù)位時 跳轉(zhuǎn)到復(fù)位中斷向量處執(zhí)行,稱為軟復(fù)位未定義的指令(undefined instruction)0 x000000046當(dāng)ARM處理器或者是系統(tǒng)中的協(xié)處理器認(rèn)為當(dāng)前指令未定義時,產(chǎn)生未定義(undefined instruction)的指令異常中斷??梢酝ㄟ^該異常中斷機(jī)制仿真浮點(diǎn)向量運(yùn)算軟件中斷(SWI)0 x000000086(最低
27、)這是一個由用戶定義的中斷指令??捎糜谟脩裟J较碌某绦蛘{(diào)用特權(quán)操作指令預(yù)取中止(Prefech Abort)0 x0000000C5如果處理器預(yù)取的指令的地址不存在,或者該地址不允許當(dāng)前指令訪問,當(dāng)該被預(yù)取的指令執(zhí)行時,處理器產(chǎn)生指令預(yù)取中止(Prefech Abort)異常中斷數(shù)據(jù)訪問中止(Data Abort)0 x000000102如果數(shù)據(jù)訪問指令的目標(biāo)地址不存在,或者該地址不允許當(dāng)前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問中止異常中斷外部中斷請求(IRQ)0 x000000184當(dāng)處理器的外部中斷請求引腳有效,而且CPSR寄存器的I控制位被清除時,處理器產(chǎn)生外部中斷請求(IRQ)異常中斷。系統(tǒng)中各
28、外設(shè)通常通過該異常中斷請求處理器服務(wù)快速中斷請求(FIQ)0 x0000001C3當(dāng)處理器的外部快速中斷請求引腳有效,而且CPSR寄存器的F控制位被清除時,處理器產(chǎn)生外部中斷請求(FIQ)6.ARM的異常響應(yīng)(包括返回)過程及偽代碼描述當(dāng)發(fā)生異常時,除了復(fù)位異常立即中止當(dāng)前指令外,處理器盡量完成當(dāng)前指令,然后脫離當(dāng)前的指令處理序列去處理異常。ARM處理器對異常中斷的響應(yīng)過程如下 :將CPSR的內(nèi)容保存到將要執(zhí)行的異常中斷對應(yīng)的SPSR中,以實(shí)現(xiàn)對處理器當(dāng)前狀態(tài)、中斷屏蔽位以及各條件標(biāo)志位的保存。各異常中斷模式都有自己相應(yīng)的物理SPSR寄存器。設(shè)置當(dāng)前狀態(tài)寄存器CPSR中的相應(yīng)位:設(shè)置CPSR模
29、式控制位CPSR4:0,使處理器進(jìn)入相應(yīng)的執(zhí)行模式;設(shè)置中斷標(biāo)志位(CPSR7=1),禁止IRQ中斷;當(dāng)進(jìn)入Reset或FIQ模式時,還要設(shè)置快速中斷標(biāo)志位(CPSR6=1),禁止FIQ中斷。將引起異常指令的下一條指令的地址保存到新的異常工作模式的R14即R14_mode中,使異常處理程序執(zhí)行完后能正確返回原程序。給程序計(jì)數(shù)器(PC)強(qiáng)制賦值,使程序從相應(yīng)的矢量地址開始執(zhí)行中斷處理程序,一般地說,矢量地址處將包含一條指向相應(yīng)程序的轉(zhuǎn)移指令,從而可跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行異常中斷處理程序。異常響應(yīng)偽代碼2731N Z C V Q2867I F T mode1623 815 54024f
30、sxc U n d e f i n e dJ若處理器處于Thumb狀態(tài),則當(dāng)異常向量地址加載入PC時,處理器自動切換到ARM狀態(tài)。ARM微處理器對異常的響應(yīng)過程用偽碼可以描述為:R14_ = Return LinkSPSR_ = CPSRCPSR4:0 = Exception Mode NumberCPSR5 = 0 保障在ARM狀態(tài)下執(zhí)行CPSR7 = 1 禁止新的IRQ中斷If = Reset or FIQ thenCPSR6 = 1 當(dāng)Reset或FIQ時,禁止新的FIQ中斷PC = Exception Vector Address 轉(zhuǎn)入異常入口地址7.異常中斷向量表中斷向量表中指定了各
31、異常中斷向量與其處理程序的對應(yīng)關(guān)系。它通常存放在存儲地址的低端。在ARM體系結(jié)構(gòu)中,異常中斷向量表的大小為32字節(jié)。其中,每個異常中斷占據(jù)4個字節(jié)大小,保留了4個字節(jié)空間。每個異常中斷對應(yīng)的中斷向量表的4個字節(jié)的空間中存放一個跳轉(zhuǎn)指令或者一個向PC寄存器中賦值的數(shù)據(jù)訪問指令。通過這兩種指令,程序?qū)⑻D(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行。存儲器的前8個字中除了地址0 x00000014之外,全部被用作異常矢量地址。(地 址異 常進(jìn)入模式0 x0000,0000復(fù)位管理模式0 x0000,0004未定義指令未定義模式0 x0000,0008軟件中斷管理模式0 x0000,000C中止(預(yù)取指令)中止模
32、式0 x0000,0010中止(數(shù)據(jù))中止模式0 x0000,0014保留保留0 x0000,0018IRQIRQ0 x0000,001CFIQFIQ8.存儲器大小端模式存儲器格式是指字、半字、字節(jié)在存儲器中存放的方式,也反映了存儲器中字、半字、字節(jié)之間的映射關(guān)系。ARM體系結(jié)構(gòu)可以用兩種方法存儲字?jǐn)?shù)據(jù),稱之為大端模式和小端模式 (ARM處理器能方便的配置為其中任何一種存儲器方式,但它們的缺省設(shè)置為小端格式)大端模式字?jǐn)?shù)據(jù)的高位字節(jié)存儲在低地址中字?jǐn)?shù)據(jù)的低位字節(jié)存放在高地址中小端模式低地址中存放字?jǐn)?shù)據(jù)的低字節(jié)高地址中存放字?jǐn)?shù)據(jù)的高字節(jié)9.片上總線的基本概念片上總線OCB(OnChip Bus)
33、技術(shù)的產(chǎn)生背景:使片上不同IP核的連接實(shí)現(xiàn)標(biāo)準(zhǔn)化。基于IP核互聯(lián)標(biāo)準(zhǔn)技術(shù)的發(fā)展,目前形成較有影響力的3種總線標(biāo)準(zhǔn):IBM公司的CoreConnect、ARM公司的AMBA和Silicore Corp公司的Wishbone。AMBA規(guī)范定義了三種總線:AHB(Advanced High-performance Bus):用于連接高性能系統(tǒng)模塊。它支持突發(fā)數(shù)據(jù)傳輸方式及單個數(shù)據(jù)傳輸方式,所有時序參考同一個時鐘沿。ASB(Advanced System Bus):用于連接高性能系統(tǒng)模塊,它支持突發(fā)數(shù)據(jù)傳輸模式。APB(Advance Peripheral Bus):是一個簡單接口,支持低性能的外圍接
34、口。六1.ARM指令集特點(diǎn)ARM面向嵌入式應(yīng)用,是典型的RISC體系結(jié)構(gòu)。與基于傳統(tǒng)CISC結(jié)構(gòu)的指令集相比,具有簡潔、高效和便于實(shí)現(xiàn)的特點(diǎn)。ARM微處理器的指令集是加載/存儲型的,也即大部分指令僅能處理寄存器中的數(shù)據(jù),而且處理結(jié)果都要放回寄存器中,而對系統(tǒng)存儲器的訪問則需要通過專門的加載/存儲指令來完成(Load-store 結(jié)構(gòu))。向后兼容:新版本增加指令,并保持指令向后兼容;Load-store 結(jié)構(gòu)*在通用寄存器中操作(指令集僅能處理寄存器中的數(shù)據(jù))load/store 從存儲器中讀某個值,在寄存器中操作完 后再將其放回存儲器中指令分類數(shù)據(jù)處理指令 使用和改變寄存器的值數(shù)據(jù)傳送指令 把
35、存儲器的值拷貝到寄存器中 (load) 或者把寄存 器中的值拷貝到存儲器中(store)控制流指令 分支分支和鏈接, 保存返回的地址,以恢復(fù)最先的次序陷入系統(tǒng)代碼2.尋址方式尋址方式就是處理器根據(jù)指令中給出的地址信息來尋找真實(shí)操作數(shù)地址(物理地址)的方式。 ARM指令系統(tǒng)支持如下幾種常見的尋址方式:1)立即尋址 操作數(shù)在指令中2)寄存器尋址 操作數(shù)在寄存器中3)寄存器間接尋址 操作數(shù)在存儲器中4)基址加偏址尋址 多寄存器尋址(一次把內(nèi)存中多個值傳送到多個寄存器或把多個寄存器的值一次傳遞到內(nèi)存中)5)塊拷貝尋址 6)堆棧尋址7)相對尋址立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)本身就
36、在指令中給出,只要取出指令也就取到了操作數(shù),這個操作數(shù)被稱為立即數(shù)。 例如以下指令: ADDR0,R0,1/*R0R01*/ ADDR0,R0,0 x3f /*R0R00 x3f*/ 在以上兩條指令中,第二個源操作數(shù)即為立即數(shù),要求以“”為前綴,對于以十六進(jìn)制表示的立即數(shù),還要求在“”后加上“0 x”或“&” ,0b或“%”表示二進(jìn)制,0d或缺省表示十進(jìn)制。注意:32位有效立即數(shù)是間接得到的(如果直接用它,就可能完全占據(jù)32位編碼空間,而使指令的操作碼等無法體現(xiàn)在編碼中)3.32位有效立即數(shù)在32位指令編碼中存放32位立即數(shù)的方法是: 在ARM數(shù)據(jù)處理指令中,當(dāng)參與操作的第二操作數(shù)為立即數(shù)型時
37、,每個立即數(shù)都是采用一個8位的常數(shù)循環(huán)右移偶數(shù)位而間接得到的。其中,循環(huán)右移的位數(shù)由一個4位二進(jìn)制的兩倍表示,如果立即數(shù)記作,8位常數(shù)記作immed_8,4位的循環(huán)右移值記作rotate_imm,有效的立即數(shù)是由一個8位的立即數(shù)循環(huán)右移偶數(shù)位得到。 有效立即數(shù)immediate可以表示成:=immed_8 循環(huán)右移(2rotate_imm)注意:并不是每一個32位的常數(shù)都是合法的立即數(shù),只有用上面構(gòu)造方法得到的才是。立即數(shù)方式ARM指令中的立即數(shù),由一個8bit的常數(shù)循環(huán)右移偶數(shù)位得到:立即數(shù) =(0-255) 循環(huán)右移 2N位(N最大為16)例子:合法立即數(shù):0 x3fc,0 x0,0 xf
38、0000000, 0 xf0000001非法立即數(shù):0 x1fe,0 xffff,0 x1010,0 xf0000010同一個立即數(shù)可能有多種表示方法。如:0 x3f0 = 0 x3f 循環(huán)右移 28位0 x3f0 = 0 xfc 循環(huán)右移 30位對立即數(shù)的編碼規(guī)則:如果立即數(shù)在0 0 xff之間,移位數(shù)為0。否則,就取決于編譯器了。指令“mov r0, #0 x3f0”在ADS1.2中被編譯為0 xe3a00ffc,在arm-elf-gcc-2.95.3中被編譯為0 xe3a00e3f。對于有互補(bǔ)操作的指令,編譯器可以做智能的轉(zhuǎn)換,比如:mvn r1, 0 xffffff00-mov r1,
39、 0 xffadd r1, r1, #0 xffffff00-sub r1, r1, #0 x100adc r1, r1, #0 xffffff00-sbc r1, r1, #0 xffand r1, r1,#0 xffffff00-bic r1, r1, #0 xff這樣,一些原本非法的立即數(shù)也可以正常編譯通過。如果一個立即數(shù),經(jīng)過上述轉(zhuǎn)換后是合法的,那么它也可以用在數(shù)據(jù)操作指令中。SP4.基址變址尋址的三種形式前變址模式:(基址寄存器存放的地址先變化,然后執(zhí)行指令的操作)LDR R0,R1,4;R0R14自動變址模式:(實(shí)現(xiàn)基址寄存器自動修改,可讓程序追蹤一個數(shù)據(jù)表)LDR R0,R1,4
40、?。籖0R14、R1R14 (驚嘆號!表示在完成數(shù)據(jù)傳送后將更新基址寄存器即自動加上前變址的字節(jié)數(shù))后變址模式:(實(shí)質(zhì)是基址寄存器不加偏移作為傳送地址使用,然后更新 基址寄存器內(nèi)容)LDR R0,R1 ,4;R0R1、R1R14基址加偏址尋址變址模式數(shù)據(jù)基址寄存器示例自動(回寫型前)變址membase+offset基址寄存器加上偏移LDR r0,r1,#4!前變址membase+offset不變LDR r0,r1,#4后變址membase基址寄存器加上偏移LDR r0,r1,#45.堆棧尋址實(shí)例堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,F(xiàn)ILO)的方式工作,使用一個稱
41、作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是指向棧頂。當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時,稱為滿堆棧(Full Stack),而當(dāng)堆棧指針指向下一個將要放入數(shù)據(jù)的空位置時,稱為空堆棧(Empty Stack)。訪問存儲器時,存儲器的地址向高地址方向生長,稱為遞增堆棧(Ascending stack); 存儲器的地址向低地址方向生長,稱為遞減堆棧(Descending stack)。 四種類型的堆棧工作方式 滿遞增堆棧(FA):堆棧指針指向最后壓入的數(shù)據(jù),且由低地址向高地址生成。滿遞減堆棧(FD) :堆棧指針指向最后壓入的數(shù)據(jù),且由高地址向低地址生成??者f增堆棧(EA) :堆棧指針指向
42、下一個將要放入數(shù)據(jù)的空位置,且由低地址向高地址生成??者f減堆棧(ED) :堆棧指針指向下一個將要放入數(shù)據(jù)的空位置,且由高地址向低地址生成6.塊拷貝尋址實(shí)例尋址模式描述起始地址結(jié)束地址Rn!IA執(zhí)行后增加RnRn+4*(N-1)Rn+4*NIB執(zhí)行前增加Rn+4Rn+4*NRn+4*NDA執(zhí)行后減少RnRn-4*(N-1)Rn-4*NDB執(zhí)行前減少Rn-4Rn-4*NRn-4*N注:!決定Rn的值是否隨著傳送而改變7.SWP指令單寄存器交換指令(SWP)交換指令把字或無符號字節(jié)的讀取和存入組合在一條指令中。通常都把這兩種傳送結(jié)合成為一個不能被外部存儲器的訪問(例如來自DMA控制器的訪問)分隔開的
43、基本的存儲器操作,因此本指令一般用于處理器之間或處理器與DMA控制器之間共享的信號量、數(shù)據(jù)結(jié)構(gòu)進(jìn)行互斥的訪問。 SWP指令應(yīng)用示例:SWPR1,R1,R0;將R1的內(nèi)容與R0指向的存儲單元的內(nèi)容進(jìn)行互換 SWPBR1,R2,R0;將R0指向的存儲單元低字節(jié)數(shù)據(jù)讀取到R1中 ;(高24位清零),并將R2的內(nèi)容寫入到該內(nèi)存單元中 ;(最低字節(jié)有效) SWP條件 目的寄存器,源寄存器1,源寄存器2SWP 指令用于將源寄存器2所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時將源寄存器1中的字?jǐn)?shù)據(jù)傳送到源寄存器2所指向的存儲器中。顯然,當(dāng)源寄存器1和目的寄存器為同一個寄存器時,指令交換該寄存器和存儲器的
44、內(nèi)容。SWP條件B 目的寄存器,源寄存器1,源寄存器2SWPB 指令用于將源寄存器2所指向的存儲器中的字節(jié)數(shù)據(jù)傳送到目的寄存器中,目的寄存器的高24位清零,同時將源寄存器1中的字節(jié)數(shù)據(jù)傳送到源寄存器2所指向的存儲器中。注意:PC不能用作指令中的任何寄存器基址寄存器Rn不應(yīng)與源寄存器Rm或目標(biāo)寄存器Rd相同,但Rm和Rd可以相同指令示例:SWP R0,R1,R2 ;將R2所指向的存儲器中的字?jǐn)?shù)據(jù)傳送到R0,同時將R1中的字?jǐn)?shù)據(jù)傳送到R2所指向的存儲單元。SWP R0,R0,R1 ;將R1所指向的存儲器中的字?jǐn)?shù)據(jù)與R0中的字?jǐn)?shù)據(jù)交換。 SWPB R0,R1,R2 ;將R2所指向的存儲器中的字節(jié)數(shù)據(jù)
45、傳送到R0,R0的高24位清零,同時將R1中的低8位數(shù)據(jù)傳送到R2所指向的存儲單元。SWPB R0,R0,R1 ;該指令完成將R1所指向的存儲器中的字節(jié)數(shù)據(jù)與R0中的低8位數(shù)據(jù)交換。 8.程序狀態(tài)寄存器與通用寄存器之間的傳送指令A(yù)RM指令中有兩條指令,用于在狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù)。修改狀態(tài)寄存器一般是通過“讀取修改寫回”三個步驟的操作來實(shí)現(xiàn)的。 這兩條指令分別是:狀態(tài)寄存器 通用寄存器的傳送指令(MRS)通用寄存器 狀態(tài)寄存器的傳送指令(MSR) 注意:不能試圖通過MSR指令直接修改CPSR中的T控制位直接將程序切換到Thumb狀態(tài),而必須通過BX等指令來完成程序狀態(tài)的切換。9.轉(zhuǎn)
46、移指令 轉(zhuǎn)移指令用于實(shí)現(xiàn)程序流程的跳轉(zhuǎn),在ARM程序中有兩種方法可以實(shí)現(xiàn)程序流程的跳轉(zhuǎn): 使用專門的跳轉(zhuǎn)指令。 直接向程序計(jì)數(shù)器PC寫入跳轉(zhuǎn)地址值。通過向程序計(jì)數(shù)器PC寫入跳轉(zhuǎn)地址值,可以實(shí)現(xiàn)在4GB的地址空間中的任意跳轉(zhuǎn),在跳轉(zhuǎn)之前結(jié)合使用MOV LR,PC等類似指令,可以保存將來的返回地址值,從而實(shí)現(xiàn)在4GB連續(xù)的線性地址空間的子程序調(diào)用。ARM的轉(zhuǎn)移指令可以從當(dāng)前指令向前或向后的32MB的地址空間跳轉(zhuǎn),根據(jù)完成的功能它可以分為以下4種 : B 轉(zhuǎn)移指令 BX 帶狀態(tài)切換的轉(zhuǎn)移指令 BL帶鏈接的轉(zhuǎn)移指令 BLX 帶鏈接和狀態(tài)切換的轉(zhuǎn)移指令 10.部分簡單常用偽指令/偽操作ARM偽指令不屬于
47、ARM指令集中的指令,是為了編程方便而定義的。偽指令可以像其它ARM指令一樣使用,但在編譯時這些指令將被等效的一條或多條ARM指令所代替。ARM偽指令有四條,分別為ADR偽指令、ADRL偽指令、LDR偽指令、NOP偽指令。 七1.ARM匯編中的主要文件格式源程序文件文件名說 明匯編程序文件*.S用ARM匯編語言編寫的ARM程序或Thumb程序。C程序文件*.C用C語言編寫的程序代碼。頭文件*.H為了簡化源程序,把程序中常用到的常量命名、宏定義、數(shù)據(jù)結(jié)構(gòu)定義等單獨(dú)放在一個文件中,一般稱為頭文件。注意:在ARM的一個工程中,可以包含多個匯編源文件或多個C程序文件,或匯編源文件與C程序文件的組合,但
48、是至少要包含一個匯編源文件或C語言源文件。 2.ADS環(huán)境下ARM匯編語句書寫格式ARM匯編語言語句格式如下所示:symbolinstruction|directive | pseudo-instruction;comment 其中:1)instruction為指令。(指令不能從一行的行頭開始,在一行語句指令的前面必須有空格或符號) directive為偽操作。 3)pseudo-instruction為偽指令。 4)symbol為符號。(符號必須從一行的行頭開始,并且符號中不能包含空格) 5)comment為語句的注釋。(以“;”開頭) 注意:標(biāo)號必須從一行的行頭開始。并且標(biāo)號中不能包含空格
49、。在指令和偽指令中標(biāo)號用作地址標(biāo)號;在有些偽操作中標(biāo)號用作變量或者常量;指令不能從一行的行頭開始,必須從第二列或能區(qū)分標(biāo)號的地方開始書寫。在一行語句中,指令的前面必須有空格或符號;注釋以“;”開頭,注釋的結(jié)尾即為一行的結(jié)尾,注釋也可單獨(dú)占用一行。 在匯編語言程序設(shè)計(jì)中,每一條指令的助記符可以全部用大寫、或全部用小寫,但不允許在一條指令中大、小寫混用。如果一條語句太長,可將該長語句分為若干行來書寫,在行的末尾用“”表示下一行與本行為同一條語句,在“”之后不能有其他字符,包括空格和制表符。源程序中,在語句之間適當(dāng)?shù)夭迦肟招?,可以提高源代碼的可讀性。 ;標(biāo)號START沒有頂格寫;標(biāo)號后不能帶:(AD
50、S環(huán)境);指令不允許頂格書寫;指令中大小寫混合;無法跳轉(zhuǎn)到Loop標(biāo)號處 START MOV R0,#1ABC: MOV R1,#2MOV R2,#3loop Mov R2,#3 B Loop3.ATPCSATPCS(ARM-Thumb Procedure Call Standard)規(guī)定了一些子程序間調(diào)用的基本規(guī)則,這些規(guī)則包括子程序調(diào)用過程中寄存器的使用規(guī)則,數(shù)據(jù)棧的使用規(guī)則,參數(shù)的傳遞規(guī)則。有了這些規(guī)則之后,單獨(dú)編譯的C語言程序就可以和匯編程序相互調(diào)用。使用ADS的C語言編譯器編譯的C語言子程序本身就能滿足指定的ATPCS類型。而對于匯編語言來說,則需要用戶來保證各個子程序滿足ATPCS
51、的要求。八1.預(yù)處理偽指令的特點(diǎn)、三種類型預(yù)處理偽指令的特點(diǎn) 把文件包含的正文替換進(jìn)來,如標(biāo)準(zhǔn)頭文件和自定義頭文件,其內(nèi)容包括符號常量、復(fù)合變量原型、用戶自定義的變量類型和函數(shù)原型說明等; 對宏定義進(jìn)行宏擴(kuò)展,減少編程量,改進(jìn)源程序的可讀性,參數(shù)宏更減少了函數(shù)調(diào)用的開銷;條件編譯改善了編程的靈活性,也改善了可移植性。預(yù)處理偽指令有三種:文件包含、宏定義和條件編譯。 2.使用宏的好處使用宏的好處:改動此寄存器的設(shè)置 利用宏還可以提高代碼運(yùn)行效率,子程序調(diào)用需要壓棧/出棧,該過程如果過于頻繁會耗費(fèi)大量的CPU資源。一些代碼量小但運(yùn)行頻繁的代碼如果采用帶參數(shù)宏來實(shí)現(xiàn)會提高代碼的運(yùn)行效率, 3.參數(shù)宏
52、和函數(shù)的異同參數(shù)宏和函數(shù)的異同:相同點(diǎn):可以一次編碼多次使用,都可以帶有參數(shù)。參數(shù)宏和函數(shù)的重要區(qū)別: 一是參數(shù)宏的形式參數(shù)表中沒有類型說明符; 二是參數(shù)宏在時空的開銷上比函數(shù)都要小。4.const、volatile修飾符const修飾符:常量修飾符。C語言中,內(nèi)存中單獨(dú)開辟有一個常量區(qū)用于存放const變量。變量被const修飾后就不再變了。const修飾符的作用:通知編譯器保護(hù)參數(shù)不被修改;使代碼緊湊;便于用戶閱讀和減少待清理垃圾的出現(xiàn)。const int * ptr = &a/*說明指針指向的對象是常量,是常量指針*/int * const ptr = &b/*說明指針本身是常量,是指針
53、常量*/volatile修飾符:易失性修飾符,說明所定義的變量或指針可以被多種原因修改。例如,有的變量在中斷服務(wù)程序中會被修改,有的會被I/ O修改,這種修改帶有隨機(jī)性,為防止丟失任何一次這種修改,要把它修飾為易失性的變量。注意,禁止把它作為寄存器變量處理,也禁止對它進(jìn)行任何形式的優(yōu)化。九1.嵌入式系統(tǒng)的初始化過程2.BootLoader及兩種操作模式BootLoader是系統(tǒng)加電后首先運(yùn)行的一段程序代碼.目的:將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),為調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。對于不使用操作系統(tǒng)的嵌入式系統(tǒng),應(yīng)用程序的運(yùn)行同樣需要依賴這樣一個準(zhǔn)備良好的軟硬件環(huán)境. BootLoader
54、是依賴于目標(biāo)硬件實(shí)現(xiàn)的,可以從兩個方面來理解:不同嵌入式微處理器體系結(jié)構(gòu)都有不同的BootLoader.BootLoader還依賴于具體的嵌入式板級硬件設(shè)備配置。兩種操作模式:1)啟動加載模式:也稱為“自主”(Autonomous)模式。即BootLoader從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個過程沒有用戶的介入,是BootLoader的正常工作模式。當(dāng)嵌入式系統(tǒng)以產(chǎn)品形式發(fā)布的時候,Bootloader必須工作在這種模式下 。 2)下載模式:目標(biāo)機(jī)上的BootLoader將通過串口或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)
55、下載的文件通常首先被BootLoader保存到目標(biāo)機(jī)的RAM中,然后再被 BootLoader寫到目標(biāo)機(jī)上的固態(tài)存儲設(shè)備中。BootLoader的這種模式通常在系統(tǒng)更新時使用。工作于這種模式下的 BootLoader通常都會向它的終端用戶提供一個簡單的命令行接口。 3.地址重映射 :整個過程是把啟動代碼從ROM(EEPROM或者Flash)拷貝到SDRAM運(yùn)行,同時在拷貝完畢后進(jìn)行內(nèi)存的重新映射,把SDRAM映射到原來的ROM地址(0 x00000000)中,這樣就可以用SDRAM中的代碼寫Flash,使得程序代碼得以更新 。ROM地址的重映射(remap)0 x0200(boot code)
56、0 x0100(Reset_handler)B Reset_Handler0 x0000Flash(remap)0 x0204(boot code)0 x0200(Reset_handler)B Reset_Handler0 x0000RAMROM地址重映射的實(shí)現(xiàn)為保證重映射之后提供正確的中斷入口地址,在重映射之前就必須把中斷和異常向量表拷貝到內(nèi)部RAM中。其程序?qū)崿F(xiàn)如下:mov r8,#RAM_BASE_BOOT/RAM_BASE_BOOT是重映射前內(nèi)部RAM區(qū)地址 add r9, pc #VectorTale /VectorTale是異常向量表入口ldmia r9!, r0-r7 /讀8個異常向量 stmia r8!, r0-r7 /保存8個異常向量到RAM區(qū)ldmia r9!, r0-r4 /讀5個異常處理程序絕對地址stmia r8!, r0-r4 /保存5個異常處理
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 黑龍江省佳木斯一中2025屆高三下學(xué)期暑假入學(xué)考試語文試題含解析
- 黑龍江省綏化市青岡一中2024-2025學(xué)年高三廣東六校高考模擬考試歷史試題及參考答案含解析
- 2024年計(jì)算機(jī)二級考試面試試題及答案
- 2025屆黑龍江省齊齊哈爾市高三二模語文試題
- 2024年份十一月份金融機(jī)構(gòu)按揭車輛債權(quán)轉(zhuǎn)讓風(fēng)險告知書
- 反恐防暴安全教育培訓(xùn)
- 2024語文知識點(diǎn)挑戰(zhàn)與試題及答案
- 學(xué)生政治教育
- 物流服務(wù)師團(tuán)隊(duì)協(xié)作能力試題及答案
- 獨(dú)特視角下的計(jì)算機(jī)二級試題及答案
- 2024專升本英語答題卡浙江省
- 2024年荊門市水務(wù)局事業(yè)單位公開招聘工作人員招聘歷年公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 反食品浪費(fèi)及食品安全與健康
- 【勞動教育一等獎教學(xué)案例】-二年級勞動教育-《三股辮兒我會編》活動方案
- 校園模擬法庭劇本
- 水準(zhǔn)測量記錄數(shù)據(jù)自動生成表
- 2024年十堰市中小學(xué)教師職稱晉升水平能力測試題附答案
- 肝門部膽管癌護(hù)理查房課件
- 神經(jīng)內(nèi)科護(hù)理查房課件眩暈
- 公司經(jīng)營合同-公司代持股份協(xié)議范本新
- 水平三(五年級)體育《障礙跑-紅軍長征路》教學(xué)設(shè)計(jì)及教案
評論
0/150
提交評論