嵌入式系統(tǒng)應(yīng)用考點(diǎn)總結(jié)中國(guó)礦業(yè)大學(xué)徐海學(xué)院信息_第1頁
嵌入式系統(tǒng)應(yīng)用考點(diǎn)總結(jié)中國(guó)礦業(yè)大學(xué)徐海學(xué)院信息_第2頁
嵌入式系統(tǒng)應(yīng)用考點(diǎn)總結(jié)中國(guó)礦業(yè)大學(xué)徐海學(xué)院信息_第3頁
嵌入式系統(tǒng)應(yīng)用考點(diǎn)總結(jié)中國(guó)礦業(yè)大學(xué)徐海學(xué)院信息_第4頁
嵌入式系統(tǒng)應(yīng)用考點(diǎn)總結(jié)中國(guó)礦業(yè)大學(xué)徐海學(xué)院信息_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.:.;中國(guó)礦業(yè)大學(xué)徐海學(xué)院 信息10-1 鄒柯 22100804第一章 嵌入式系統(tǒng)概述嵌入式系統(tǒng)綜合描畫是現(xiàn)代科學(xué)多學(xué)科相互交融的以運(yùn)用技術(shù)產(chǎn)品為中心,以計(jì)算機(jī)技術(shù)為根底,以通訊技術(shù)為載體,以消費(fèi)類產(chǎn)品為對(duì)象,引入各類傳感器,進(jìn)入Internet網(wǎng)絡(luò)技術(shù)的銜接,從而順應(yīng)運(yùn)用環(huán)境的產(chǎn)品。無多余軟件,軟件以固化態(tài)出現(xiàn),硬件亦無多余存儲(chǔ)器,可靠性高,本錢低,體積小,功耗少,包含于各種不同類型的設(shè)備。技術(shù)密集,投資強(qiáng)度大,高度分散,不斷創(chuàng)新的知識(shí)密集型系統(tǒng)。反映當(dāng)代最新技術(shù)的先進(jìn)程度。嵌入式系統(tǒng)定義IEEE國(guó)際電氣和電子工程師協(xié)會(huì) 給出的定義: 嵌入式系統(tǒng)是用于控制、監(jiān)視或者輔助安裝、機(jī)器或者設(shè)備運(yùn)

2、轉(zhuǎn)的安裝。通常執(zhí)行特定功能以微電腦和外圍構(gòu)成中心嚴(yán)厲的時(shí)序和穩(wěn)定性要求此定義是從運(yùn)用上思索的,嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)電等附屬安裝。從技術(shù)的角度定義:以運(yùn)用為中心、以計(jì)算機(jī)技術(shù)為根底、 軟件硬件可裁剪、順應(yīng)運(yùn)用系統(tǒng)對(duì)功能、可靠性、本錢、體積、功耗嚴(yán)厲要求的公用計(jì)算機(jī)系統(tǒng)。(國(guó)內(nèi)普遍被認(rèn)同的定義)從系統(tǒng)的角度定義:嵌入式系統(tǒng)是設(shè)計(jì)完成復(fù)雜功能的硬件和軟件,并使其嚴(yán)密耦合在一同的計(jì)算機(jī)系統(tǒng)。術(shù)語嵌入式反映了這些系統(tǒng)通常是更大系統(tǒng)中的一個(gè)完好的部分,稱為嵌入的系統(tǒng)。嵌入的系統(tǒng)中可以共存多個(gè)嵌入式系統(tǒng)。廣義與狹義的嵌入式系統(tǒng)“嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng);廣

3、義上講,凡是帶有微處置器的公用軟硬件系統(tǒng)都可稱為嵌入式系統(tǒng)如各類單片機(jī)和DSP系統(tǒng)。這些系統(tǒng)在完成較為單一的專業(yè)功能時(shí)具有簡(jiǎn)約高效的特點(diǎn)但由于他們沒有操作系統(tǒng),管理系統(tǒng)硬件和軟件的才干有限,在實(shí)現(xiàn)復(fù)雜多義務(wù)功能時(shí),往往困難重重,甚至無法實(shí)現(xiàn)狹義上講,我們更加強(qiáng)調(diào)那些運(yùn)用嵌入式微處置器構(gòu)成獨(dú)立系統(tǒng),具有操作系統(tǒng),具有特定功能,用于特定場(chǎng)所的嵌入式系統(tǒng)國(guó)內(nèi)普遍被認(rèn)同的定義:嵌入式系統(tǒng)是以運(yùn)用為中心,以計(jì)算機(jī)技術(shù)為根底,軟、硬件可裁剪,順應(yīng)運(yùn)用系統(tǒng)對(duì)功能、可靠性、本錢、體積、功耗等嚴(yán)厲要求的公用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)三要素三要素:嵌入、公用、計(jì)算機(jī)嵌入式系統(tǒng)的特點(diǎn):由三要素引出嵌入性:嵌入到對(duì)象體系

4、中,有對(duì)象環(huán)境要求公用性:軟、硬件按對(duì)象要求裁減計(jì)算機(jī):實(shí)現(xiàn)對(duì)象的智能化功能嵌入式系統(tǒng)的組成嵌入式系統(tǒng)普通由嵌入式微處置器、外圍硬件設(shè)計(jì)備、嵌入式操作系統(tǒng)及用戶運(yùn)用程序4部分組成。嵌入式系統(tǒng)設(shè)計(jì)的中心部件是各種類型的嵌入式處置器。嵌入式系統(tǒng)的硬件組成硬件層是由嵌入式微處置器、存儲(chǔ)器系統(tǒng)、通用設(shè)備接口和I/O接口A/D 、D/A、I/O等組成。在一片嵌入式微處置器根底上添加電源電路、時(shí)鐘電路和存儲(chǔ)器電路ROM 和SDRAM等,就構(gòu)成了一個(gè)嵌入式中心控制模塊。其中操作系統(tǒng)和運(yùn)用程序都可以固化在ROM中。嵌入式系統(tǒng)之最小系統(tǒng)嵌入式微處置器中心、存儲(chǔ)器ROM、RAM、Flash ROM、I/O設(shè)備、電

5、源模塊、復(fù)位嵌入式系統(tǒng)之接口模塊USB模塊、LCD模塊、鍵盤模塊嵌入式系統(tǒng)的軟件組成中間層-板級(jí)支持包BSP與硬件相關(guān)的底層驅(qū)動(dòng)軟件中間層也稱為硬件籠統(tǒng)層HAL或板級(jí)支持包BSP,它把系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動(dòng)程序與硬件無關(guān)。BSP具有以下兩個(gè)特點(diǎn):1)操作系統(tǒng)相關(guān)性 2)硬件相關(guān)性 設(shè)計(jì)一個(gè)完好的BSP需求完成兩部分任務(wù):嵌入式系統(tǒng)的初始化:片級(jí)初始化、板級(jí)初始化和系統(tǒng)級(jí)初始化 設(shè)計(jì)硬件相關(guān)的設(shè)備驅(qū)動(dòng)。系統(tǒng)軟件層-嵌入式操作系統(tǒng)是嵌入式運(yùn)用軟件的根底和開發(fā)平臺(tái)。嵌入式系統(tǒng)的出現(xiàn),處理了嵌入式軟件開發(fā)規(guī)范化的難題。通用性強(qiáng)、可靠性強(qiáng)軟件層由嵌入式操作系統(tǒng)、文件系統(tǒng)、圖形

6、用戶接口GUI、網(wǎng)絡(luò)系統(tǒng)及通用組件模塊組成。嵌入式操作系統(tǒng)的作用普通只是為了運(yùn)用程序提供必要運(yùn)轉(zhuǎn)環(huán)境義務(wù)調(diào)度,附加義務(wù)通訊、內(nèi)存管理等功能。嵌入式系統(tǒng)和系統(tǒng)的硬件根底關(guān)系嚴(yán)密,普通都需求移植和配置才可以運(yùn)用。嵌入式操作系統(tǒng)讓嵌入式系統(tǒng)的開發(fā)利用通用的功能模塊,這可以讓開發(fā)更加高效。 運(yùn)用軟件層-運(yùn)用程序在嵌入式系統(tǒng)中,運(yùn)用程序的層級(jí)遠(yuǎn)遠(yuǎn)少于通用計(jì)算機(jī)。由于控制硬件是嵌入式系統(tǒng)根本的操作,因此嵌入式運(yùn)用程序依然與系統(tǒng)的硬件根底關(guān)系親密。尤其在沒有操作系統(tǒng)的情況下,嵌入式的運(yùn)用程序需求直接訪問存放器或者設(shè)備的地址來操作硬件。 基于RTOS開發(fā)的運(yùn)用程序組成,用來完成對(duì)被控對(duì)象的控制功能。功能層是面

7、向被控對(duì)象和用戶的,為方便用戶操作,往往需求提供一個(gè)友好的人機(jī)界面。嵌入式系統(tǒng)開展 1、以單芯片為中心的可編程控制器方式的系統(tǒng)。普通沒有操作系統(tǒng)的支持,經(jīng)過匯編言語直接控制。2、以嵌入式CPU為根底,以簡(jiǎn)單操作系統(tǒng)為中心的嵌入式系統(tǒng)。有簡(jiǎn)單操作系統(tǒng)的支持,但通用性較弱。3、以嵌入式操作系統(tǒng)為標(biāo)志的嵌入式系統(tǒng)。兼容性佳。4、以Internet為標(biāo)志的嵌入式系統(tǒng)。與Internet相結(jié)合。第2章 ARM微處置器硬件構(gòu)造什么是ARMARM既可以以為是一個(gè)公司的名字,也可以為是對(duì)一類微處置器的通稱,還可以以為是一種技術(shù)的名字。CISC和RISC技術(shù)CISC:復(fù)雜指令集計(jì)算機(jī)Complex Instru

8、ction Set Computer具有大量的指令和尋址方式8/2原那么:80%的程序只運(yùn)用20%的指令大多數(shù)程序只運(yùn)用少量的指令就可以運(yùn)轉(zhuǎn)。RISC:精簡(jiǎn)指令集計(jì)算機(jī)Reduced Instruction Set Computer在通道中只包含最有用的指令確保數(shù)據(jù)通道快速執(zhí)行每一條指令使CPU硬件構(gòu)造設(shè)計(jì)變得更為簡(jiǎn)單RISC體系構(gòu)造特點(diǎn):指令集中的大多數(shù)指令只需求執(zhí)行簡(jiǎn)單和根本的功能;減少存儲(chǔ)器訪問指令;芯片邏輯采用硬布線邏輯;減少指令數(shù)和尋址方式指令譯碼簡(jiǎn)化。CISC與RISC的對(duì)比計(jì)算機(jī)體系構(gòu)造分類馮諾依曼體系構(gòu)造模型馮諾依曼體系構(gòu)造的特點(diǎn)1數(shù)據(jù)與指令都存儲(chǔ)在存儲(chǔ)器中2被大多數(shù)計(jì)算機(jī)所采

9、用ARM7馮諾依曼體系構(gòu)造哈佛體系構(gòu)造哈佛體系構(gòu)造的特點(diǎn)1程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器分開2提供了較大的存儲(chǔ)器帶寬3適宜于數(shù)字信號(hào)處置4大多數(shù)DSP都是哈佛構(gòu)造ARM9哈佛體系構(gòu)造ARM和Thumb指令A(yù)RM體系構(gòu)造在V4版中添加了16位Thumb指令集。ARM指令集效率高,但是代碼密度低;Thumb指令集具有較高的代碼密度,卻依然堅(jiān)持ARM的大多數(shù)性能上的優(yōu)勢(shì),它是ARM指令集的子集。ARM和Thumb形狀切換一切的ARM指令都是可以有條件執(zhí)行的,而Thumb指令僅有一條指令具備條件執(zhí)行功能。ARM程序和Thumb程序可相互調(diào)用,相互之間的形狀切換開銷幾乎為零。進(jìn)入Thumb形狀:當(dāng)操作數(shù)存放器的

10、形狀態(tài)位為1進(jìn)入ARM形狀:當(dāng)操作數(shù)存放器的形狀態(tài)位為0ARM操作面向32位操作數(shù),以字為單位對(duì)齊Thumb操作面向16位操作數(shù),以半字為單位對(duì)齊;流水線技術(shù)流水線(pipeline)是 Intel初次在486芯片中開場(chǎng)運(yùn)用的。流水線(Pipeline)技術(shù):幾個(gè)指令可以并行執(zhí)行 提高了CPU的運(yùn)轉(zhuǎn)效率 內(nèi)部信息流要求通暢流動(dòng)為添加處置器指令流的速度,ARM7 系列運(yùn)用3級(jí)流水線.ARM存儲(chǔ)系統(tǒng)ARM體系構(gòu)造可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),稱之為大端格式和小端格式。大端格式(big-endian):字?jǐn)?shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中,而字?jǐn)?shù)據(jù)的低字節(jié)那么存放在高地址中小端格式(little-endian)

11、:與大端存儲(chǔ)格式相反。低地址中存放的是字?jǐn)?shù)據(jù)的低字節(jié),高地址存放的是字?jǐn)?shù)據(jù)的高字節(jié)。ARM 可以用 little/big endian 格式存取數(shù)據(jù). 存儲(chǔ)器系統(tǒng)的層次構(gòu)造第三章 ARM尋址方式與指令系統(tǒng)3.1 ARM編程模型3.1.1 處置器方式處置器7種方式除用戶方式外,其它方式均為特權(quán)方式。ARM內(nèi)部存放器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許或者可選為只允許特權(quán)方式下訪問。此外,特權(quán)方式可以自在的切換處置器方式,而用戶方式不能直接切換到別的方式。快中斷、中斷、管理、中止、未定義這五種方式稱為異常方式。它們除了可以經(jīng)過程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處置器進(jìn)入相應(yīng)的

12、方式。每種異常方式都有一些獨(dú)立的存放器,以防止異常退出時(shí)用戶方式的形狀不可靠。用戶、系統(tǒng)這兩種方式都不能由異常進(jìn)入,而且它們運(yùn)用完全一樣的存放器組。系統(tǒng)方式是特權(quán)方式,不受用戶方式的限制。操作系統(tǒng)在該方式下訪問用戶方式的存放器就比較方便,而且操作系統(tǒng)的一些特權(quán)義務(wù)可以運(yùn)用這個(gè)方式訪問一些受控的資源。3.1.2 ARM微處置器的任務(wù)形狀第一種:為ARM形狀,此時(shí)處置器執(zhí)行32位的字對(duì)齊的ARM指令;第二種:為Thumb形狀,此時(shí)處置器執(zhí)行16位的、半字對(duì)齊的Thumb指令。 在程序的執(zhí)行過程中,微處置器可以隨時(shí)在兩種任務(wù)形狀之間切換,并且,處置器任務(wù)形狀的轉(zhuǎn)變并不影響處置器的任務(wù)方式和相應(yīng)存放器

13、中的內(nèi)容。進(jìn)入Thumb形狀當(dāng)操作數(shù)存放器的形狀位為1時(shí),可以采用執(zhí)行BX指令的方法,使微處置器從ARM形狀切換到Thumb形狀。此外,當(dāng)處置器處于Thumb形狀時(shí)發(fā)生異常如IRQ、FIQ、Undef等,那么異常處置前往時(shí),自動(dòng)切換到Thumb形狀。 Thumb的特點(diǎn)Thumb是對(duì)32位存放器操作的16位指令集與32位ARM指令集相比代碼尺寸更小,更適宜嵌入式運(yùn)用。由于是對(duì)32位構(gòu)造的CPU操作,所以比純16位的指令集效率更高。與其它32位下的16位指令集相比,它還可以切換到32位ARM指令集并全速執(zhí)行。進(jìn)入ARM形狀當(dāng)操作數(shù)存放器的形狀位為0時(shí),執(zhí)行BX指令時(shí)可以使微處置器從Thumb形狀切

14、換到ARM形狀。此外,在處置器進(jìn)展異常處置時(shí),把PC指針放入異常方式鏈接存放器中,并從異常向量地址開場(chǎng)執(zhí)行程序,也可以使處置器切換到ARM形狀。 3.1.3 內(nèi)部存放器在ARM7TDMI處置器內(nèi)部有37個(gè)用戶可見的存放器。31個(gè)通用存放器6個(gè)形狀存放器在不同的任務(wù)方式和處置器形狀下,程序員可以訪問的存放器也不盡一樣。在匯編言語中存放器R0R13為保管數(shù)據(jù)或地址值的通用存放器。它們是完全通用的存放器,不會(huì)被體系構(gòu)造作為特殊用途,并且可用于任何運(yùn)用通用存放器的指令;其中R0R7為未分組的存放器,也就是說對(duì)于任何處置器方式,這些存放器都對(duì)應(yīng)于一樣的32位物理存放器;存放器R8R14為分組存放器。它們

15、所對(duì)應(yīng)的物理存放器取決于當(dāng)前的處置器方式,幾乎一切允許運(yùn)用通用存放器的指令都允許運(yùn)用分組存放器;存放器R8R12有兩個(gè)分組的物理存放器。一個(gè)用于除FIQ方式之外的一切存放器方式,另一個(gè)用于FIQ方式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處置速度。存放器R13、R14分別有6個(gè)分組的物理存放器。一個(gè)用于用戶和系統(tǒng)方式,其他5個(gè)分別用于5種異常方式。 存放器R13常作為堆棧指針SP。在ARM指令集當(dāng)中,沒有以特殊方式運(yùn)用R13的指令或其它功能,只是習(xí)慣上都這樣運(yùn)用。但是在Thumb指令集中存在運(yùn)用R13的指令。 R14為鏈接存放器LR,在構(gòu)造上有兩個(gè)特殊功能:在每種方式下,方式本身的R14版本

16、用于保管子程序前往地址;當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)的異常方式版本設(shè)置為異常前往地址有些異常有一個(gè)小的固定偏移量。R14LR存放器與子程序調(diào)用操作流程:1.程序A執(zhí)行過程中調(diào)用程序B;2.程序跳轉(zhuǎn)至標(biāo)號(hào)Lable,執(zhí)行程序B。同時(shí)硬件將“BL Lable指令的下一條指令所在地址存入R14LR;3.程序B執(zhí)行最后,將R14存放器的內(nèi)容放入PC,前往程序A;R14存放器與異常發(fā)生異常發(fā)生時(shí),程序要跳轉(zhuǎn)至異常效力程序,對(duì)前往地址的處置與子程序調(diào)用類似,都是由硬件完成的。區(qū)別在于有些異常有一個(gè)小常量的偏移。R14存放器留意要點(diǎn)當(dāng)發(fā)生異常嵌套時(shí),這些異常之間能夠會(huì)發(fā)生沖突。例如:假設(shè)用戶在用戶方式下執(zhí)行程

17、序時(shí)發(fā)生了IRQ中斷,用戶方式存放器不會(huì)被破壞。但是假設(shè)允許在IRQ方式下的中斷處置程序重新使能IRQ中斷,并且發(fā)生了嵌套的IRQ中斷時(shí),外部中斷處置程序保管在R14_irq中的任何值都將被嵌套中斷的前往地址所覆蓋。1.執(zhí)行用戶方式下的程序;2.發(fā)生IRQ中斷,硬件將某個(gè)地址存入IRQ方式下的R14_irq存放器,用戶方式下的R14沒有被破壞;3. IRQ效力程序A執(zhí)行終了,將R14_irq存放器的內(nèi)容減去某個(gè)常量后存入PC,前往之前被中斷的程序; 4. 假設(shè)在IRQ處置程序中翻開IRQ中斷,并且再次發(fā)生IRQ中斷;5. 硬件將前往地址保管在R14_irq存放器中,原來保管的前往地址將被覆蓋,

18、呵斥錯(cuò)誤;6. 在程序B前往到程序A,然后在前往到用戶方式下被中斷的程序時(shí),發(fā)生錯(cuò)誤,將不能正確前往;存放器R15為程序計(jì)數(shù)器PC,它指向正在取指的地址??梢砸詾樗且粋€(gè)通用存放器,但是對(duì)于它的運(yùn)用有許多與指令相關(guān)的限制或特殊情況。假設(shè)R15運(yùn)用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測(cè)的。 存放器CPSR為程序形狀存放器,在異常方式中,另外一個(gè)存放器“程序形狀保管存放器SPSR可以被訪問。每種異常都有本人的SPSR,在進(jìn)入異常時(shí)它保管CPSR的當(dāng)前值,異常退出時(shí)可經(jīng)過它恢復(fù)CPSR。ARM7TDMI內(nèi)核包含1個(gè)CPSR和5個(gè)供異常處置程序運(yùn)用的SPSR。CPSR反映了當(dāng)前處置器的形狀,其包含

19、:4個(gè)條件代碼標(biāo)志負(fù)(N)、零(Z)、進(jìn)位(C)和溢出(V) ;2個(gè)中斷制止位,分別控制一種類型的中斷;5個(gè)對(duì)當(dāng)前處置器方式進(jìn)展編碼的位;1個(gè)用于指示當(dāng)前執(zhí)行指令(ARM還是Thumb)的位。 假設(shè)異常處置程序曾經(jīng)把前往地址拷貝到堆棧,那么可以運(yùn)用一條多存放器傳送指令來恢復(fù)用戶存放器并實(shí)現(xiàn)前往。留意:中斷前往指令的存放器列表其中必需包括PC后的“符號(hào)表示這是一條特殊方式的指令。這條指令在從存儲(chǔ)器中裝載PC的同時(shí)PC是最后恢復(fù)的,CPSR也得到恢復(fù)。這里運(yùn)用的堆棧指針SPR13是屬于異常方式的存放器,每個(gè)異常方式有本人的堆棧指針。這個(gè)堆棧指針應(yīng)必需在系統(tǒng)啟動(dòng)時(shí)初始化。 整個(gè)地址空間的起始位置地址

20、從0 x00000000開場(chǎng)有以下指令。b SYS_RST_HANDLER;0 x00000000b UDF_IND_HANDLER;0 x00000004b SWI_SVC_HANDLER;0 x00000008b INS_ABT_HANDLER;0 x0000000cb DAT_ABT_HANDLER;0 x00000010b IRQ_SVC_HANDLER;0 x00000018b FIQ_SVC_HANDLER;0 x0000001c當(dāng)發(fā)生外部中斷懇求,處置器首先自動(dòng)保管當(dāng)前形狀PCR14_,CPSRSPSR _ ,進(jìn)入外部中斷方式執(zhí)行地址0 x00000018處的指令,即b IRQ_

21、SVC_HANDLER 轉(zhuǎn)到IRQ_SVC_HANDLER處執(zhí)行IRQ_SVC_HANDLER處的代碼為:IRQ_SVC_HANDLERsub lr,lr,#4stmfd sp!,r0-r3,lrldr r0, =IRQ_SVC_Vectorldr pc,r0處置器將通用存放器和前往地址壓入堆棧,接著跳轉(zhuǎn)到外部中斷懇求的中斷效力程序中。 IRQ_SVC_Vector為外部中斷懇求的中斷向量。普通來講, IRQ_SVC_Vector的地址對(duì)應(yīng)于RAM地址空間;Bootload代碼固化于flash中,對(duì)其只能讀不能寫。普通來講, IRQ_SVC_Vector的地址對(duì)應(yīng)于RAM地址空間;Bootlo

22、ad代碼固化于flash中,只讀不寫。MAP _ISR_STARTADDRESSSYS_RST_VECTOR#4UDF_INS_VECTOR#4SWI_SVC_VECTOR#4INS_ABT_VECTOR#4DAT_ABT_VECTOR#4RESERVED_VECTOR#4IRQ_SVC_VECTOR#4FIQ_SVC_VECTOR#4ldr r0,IRQ_SVC_VECTOR中斷效力程序入口地址ldr r1,=IsrIRQ中斷效力程序入口地址str r1,r0外部中斷懇求比較特殊:多種中斷共用同一個(gè)入口。一切中斷效力程序均可經(jīng)過IRQ中斷效力程序間接進(jìn)入IsrIRQ進(jìn)入異常在異常發(fā)生后,AR

23、M7TDMI內(nèi)核會(huì)作以下任務(wù):1.在適當(dāng)?shù)腖R中保管下一條指令的地址,當(dāng)異常入口:ARM形狀,那么ARM7TDMI將當(dāng)前指令地址加4或加8復(fù)制取決于異常的類型到LR中;為Thumb形狀,那么ARM7TDMI將當(dāng)前指令地址加2、4或加8 取決于異常的類型復(fù)制到LR中;異常處置器程序不用確定形狀。2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3. 將CPSR方式位強(qiáng)迫設(shè)置為與異常類型相對(duì)應(yīng)的值;4.強(qiáng)迫PC從相關(guān)的異常向量處取指。ARM7TDMI內(nèi)核在中斷異常時(shí)置位中斷制止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異常總是在ARM形狀中進(jìn)展處置。當(dāng)處置器處于Thumb形狀時(shí)發(fā)生了異常,在異常向量地址裝入P

24、C時(shí),會(huì)自動(dòng)切換到ARM形狀。異常向量退出異常當(dāng)異常終了時(shí),異常處置程序必需:1.將SPSR的值復(fù)制回CPSR;2.清零在入口置位的中斷制止標(biāo)志。3.將LR R14 中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為異常發(fā)生前的值。快速中斷懇求快速中斷懇求(FIQ)適用于對(duì)一個(gè)突發(fā)事件的快速呼應(yīng),這得益于在ARM形狀中,快中斷方式有8個(gè)公用的存放器可用來滿足存放器維護(hù)的需求這可以加速上下文切換的速度。不論異常入口是ARM形狀還是Thumb形狀,F(xiàn)IQ處置程序都會(huì)經(jīng)過執(zhí)行下面的指令從中斷前往:SUBS PC,R14_fiq,#4在一個(gè)特權(quán)

25、方式中,可以經(jīng)過置位CPSR中的F位來制止FIQ異常。中斷懇求中斷懇求IRQ異常是一個(gè)由nIRQ輸入端的低電平所產(chǎn)生的正常中斷在詳細(xì)的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個(gè)信號(hào),對(duì)用戶不可見。IRQ的優(yōu)先級(jí)低于FIQ。對(duì)于FIQ序列它是被屏蔽的。任何時(shí)候在一個(gè)特權(quán)方式下,都可經(jīng)過置位CPSR中的I 位來制止IRQ。 不論異常入口是ARM形狀還是Thumb形狀,IRQ處置程序都會(huì)經(jīng)過執(zhí)行下面的指令從中斷前往:SUBS PC,R14_irq,#4中止中止發(fā)生在對(duì)存儲(chǔ)器的訪問不能完成時(shí),中止包含兩種類型:預(yù)取中止 發(fā)生在指令預(yù)取過程中數(shù)據(jù)中止 發(fā)生在對(duì)數(shù)據(jù)訪問時(shí)中止預(yù)取指中止當(dāng)發(fā)生預(yù)取

26、中止時(shí),ARM7TDMI內(nèi)核將預(yù)取的指令標(biāo)志為無效,但在指令到達(dá)流水線的執(zhí)行階段時(shí)才進(jìn)入異常。假設(shè)指令在流水線中由于發(fā)生分支而沒有被執(zhí)行,中止將不會(huì)發(fā)生。 在處置中止的緣由之后,不論處于哪種處置器操作形狀,處置程序都會(huì)執(zhí)行下面的指令恢復(fù)PC和CPSR并重試被中止的指令: SUBS PC,R14_abt,#4中止數(shù)據(jù)中止在修復(fù)產(chǎn)生中止的緣由后,不論處于哪種處置器操作形狀,處置程序都必需執(zhí)行下面的前往指令,重試被中止的指令:SUBS PC,R14_abt,#8軟件中斷指令運(yùn)用軟件中斷(SWI)指令可以進(jìn)入管理方式,通常用于懇求一個(gè)特定的管理函數(shù)。SWI處置程序經(jīng)過執(zhí)行下面的指令前往:MOVS PC

27、,R14_svc這個(gè)動(dòng)作恢復(fù)了PC并前往到SWI之后的指令。未定義的指令當(dāng)ARM7TDMI處置器遇到一條本人和系統(tǒng)內(nèi)任何協(xié)處置器都無法處置的指令時(shí),ARM7TDMI內(nèi)核執(zhí)行未定義指令圈套。軟件可運(yùn)用這一機(jī)制經(jīng)過模擬未定義的協(xié)處置器指令來擴(kuò)展ARM指令集。注:ARM7TDMI處置器完全遵照ARM構(gòu)造v4T,可以捕獲一切分類未被定義的指令位格式。在模擬處置了失敗的指令后,圈套程序執(zhí)行下面的指令:MOVS PC,R14_svc這個(gè)動(dòng)作恢復(fù)了PC并前往到未定義指令之后的指令。 復(fù)位當(dāng)nRESET信號(hào)被拉低時(shí)普通外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會(huì)改動(dòng)這個(gè)內(nèi)核信號(hào),ARM7TDMI處置器放棄正在執(zhí)

28、行的指令。在復(fù)位后,除PC和CPSR之外的一切存放器的值都不確定。當(dāng)nRESET信號(hào)再次變?yōu)楦唠娖匠?,ARM處置器執(zhí)行以下操作:1.強(qiáng)迫CPSR中的M4:0變?yōu)閎10011管理方式;2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強(qiáng)迫PC從地址0 x00開場(chǎng)對(duì)下一條指令進(jìn)展取指;5.前往到ARM形狀并恢復(fù)執(zhí)行 。 異常優(yōu)先級(jí)當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí),一個(gè)固定的優(yōu)先級(jí)系統(tǒng)決議它們被處置的順序:ARM的異常處置進(jìn)入異常的處置保管PC值到LR保管CPSR到SPSR強(qiáng)迫改動(dòng)Mode bits強(qiáng)迫PC值,從中斷矢量表中預(yù)取下一條指令退出異常的處置恢復(fù)PC值從LR恢復(fù)CPSR從SPSR 去除中斷屏

29、蔽位3.2.3 ARM處置器尋址方式 尋址方式分類尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋覓真實(shí)操作數(shù)地址的方式。ARM處置器具有9種根本尋址方式。1.存放器尋址;2.立刻尋址;3.存放器移位尋址; 4.存放器間接尋址;5.基址尋址;6.多存放器尋址;7.堆棧尋址;8.塊拷貝尋址;9.相對(duì)尋址。51尋址:位尋址 直接尋址存放器尋址立刻尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立刻便用的操作數(shù)(這樣的數(shù)稱為立刻數(shù))。立刻尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0 xF

30、F000 ;將立刻數(shù)0 xFF000裝入R0存放器 立刻尋址立刻尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立刻便用的操作數(shù)(這樣的數(shù)稱為立刻數(shù))。立刻尋址指令舉例如下: SUBSR0,R0,#1 ;R0減1,結(jié)果放入R0,并且影響標(biāo)志位MOVR0,#0 xFF000 ;將立刻數(shù)0 xFF000裝入R0存放器 存放器移位尋址存放器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個(gè)操作數(shù)是存放器移位方式時(shí),第2個(gè)存放器操作數(shù)在與第1個(gè)操作數(shù)結(jié)合之前,選擇進(jìn)展移位操作。存放器移位尋址指令舉例如下:MOVR0,R2,LSL #3 ;R2的值

31、左移3位,結(jié)果放入R0,即是R0=R28 ANDSR1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相“與操作,結(jié)果放入R1存放器間接尋址存放器間接尋址指令中的地址碼給出的是一個(gè)通用存放器的編號(hào),所需的操作數(shù)保管在存放器指定地址的存儲(chǔ)單元中,即存放器為操作數(shù)的地址指針。存放器間接尋址指令舉例如下: LDRR1,R2 ;將R2指向的存儲(chǔ)單元的數(shù)據(jù)讀出,保管在R1中 SWPR1,R1,R2;將存放器R1的值和R2指定的存儲(chǔ)單元的內(nèi)容交換 基址尋址基址尋址就是將基址存放器的內(nèi)容與指令中給出的偏移量4K相加/減,構(gòu)成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲(chǔ)單元,常用于查表、數(shù)組操

32、作、功能部件存放器訪問等。存放器間接尋址是偏移量為0的基址加偏移尋址?;穼ぶ分噶钆e例如下(前索引尋址): LDRR2,R3,#0 x0C ;讀取R3+0 x0C地址上的存儲(chǔ)單元的內(nèi)容,放入R2 STR R1,R0,#-4! ;先R0=R0-4,然后把R0的值保管到R1指定的存儲(chǔ)單元 基址尋址指令舉例如下: LDRR0,R1 ,#4 ;R0=R1,R1R14;后索引基址尋址;ARM這種自動(dòng)索引機(jī)制不耗費(fèi)額外的時(shí)間LDR R0,R1,R2 ;R0=R1+R2多存放器尋址多存放器尋址一次可傳送幾個(gè)存放器值,允許一條指令傳送16個(gè)存放器的任何子集或一切存放器。多存放器尋址指令舉例如下: LDMIAR

33、1!,R2-R7,R12;將R1指向的單元中的數(shù)據(jù)讀出到;R2R7、R12中(R1自動(dòng)加4) STMIAR0!,R2-R7,R12 ;將存放器R2R7、R12的值保管到R0指向的存儲(chǔ)單元中 ;(R0自動(dòng)加4)堆棧尋址堆棧是一個(gè)按特定順序進(jìn)展存取的存儲(chǔ)區(qū),操作順序?yàn)椤昂筮M(jìn)先出 。堆棧尋址是隱含的,它運(yùn)用一個(gè)專門的存放器(堆棧指針)指向一塊存儲(chǔ)區(qū)域(堆棧),指針?biāo)赶虻拇鎯?chǔ)單元即是堆棧的棧頂。存儲(chǔ)器堆棧可分為兩種:向上生長(zhǎng):向高地址方向生長(zhǎng),稱為遞增堆棧 向下生長(zhǎng):向低地址方向生長(zhǎng),稱為遞減堆棧堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項(xiàng),稱為滿堆棧;堆棧指針指向下一個(gè)待壓入數(shù)據(jù)的空位置,稱為空堆棧。

34、所以可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等; 空遞增:堆棧向上增長(zhǎng),堆棧指針指向堆棧上的第一個(gè)空位置。指令如LDMEA、STMEA等; 滿遞減:堆棧向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長(zhǎng),堆棧指針向堆棧下的第一個(gè)空位置。指令如LDMED、STMED等。 塊拷貝尋址多存放器傳送指令用于將一塊數(shù)據(jù)從存儲(chǔ)器的某一位置拷貝到另一位置。 如:STMIAR0!,R1-R7;將R1R7的數(shù)據(jù)保管到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保管第一個(gè)值之后添加, ;增長(zhǎng)方向?yàn)橄蛏显?/p>

35、長(zhǎng)。STMIBR0!,R1-R7;將R1R7的數(shù)據(jù)保管到存儲(chǔ)器中。 ;存儲(chǔ)指針R0在保管第一個(gè)值之前添加, ;增長(zhǎng)方向?yàn)橄蛏显鲩L(zhǎng)。 尋址方式分類相對(duì)尋址相對(duì)尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對(duì)尋址指令舉例如下:BLSUBR1 ;調(diào)用到SUBR1子程序BEQLOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處.LOOPMOVR6,#1.SUBR1. 簡(jiǎn)單的ARM程序3.3.3 Load/Store指令A(yù)RM指令集存儲(chǔ)器訪問指令數(shù)據(jù)處置指令A(yù)RM分支指令雜項(xiàng)指令存儲(chǔ)器訪問指令A(yù)RM處置器是典型的RISC處置器,對(duì)存儲(chǔ)器

36、的訪問只能運(yùn)用加載和存儲(chǔ)指令實(shí)現(xiàn)。RAM存儲(chǔ)空間及I/O映射空間一致編址,除對(duì)RAM操作以外,對(duì)外圍IO、程序數(shù)據(jù)的訪問均要經(jīng)過加載/存儲(chǔ)指令進(jìn)展。加載Load:存儲(chǔ)器中的數(shù)據(jù)傳送到存放器;存儲(chǔ)Store:存放器中的數(shù)據(jù)傳送到存儲(chǔ)器;存儲(chǔ)器訪問指令分為單存放器操作指令、多存放器操作指令、數(shù)據(jù)交換指令。LDR/STR指令用于對(duì)內(nèi)存變量的訪問、內(nèi)存緩沖區(qū)數(shù)據(jù)的訪問、查表、外圍部件的控制操作等。假設(shè)運(yùn)用LDR指令加載數(shù)據(jù)到PC存放器,那么實(shí)現(xiàn)程序跳轉(zhuǎn)功能,這樣也就實(shí)現(xiàn)了程序散轉(zhuǎn)。 一切單存放器加載/存儲(chǔ)指令可分為“字和無符號(hào)字節(jié)加載存儲(chǔ)指令和“半字和有符號(hào)字節(jié)加載存儲(chǔ)指令。ARM存儲(chǔ)器訪問指令單存放

37、器存儲(chǔ)LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令LDR指令用于從內(nèi)存中讀取單一字或字節(jié)數(shù)據(jù)存入存放器中,STR指令用于將存放器中的單一字或字節(jié)數(shù)據(jù)保管到內(nèi)存。指令格式如下:LDRcondTRd, ;將指定地址上的字?jǐn)?shù)據(jù)讀入Rd STRcondTRd, ;將Rd中的字?jǐn)?shù)據(jù)存入指定地址 LDRcondBTRd, ;將指定地址上的字節(jié)數(shù)據(jù)讀入Rd STRcondBTRd, ;將Rd中的字節(jié)數(shù)據(jù)存入指定地址其中,T為可選后綴。假設(shè)指令有T,那么即使處置器是在特權(quán)方式下,存儲(chǔ)系統(tǒng)也將訪問看成是在用戶方式下進(jìn)展的。T在用戶方式下無效,不能與前索引偏移一同運(yùn)用T。 LDR和STR字和無符號(hào)字節(jié)加載/存儲(chǔ)指令

38、編碼LDR/STR指令尋址非常靈敏,它由兩部分組成,其中一部分為一個(gè)基址存放器,可以為任一個(gè)通用存放器;另一部分為一個(gè)地址偏移量。地址偏移量有以下3種格式: 立刻數(shù)。立刻數(shù)可以是一個(gè)無符號(hào)的數(shù)值。這個(gè)數(shù)據(jù)可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如:LDR R1,R0,#0 x12 ;R1-R0+0 x12存放器。存放器中的數(shù)值可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如: LDR R1,R0,R2 ; R1-R0+R2 LDR R1,R0,-R2 ; R1-R0-R2存放器及移位常數(shù)。存放器移位后的值可以加到基址存放器,也可以從基址存放器中減去這個(gè)數(shù)值。 如:LD

39、R R1,R0,R2,LSL #2 ;R1-R0+R2*4 從尋址方式的地址計(jì)算方法分,加載/存儲(chǔ)指令有以下4種格式: 零偏移。 如:LDR Rd,Rn 前索引偏移。如:LDR Rd,Rn,#0 x04!程序相對(duì)偏移。如:LDR Rd,labe1 后索引偏移。如:LDR Rd,Rn,#-0 x04留意:必需保證字?jǐn)?shù)據(jù)操作的地址是32位對(duì)齊的。LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令這類LDR/STR指令可加載有符號(hào)半字或字節(jié),可加載/存儲(chǔ)無符號(hào)半字。偏移量格式、尋址方式與加載/存儲(chǔ)字和無符號(hào)字節(jié)指令一樣。 LDRcondSB Rd, ;將指定地址上的有符號(hào)字節(jié)讀入Rd LDRcondSH

40、Rd, ;將指定地址上的有符號(hào)半字讀入Rd LDRcondH Rd, ;將指定地址上的半字?jǐn)?shù)據(jù)讀入Rd STRcondH Rd, ;將Rd中的半字?jǐn)?shù)據(jù)存入指定地址留意:1.有符號(hào)位半字/字節(jié)加載是指用符號(hào)位加載擴(kuò)展到32位,無符號(hào)半字加載是指用零擴(kuò)展到32位;2.半字讀寫的指定地址必需為偶數(shù),否那么將產(chǎn)生不可靠的結(jié)果;LDR和STR半字和有符號(hào)字節(jié)加載/存儲(chǔ)指令編碼LDR和STR指令運(yùn)用例如:1.加載/存儲(chǔ)字和無符號(hào)字節(jié)指令LDRR2,R5 ;將R5指向地址的字?jǐn)?shù)據(jù)存入R2STRR1,R0,#0 x04 ;將R1的數(shù)據(jù)存儲(chǔ)到R0+0 x04地址LDRBR3,R2,#-1 ;將R2指向地址的字節(jié)

41、數(shù)據(jù)存入R3,R2R21STRBR0,R3,-R8 ASR 2 ;R0-R3-R8/4,存儲(chǔ)R0的最低有效字節(jié)2.加載/存儲(chǔ)半字和有符號(hào)字節(jié)指令LDRSB R1,R0,R3;將R0+R3地址上的字節(jié)數(shù)據(jù)存入R1,高24位用符號(hào)擴(kuò)展LDRH R6,R2,#2;將R2指向地址的半字?jǐn)?shù)據(jù)存入R6,高16位用0擴(kuò)展 ;讀出后,R2=R2+2STRH R1,R0,#2!;將R1的半字?jǐn)?shù)據(jù)保管到R0+2地址,LDR和STR -雙字:加載/存儲(chǔ)兩個(gè)相鄰的存放器,64位雙字。其句法有4種:Op condD Rd,Rn 零偏移Op condD Rd,Rn,offset ! 前索引偏移Op condD Rd,la

42、bel 程序相對(duì)偏移Op condD T Rd,Rn,offset 后索引偏移其中:Rd 加載/存貯存放器中的一個(gè),另一個(gè)是Rd+1。Rd必需是偶數(shù)存放器,且不是R14。Rn 除非指令為零偏移,或不帶寫回的前索引,否那么,Rn不允許與Rd和Rd+1一樣。label label必需是在當(dāng)前指令的上下252字節(jié)范圍內(nèi)。例如:LDRD R6,R11 ;R6R11,R7R11+4STRD R4,R9,#24 ;R4R9+24,R5R9+28ARM存儲(chǔ)器訪問指令多存放器存取多存放器加載/存儲(chǔ)指令可以實(shí)如今一組存放器和一塊延續(xù)的內(nèi)存單元之間傳輸數(shù)據(jù)。LDM為加載多個(gè)存放器;STM為存儲(chǔ)多個(gè)存放器。允許一條

43、指令傳送16個(gè)存放器的任何子集或一切存放器。它們主要用于現(xiàn)場(chǎng)維護(hù)、數(shù)據(jù)復(fù)制、常數(shù)傳送等。多存放器加載/存儲(chǔ)指令格式如下: LDMcond Rn!,reglist STMcond Rn!,reglistcond:指令執(zhí)行的條件;方式:控制地址的增長(zhǎng)方式,一共有8種方式;!:表示在操作終了后,將最后的地址寫回Rn中;reglist :表示存放器列表,可以包含多個(gè)存放器,它們運(yùn)用“,隔開,如R1,R2,R6-R9,存放器由小到大陳列;:可選后綴。允許在用戶方式或系統(tǒng)方式下運(yùn)用。它有以下兩個(gè)功能:1假設(shè)op是LDM且存放器列表包含R15時(shí),那么除了正常的多存放器傳送外,還將SPSR也復(fù)制到CPSR中。

44、這用于異常處置前往,僅在異常方式下運(yùn)用。2數(shù)據(jù)傳入或傳出的是用戶方式下的存放器,而不是當(dāng)前方式的存放器。LDM和STM多存放器加載/存儲(chǔ)指令編碼多存放器加載/存儲(chǔ)指令的8種方式如下表所示,右邊四種為堆棧操作、左邊四種為數(shù)據(jù)傳送操作。進(jìn)展數(shù)據(jù)復(fù)制時(shí),先設(shè)置好源數(shù)據(jù)指針和目的指針,然后運(yùn)用塊拷貝尋址指令LDMIA/STMIA、LDMIB/STMIB、LDMDA/STMDA、LDMDB/STMDB進(jìn)展讀取和存儲(chǔ) 。進(jìn)展堆棧操作操作時(shí),要先設(shè)置堆棧指針SP,然后運(yùn)用堆棧尋址指令STMFD/LDMFD 、STMED/LDMED、STMFA/LDMFA和STMEA/LDMEA實(shí)現(xiàn)堆棧操作。數(shù)據(jù)塊傳送指令操

45、作過程如以下圖所示,其中R1為指令執(zhí)行前的基址存放器,R1那么為指令執(zhí)行后的基址存放器。堆棧操作和數(shù)據(jù)塊傳送指令類似,也有4種方式,它們之間的關(guān)系如下表所示:ARM指令集和Thumb指令集的共同點(diǎn)較多的存放器,可以用于多種用途。對(duì)存儲(chǔ)器的訪問只能經(jīng)過Load/Store指令。ARM指令集和Thumb指令集的不同點(diǎn)沒有乘加指令及64位乘法指令沒有協(xié)處置器指令沒有數(shù)據(jù)交換指令沒有程序形狀存放器指令A(yù)RM指令LOAD/STORE指令綜合運(yùn)用1、鏈表操作在鏈接表中搜索與某一數(shù)據(jù)相匹配的元素。鏈接表的每個(gè)元素包括兩個(gè)字,第1個(gè)字中包含一個(gè)字節(jié)數(shù)據(jù):第2個(gè)字中包含指向下一個(gè)銜接表元素的指針,當(dāng)這個(gè)指針為0

46、時(shí)表示鏈表終了。代碼執(zhí)行前R0指向鏈表的頭元素。R1中存放將要搜索的數(shù)據(jù),代碼執(zhí)行后R0執(zhí)向第1個(gè)匹配元素,或者當(dāng)沒有匹配元素時(shí)R0為0。2、簡(jiǎn)單的串比較實(shí)現(xiàn)比較兩個(gè)串的大小。代碼執(zhí)行前,R0指向第一個(gè)串,R1指向第2個(gè)串。代碼執(zhí)行后R0保管比較結(jié)果,假設(shè)兩個(gè)串一樣,R0為0;假設(shè)第1個(gè)串大于第2個(gè)串,R00;假設(shè)第一個(gè)串小于第2個(gè)串,R00。3. 簡(jiǎn)單的塊復(fù)制實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)塊復(fù)制。程序一次將48個(gè)字?jǐn)?shù)據(jù)從R12作為首地址的一段延續(xù)的內(nèi)存單元復(fù)制到R13作為首地址的一段延續(xù)的內(nèi)存單元。代碼執(zhí)行前R12為源數(shù)據(jù)區(qū)首地址,R13為目的數(shù)據(jù)區(qū)首地址,R14為源數(shù)據(jù)區(qū)末地址。4. 子程序進(jìn)入和退出時(shí)數(shù)

47、據(jù)的保管和恢復(fù)在調(diào)用子程序時(shí),通常利用存放器R0R3傳送參數(shù)和前往結(jié)果,這幾個(gè)參數(shù)由子程序的調(diào)用者來保管,其他的子程序?qū)⒁玫降拇娣牌髟谧映绦蛉肟谔幈9?,在子程序前往前恢?fù)這些存放器。第3章 匯編言語程序設(shè)計(jì)ATPCS存放器的運(yùn)用規(guī)那么數(shù)據(jù)棧的運(yùn)用規(guī)那么參數(shù)的傳送規(guī)那么子程序前往規(guī)那么ATPCS規(guī)定了一些子程序間調(diào)用的根本規(guī)那么,這些規(guī)那么包括子程序調(diào)用過程中存放器的運(yùn)用規(guī)那么,數(shù)據(jù)棧的運(yùn)用規(guī)那么,參數(shù)的傳送規(guī)那么。有了這些規(guī)那么之后,單獨(dú)編譯的C言語程序就可以和匯編程序相互調(diào)用。存放器的運(yùn)用規(guī)那么子程序間經(jīng)過存放器R0R3來傳送參數(shù)。存放器R0R3可記作a0a3。被調(diào)用的子程序在前往前無需恢

48、復(fù)存放器R0R3的內(nèi)容。在子程序中,運(yùn)用存放器R4R11來保管部分變量。存放器R4R11可以記作v1v8。子程序進(jìn)入時(shí)必需保管這些存放器的值,在前往前必需恢復(fù)這些存放器的值。在Thumb程序中,通常只能運(yùn)用存放器R4R7來保管部分變量。存放器R12用作過程調(diào)用中間暫時(shí)存放器,記作IP。在子程序之間的銜接代碼段中經(jīng)常有這種運(yùn)用規(guī)那么。存放器R13用作堆棧指針,記作SP。在子程序中存放器R13不能用作其他用途。存放器SP在進(jìn)入子程序時(shí)的值和退出子程序時(shí)的值必需相等。存放器R14稱為銜接存放器,記作LR。它用于保管子程序的前往地址。假設(shè)在子程序中保管了前往地址,存放器R14那么可以用作其他用途。存放

49、器R15是程序計(jì)數(shù)器,記作PC。它不能用作其它用途。ATPCS中的各存放器在ARM編譯器中和匯編器中都是預(yù)定義的。匯編調(diào)用C舉例/c程序g前往5個(gè)整數(shù)的和int gint a, int b, int c, int d, int ereturn a + b + c + d + e;匯編程序調(diào)用c程序g計(jì)算5個(gè)整數(shù)i, 2*i, 3*i, 4*i, 5*i的和AREA f, CODE, READONLYIMPORT g ;運(yùn)用偽操作數(shù)IMPORT聲明c程序gSTR lr, sp,#-4! ;保管前往地址ADD r1, r0, r0 ;假設(shè)進(jìn)入程序f時(shí),r0中的值為i,r1值設(shè)為2*iADD r2,

50、 r1, r0 ;r2的值設(shè)為3*iADD r3, r1, r2 ;r3的值設(shè)為5*iSTR r3, sp, #-4! ;第五個(gè)參數(shù)5*i經(jīng)過數(shù)據(jù)棧傳送ADD r3, r1, r1 ;r3值設(shè)為4*iBL g ;調(diào)用c程序gADD sp, sp, #4 ;調(diào)整數(shù)據(jù)棧指針,預(yù)備前往LDR pc, sp, #4 ;前往ENDC文件自動(dòng)運(yùn)用R0、R1、R2、R3來傳送第一個(gè)、第二個(gè)、第三個(gè)和第四個(gè)參數(shù)。假設(shè)參數(shù)多于4個(gè),剩余的參數(shù)將被壓入堆棧。從匯編程序中訪問C程序變量在C程序中聲明的全局變量可以被匯編程序經(jīng)過地址間接訪問,詳細(xì)訪問方法如下: 運(yùn)用IMPORT偽指令聲明該全局變量。 運(yùn)用LDR指令讀

51、取該全局變量的內(nèi)存地址,通常該全局變量的內(nèi)存地址值存放在程序的數(shù)據(jù)緩沖區(qū)中。 根據(jù)該數(shù)據(jù)的類型,運(yùn)用相應(yīng)的LDR指令讀取該全局變量的值,運(yùn)用相應(yīng)的STR指令修正該全局變量的值。匯編程序中訪問C程序變量舉例AREA global_exp, CODE, READONLYEXPORT asmsubIMPORT globv ;聲明全局變量asmsubLDR r1, = globv ;將內(nèi)存地址讀入到R1中LDR r0, r1 ;將數(shù)據(jù)讀入到R0中ADD r0, r0, #2 STR r0, r1 ;修正 后再將值賦予變量MOV pc, lrEND第四章 嵌入式系統(tǒng)的軟件設(shè)計(jì)嵌入式系統(tǒng)的設(shè)備驅(qū)動(dòng)嵌入式系

52、統(tǒng)的設(shè)備驅(qū)動(dòng)層用來完成嵌入式系統(tǒng)硬件設(shè)備所需求的一些軟件初始化和管理。設(shè)備驅(qū)動(dòng)層直接對(duì)硬件進(jìn)展管理和控制,并為上層軟件提供所需的驅(qū)動(dòng)支持。板級(jí)支持包設(shè)備驅(qū)動(dòng)層也稱為BSPBoard Support Package, 板級(jí)支持包,為操作系統(tǒng)提供一個(gè)虛擬的硬件平臺(tái),操作系統(tǒng)運(yùn)轉(zhuǎn)在這個(gè)虛擬的硬件平臺(tái)上。BSP是針對(duì)某個(gè)特定的單板而設(shè)計(jì)的,系統(tǒng)都會(huì)提供相應(yīng)的演示版本的BSP最小系統(tǒng)BSP。BSP對(duì)于用戶指系統(tǒng)開發(fā)人員是開放的,用戶可以根據(jù)不同的硬件需求對(duì)其進(jìn)展改動(dòng)或二次開發(fā)。BSP主要包括BootLoader引導(dǎo)加載程序和設(shè)備驅(qū)動(dòng)程序兩個(gè)方面的內(nèi)容。對(duì)于不同的嵌入式操作系統(tǒng),BSP的詳細(xì)構(gòu)造和組成是不

53、一樣的。BSP的特點(diǎn)與功能硬件相關(guān)性由于嵌入式實(shí)時(shí)系統(tǒng)的硬件環(huán)境具有運(yùn)用相關(guān)性,所以,作為高層軟件與硬件之間的接口,BSP必需為操作系統(tǒng)提供操作和控制詳細(xì)硬件的方法。操作系統(tǒng)相關(guān)性不同的操作系統(tǒng)具有各自的軟件層次構(gòu)造,因此,不同的操作系統(tǒng)具有特定的硬件接口方式一個(gè)嵌入式操作系統(tǒng)針對(duì)不同的CPU,會(huì)有不同的BSP即使同一種CPU,由于外設(shè)的一點(diǎn)差別BSP相應(yīng)的部分也不一樣 設(shè)計(jì)一個(gè)完好的BSP需求完成兩部分任務(wù):設(shè)計(jì)初始化過程,完成嵌入式系統(tǒng)的初始化;設(shè)計(jì)硬件相關(guān)的設(shè)備驅(qū)動(dòng),完成操作系統(tǒng)及運(yùn)用程序?qū)υ敿?xì)硬件的操作。片級(jí)初始化:主要完成CPU的初始化設(shè)置CPU的中心存放器和控制存放器CPU中心任務(wù)

54、方式CPU的部分總線方式等片級(jí)初始化把CPU從上電時(shí)的缺省形狀逐漸設(shè)置成為系統(tǒng)所要求的任務(wù)形狀這是一個(gè)純硬件的初始化過程板級(jí)初始化:完成CPU以外的其他硬件設(shè)備的初始化同時(shí)還要設(shè)置某些軟件的數(shù)據(jù)構(gòu)造和參數(shù),為隨后的系統(tǒng)級(jí)初始化和運(yùn)用程序的運(yùn)轉(zhuǎn)建立硬件和軟件環(huán)境這是一個(gè)同時(shí)包含軟硬件兩部分在內(nèi)的初始化過程系統(tǒng)級(jí)初始化:這是一個(gè)以軟件初始化為主的過程,主要進(jìn)展操作系統(tǒng)初始化BSP將控制權(quán)轉(zhuǎn)交給操作系統(tǒng),由操作系統(tǒng)進(jìn)展余下的初始化操作:包括加載和初始化與硬件無關(guān)的設(shè)備驅(qū)動(dòng)程序建立系統(tǒng)內(nèi)存區(qū)加載并初始化其他系統(tǒng)軟件模塊如網(wǎng)絡(luò)系統(tǒng)、文件系統(tǒng)等最后,操作系統(tǒng)創(chuàng)建運(yùn)用程序環(huán)境并將控制轉(zhuǎn)交給運(yùn)用程序的入口Bo

55、otLoaderBootLoader引導(dǎo)加載程序是在操作系統(tǒng)內(nèi)核運(yùn)轉(zhuǎn)之前運(yùn)轉(zhuǎn)的一小段程序。初始化硬件設(shè)備建立內(nèi)存空間的映射圖完成整個(gè)系統(tǒng)的加載啟動(dòng)義務(wù)BootLoader通常固化在硬件上某個(gè)固態(tài)存儲(chǔ)設(shè)備上,加電后自啟動(dòng)。在基于ARM的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0 x00000000處開場(chǎng)執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的Bootloader。Bootloader是嚴(yán)重地依賴于硬件而實(shí)現(xiàn)的。每種不同體系構(gòu)造的處置器都有不同的Bootloader。BootLoader的任務(wù)方式啟動(dòng)加載方式正常啟動(dòng)方式這種方式也稱為自主Autonomous方式,即BootLoader從目的機(jī)

56、上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)轉(zhuǎn),整個(gè)過程沒有用戶的介入。這種方式是BootLoader的正常任務(wù)方式。因此在嵌入式產(chǎn)品發(fā)布的時(shí)候,BootLoader顯然必需任務(wù)在這種方式下。下載方式提供應(yīng)開發(fā)人員或者技術(shù)支持人員運(yùn)用在這種方式下,目的機(jī)上的BootLoader將經(jīng)過串口銜接或網(wǎng)絡(luò)銜接等通訊手段從主機(jī)上下載文件,比如下載運(yùn)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從主機(jī)下載的文件通常首先被BootLoader保管到目的機(jī)的RAM中然后再被BootLoader寫到目的機(jī)上的固態(tài)存儲(chǔ)設(shè)備中,BootLoader的這種方式通常在系統(tǒng)更新時(shí)運(yùn)用。任務(wù)于這種方式下的BootLoader通常都會(huì)向

57、它的終端用戶提供一個(gè)簡(jiǎn)單的命令行接口,比如U-Boot、Blob、VIVI等。Bootloader功能:初始化硬件設(shè)備、建立內(nèi)存空間的映射圖有的CPU沒有內(nèi)存映射功能如S3C44B0 x ,將系統(tǒng)的軟、硬件環(huán)境帶到一個(gè)適宜的形狀,以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶運(yùn)用程序預(yù)備好正確的環(huán)境。 通常的硬件初始化任務(wù): 封鎖處置器內(nèi)部指令/數(shù)據(jù)cache等 封鎖中斷 封鎖看門狗 配置PLL 配置內(nèi)存 初始化各任務(wù)方式的堆棧 配置中斷 拷貝RW段,初始化ZI段設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序是必不可少的。設(shè)備驅(qū)動(dòng)程序是一組庫函數(shù),用來對(duì)硬件進(jìn)展初始化和管理,并向上層軟件提供訪問接口。不同功能的硬件設(shè)備,它們的設(shè)

58、備驅(qū)動(dòng)程序是不同的。硬件啟動(dòng)初始化硬件封鎖關(guān)機(jī)硬件停用暫停硬件啟用重新啟用讀操作讀取數(shù)據(jù)寫操作寫入數(shù)據(jù)操作系統(tǒng)的作用操作系統(tǒng)的作用籠統(tǒng)操作系統(tǒng)籠統(tǒng)作用是指提供硬件的高層界面(虛擬機(jī)),取消硬件限制1) 操作系統(tǒng)提供無限的內(nèi)存、無限的CPU、無限的設(shè)備2) 擴(kuò)展機(jī)器,功能更強(qiáng)大,運(yùn)用更方便【虛擬機(jī)】:運(yùn)用戶和程序員在不用涉及和了解硬件任務(wù)細(xì)節(jié)的情況下能方便的運(yùn)用計(jì)算機(jī),而為用戶所提供的一個(gè)等價(jià)的擴(kuò)展計(jì)算機(jī),稱為虛擬計(jì)算機(jī)操作系統(tǒng)的作用資源管理操作系統(tǒng)可以管理計(jì)算機(jī)系統(tǒng)中硬件與軟件資源,使其得到充分而有效的利用1) 跟蹤資源形狀:時(shí)辰掌握計(jì)算機(jī)系統(tǒng)中資源的運(yùn)用情況。2) 分配資源:處置對(duì)資源的運(yùn)用

59、懇求,協(xié)調(diào)沖突,確定資源分配算法。3) 回收資源:回收用戶釋放的資源,以便下次重新分配。4) 維護(hù)資源:擔(dān)任對(duì)系統(tǒng)資源的維護(hù),防止受破壞。計(jì)算機(jī)資源主要包括處置機(jī)、存儲(chǔ)器、I/O設(shè)備、信息(程序與數(shù)據(jù))可將操作系統(tǒng)分為相應(yīng)的四類管理機(jī)制處置器管理用于分配和控制處置機(jī)進(jìn)程控制、進(jìn)程同步、進(jìn)程通訊、進(jìn)程調(diào)度存儲(chǔ)器管理內(nèi)存的分配與回收內(nèi)存分配、內(nèi)存維護(hù)、地址映射、內(nèi)存擴(kuò)展I/O設(shè)備管理 I/O設(shè)備的分配與支配緩沖管理、設(shè)備分配、設(shè)備處置、設(shè)備獨(dú)立性、虛擬設(shè)備文件管理文件的存取、共享和維護(hù)文件存儲(chǔ)空間的管理、目錄管理、文件的讀寫管理和存取控制操作系統(tǒng)的作用效力用戶效力用戶的觀念OS用戶與裸機(jī)間接口:操

60、作系統(tǒng)為方便用戶運(yùn)用計(jì)算機(jī)提供了二級(jí)訪問接口: 1命令接口:命令行。 2調(diào)用接口:方式上類似于過程調(diào)用,在運(yùn)用編程中運(yùn)用。 3圖形接口:圖形用戶界面GUI,方便用戶運(yùn)用。 編程更為容易,軟件可移植性加強(qiáng);運(yùn)用更為方便。嵌入式操作系統(tǒng)的定義運(yùn)轉(zhuǎn)在嵌入式硬件平臺(tái)上,對(duì)整個(gè)系統(tǒng)及其部件、安裝等資源進(jìn)展一致協(xié)調(diào)、指揮和控制的系統(tǒng)軟件就叫做嵌入式操作系統(tǒng)。嵌入式操作系統(tǒng)的特點(diǎn)微型化 嵌入式操作系統(tǒng)模塊越小越好。實(shí)時(shí)性 嵌入式操作系統(tǒng)內(nèi)核普遍采用可剝奪方式。高可靠 嵌入式操作系統(tǒng)對(duì)高可靠性是一個(gè)根本要求。易移植可固化 可配置、可剪裁 獨(dú)立的板級(jí)支持包,可修正 不同的CPU有不同的版本 運(yùn)用的開發(fā)需求有集成

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論