版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
ARM嵌入式系統(tǒng)期末復(fù)習(xí)IEEE(國際電氣和電子工程師協(xié)會)的定義:
嵌入式系統(tǒng)是“用于控制、監(jiān)視或者輔助操作的機(jī)器和設(shè)備的裝置”。從技術(shù)的角度定義:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪,能適應(yīng)應(yīng)用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。從系統(tǒng)的角度定義:嵌入式系統(tǒng)是設(shè)計(jì)以完成復(fù)雜功能的硬件和軟件,并使其緊密耦合在一起的計(jì)算機(jī)系統(tǒng)。術(shù)語嵌入式反映了這些系統(tǒng)通常是更大系統(tǒng)中的一個完整的部分,稱為嵌入的系統(tǒng)。一個系統(tǒng)中可以共存多個嵌入式系統(tǒng)。嵌入式系統(tǒng)的概念◆
微控制器(MCU)(MicroControllerUnit)
◆
微處理器(MPU)(EmbeddedMicroProcessorUnit)
◆
數(shù)字信號處理器(DSP)(DigitalSignalProcessor)
◆
混合處理器和片上系統(tǒng)(SOC)(SystemOnChip)
◆
可編程片上系統(tǒng)(SOPC)(SystemOnProgrammableChip) 嵌入式微處理器主要分類2023/2/3嵌入式系統(tǒng)的應(yīng)用領(lǐng)域嵌入式系統(tǒng)作為一個熱門的技術(shù),涵蓋了微電子技術(shù)、電子信息技術(shù)、計(jì)算機(jī)軟件和硬件等多項(xiàng)技術(shù)。
嵌入式的應(yīng)用更是涉及通訊設(shè)備、移動終端、智能家居、物聯(lián)網(wǎng)、汽車電子、工業(yè)控制、醫(yī)療、航天、軍事等各個領(lǐng)域,甚至一些學(xué)者斷言嵌入式技術(shù)將成為后PC時代的主宰。2023/2/32023/2/3
按照實(shí)時性分操作系統(tǒng)嵌入式操作系統(tǒng)分為實(shí)時操作系統(tǒng)和非實(shí)時操作系統(tǒng)。下面主要講實(shí)時操作系統(tǒng)的概念。嵌入式操作系統(tǒng)非實(shí)時操作系統(tǒng)實(shí)時操作系統(tǒng)硬實(shí)時操作系統(tǒng)軟實(shí)時操作系統(tǒng)實(shí)時操作系統(tǒng)
實(shí)時系統(tǒng)是由事件驅(qū)動的,能對外部事件在限定的時間范圍內(nèi)作出響應(yīng)。響應(yīng)時間要有保證。對外部事件的響應(yīng)包括: (1)事件發(fā)生時要識別出來 (2)在給定時間約束內(nèi)必須輸出正確的結(jié)果
實(shí)時系統(tǒng)強(qiáng)調(diào)的是實(shí)時性、可靠性和靈活性,與實(shí)時應(yīng)用軟件相結(jié)合成為有機(jī)的整體起著核心作用,由它來管理和協(xié)調(diào)各項(xiàng)工作,為應(yīng)用軟件提供良好的運(yùn)行軟件環(huán)境及開發(fā)環(huán)境。2023/2/3實(shí)時操作系統(tǒng)又分為:硬實(shí)時系統(tǒng): 對系統(tǒng)響應(yīng)時間有嚴(yán)格的要求,如果系統(tǒng)響應(yīng)時間不能滿足,就會引起系統(tǒng)崩潰或致命的錯誤。軟實(shí)時系統(tǒng):對系統(tǒng)響應(yīng)時間有要求,但是如果系統(tǒng)響應(yīng)時間不能滿足,它并不會導(dǎo)致系統(tǒng)出現(xiàn)致命的錯誤或崩潰,只是降低系統(tǒng)的吞吐量。幾種主流的嵌入式操作系統(tǒng)FreeRTOS:開源免費(fèi)的輕量級實(shí)時系統(tǒng)μCos-II:源碼開放(商業(yè)收費(fèi))、面向中小型嵌入式系統(tǒng)應(yīng)用。Linux:嵌入式Linux具有一些獨(dú)特的優(yōu)勢:層次結(jié)構(gòu)及
內(nèi)核完全開放;強(qiáng)大的網(wǎng)絡(luò)支持功能;具備一整套開發(fā)工具鏈;廣泛的硬件支持特性。WinCE:它是微軟針對個人電腦以外的電腦產(chǎn)品所研發(fā)的嵌入式操作系統(tǒng),支持具有豐富應(yīng)用程序和服務(wù)。Vxworks:美國WindRiver公司于1983年開發(fā),具有可靠、實(shí)時、可裁減特性。QNX:主要用于汽車電子的實(shí)時系統(tǒng)Android
嵌入式系統(tǒng)軟件層次一個嵌入式系統(tǒng)從軟件角度來看分為四個層次:
1.引導(dǎo)加載程序包括固化在固件(firmware)中的boot代碼(可選),和BootLoader兩大部分。
2.Linux內(nèi)核特定嵌入式平臺定制的內(nèi)核及內(nèi)核的啟動參數(shù)。設(shè)備驅(qū)動程序是可裝入的內(nèi)核模塊。
3.文件系統(tǒng)包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上的文件系統(tǒng)。
4.用戶應(yīng)用程序特定用戶的應(yīng)用程序。嵌入式系統(tǒng)的最小系統(tǒng)嵌入式控制器時鐘系統(tǒng)調(diào)試測試接口復(fù)位及其配置系統(tǒng)存儲器系統(tǒng)供電系統(tǒng)(電源)最小系統(tǒng)ARM7系列
ARM7采用馮·諾依曼(Von-Neumann)存儲結(jié)構(gòu),數(shù)據(jù)存儲器和程序存儲器使用同一存儲空間,用相同的指令訪問。馮·諾依曼結(jié)構(gòu)也被大多數(shù)計(jì)算機(jī)所采用。
ARM7為三級流水線結(jié)構(gòu)(取指令,指令譯碼,指令執(zhí)行),平均功耗為0.6mW/MHz,時鐘速度為66MHz,每條指令平均執(zhí)行1.9個時鐘周期。取指譯碼執(zhí)行ARM7多數(shù)不支持MMU。2023/2/3ARM9系列ARM9采用哈佛(Harvard)存儲結(jié)構(gòu),程序存儲器與數(shù)據(jù)存儲器分開,提供了較大的存儲器帶寬。ARM9為五級流水(取指,譯碼,執(zhí)行,緩沖/數(shù)據(jù),回寫),平均功耗為0.7mW/MHz。時鐘速度為120MHz-200MHz,每條指令平均執(zhí)行1.5個時鐘周期。32位AMBA總線接口的MMU支持;2023/2/3從編程的角度看,ARM微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:ARM狀態(tài),此時處理器執(zhí)行32位的字對齊的ARM指令;Thumb狀態(tài),此時處理器執(zhí)行16位的、半字對齊的Thumb指令。
對于ARM9處理器有兩種工作狀態(tài)和7種工作模式。1.ARM9處理器的兩種工作狀態(tài)3ARM工作狀態(tài)和工作模式2023/2/3處理器模式說明備注
用戶(usr)正常程序工作模式正常的程序執(zhí)行狀態(tài),不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán),供需要訪問系統(tǒng)資源的操作系統(tǒng)任務(wù)使用
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入此模式,用于高速數(shù)據(jù)傳輸或通道處理
中斷(irq)用于通用中斷處理IRQ異常響應(yīng)時進(jìn)入此模式,用于通用的中斷處理
管理(svc)操作系統(tǒng)保護(hù)代碼系統(tǒng)復(fù)位和軟件中斷響應(yīng)時進(jìn)入此模式,供操作系統(tǒng)使用的一種保護(hù)模式
中止(abt)用于支持虛擬內(nèi)存和/或存儲器保護(hù)當(dāng)存取異常時將會進(jìn)入這種模式,用于支持虛擬內(nèi)存和存儲器保護(hù)
未定義(und)支持硬件協(xié)處理器的軟件仿真未定義指令異常響應(yīng)時進(jìn)入此模式,軟件仿真硬件協(xié)處理器3ARM工作狀態(tài)和工作模式特權(quán)模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(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)入此模式
除用戶模式外,其它模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
未定義(und)
中止(abt)
管理(svc)
中斷(irq)
快中斷(fiq)
系統(tǒng)(sys)3ARM工作狀態(tài)和工作模式異常模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(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)入此模式
未定義(und)
中止(abt)
管理(svc)
中斷(irq)
快中斷(fiq)
這五種模式稱為異常模式。它們除了可以通過程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時,處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時用戶模式的狀態(tài)不可靠。3ARM工作狀態(tài)和工作模式用戶和系統(tǒng)模式處理器模式說明備注
用戶(usr)正常程序工作模式不能直接切換到其它模式
系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)
快中斷(fiq)支持高速數(shù)據(jù)傳輸及通道處理FIQ異常響應(yīng)時進(jìn)入此模式
中斷(irq)用于通用中斷處理IRQ異常響應(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)入此模式
這兩種模式都不能由異常進(jìn)入,而且它們使用完全相同的寄存器組。系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個模式訪問一些受控的資源。
系統(tǒng)(sys)
用戶(usr)3ARM工作狀態(tài)和工作模式管理模式(svc)的進(jìn)入方式和處理內(nèi)容: ①系統(tǒng)上電復(fù)位后進(jìn)入管理模式,運(yùn)行系統(tǒng)初始化程序,如中斷允許/禁止,主時鐘設(shè)置,SDRAM配置,各個功能模塊初始化等。 ②當(dāng)執(zhí)行軟件中斷指令SWI指令時,進(jìn)入管理模式。處理器啟動時的模式轉(zhuǎn)換圖:管理模式(Supervisor)多種特權(quán)模式變化用戶程序的運(yùn)行模式復(fù)位后的缺省模式主要完成各模式的堆棧設(shè)置,注意不要進(jìn)入用戶模式一般為用戶模式User2023/2/3ARM內(nèi)部寄存器ARM9微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可編程訪問的,取決微處理器的工作狀態(tài)及具體的運(yùn)行模式。但在任何時候,通用寄存器R14~R0、程序計(jì)數(shù)器PC、一個或兩個狀態(tài)寄存器都是可訪問的(對應(yīng)模式下的)。
寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器2023/2/3ARM狀態(tài)下的寄存器組織通用寄存器:通用寄存器包括R0~R15,可以分為三類:未分組寄存器R0~R7分組寄存器R8~R14程序計(jì)數(shù)器PC(R15)未分組寄存器R0~R7
在所有的運(yùn)行模式下,未分組寄存器都指向同一個物理寄存器,他們未被系統(tǒng)用作特殊的用途,是真正的通用寄存器。 因此,在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時,由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,可能會造成寄存器中數(shù)據(jù)的破壞,這一點(diǎn)在進(jìn)行程序設(shè)計(jì)時應(yīng)引起注意。2023/2/3分組寄存器R8~R12每次所訪問的物理寄存器與處理器當(dāng)前的運(yùn)行模式有關(guān)R8~R12:每個寄存器對應(yīng)兩個不同的物理寄存器當(dāng)使用fiq模式時,訪問寄存器R8_fiq~R12_fiq;當(dāng)使用除fiq模式以外的其他模式時,訪問寄存器R8_usr~R12_usr。寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器2023/2/3分組寄存器R13~R14R13(SP)、R14(LR):每個寄存器對應(yīng)6個不同的物理寄存器其中的一個是用戶模式與系統(tǒng)模式共用,另外5個物理寄存器對應(yīng)于其他5種不同的運(yùn)行模式采用以下的記號來區(qū)分不同的物理寄存器:R13_<mode>R14_<mode>mode為以下幾種之一:usr、fiq、irq、svc、abt、und。2023/2/3堆棧指針—R13R13在ARM指令中常用作堆棧指針SP,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針SP。由于處理器的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器R13,在初始化部分,都要初始化每種模式下的R13,這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時,可以將需要保護(hù)的寄存器放入R13所指向的堆棧,而當(dāng)程序從異常模式返回時,則從對應(yīng)的堆棧中恢復(fù)。子程序連接寄存器—R14R14也稱作子程序連接寄存器或連接寄存器LR。當(dāng)執(zhí)行BL指令調(diào)用子程序時,R14復(fù)制R15(程序計(jì)數(shù)器PC)以備份。其他情況下,R14用作通用寄存器。R14寄存器與異常發(fā)生,異常發(fā)生時,程序要跳轉(zhuǎn)至異常服務(wù)程序,對返回地址的處理與子程序調(diào)用類似,都是由硬件完成的。將對應(yīng)的異常模式下的R14設(shè)置為異常返回地址(有些異常有一個小的固定偏移量)子程序連接寄存器—R14在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用BL或BLX指令調(diào)用子程序時,將PC的當(dāng)前值拷貝給R14,執(zhí)行完子程序后,又將R14的值拷貝回PC,即可完成子程序的調(diào)用返回。 BL SUB1 …… SUB1: STMFD SP!,{<regs>,LR}/*將R14存入堆棧*/ …… LDMFD SP!,{<regs>,PC}/*完成子程序返回*/Lable程序A程序BR14BLLable地址A???MOVPC,LRR14(地址A)Lable???2023/2/3程序計(jì)數(shù)器PC(R15)R15(PC)指向正在取指的地址??梢哉J(rèn)為它是一個通用寄存器,但是對于它的使用有許多與指令相關(guān)的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測的。由于ARM9體系結(jié)構(gòu)采用了多級流水線技術(shù),對于ARM指令集而言,PC總是指向當(dāng)前執(zhí)行指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8,也即PC指向正在取指的地址。ARM狀態(tài)下,位[1:0]為0,位[31:2]用于保存PC;Thumb狀態(tài)下,位[0]為0,位[31:1]用于保存PC;讀R15的限制
正常操作時,從R15讀取的值是處理器正在取指的地址,即當(dāng)前正在執(zhí)行指令的地址加上8個字節(jié)(兩條ARM指令的長度)。由于ARM指令總是以字為單位,所以R15寄存器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執(zhí)行正在譯碼正在取指流水線狀態(tài)地址程序代碼寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器 在ARM微處理器中,有CPSR和SPSR兩種程序狀態(tài)寄存器。1、當(dāng)前程序狀態(tài)寄存器CPSR(CurrentProgramStatusRegister)用來保存當(dāng)前程序狀態(tài)的寄存器。所有模式共用同一個CPSR。2、保存(備份)程序狀態(tài)寄存器SPSR_mode
(SavedProgramStatusRegister) SPSR_mode用來進(jìn)行異常處理,其功能包括: ─保存ALU中的當(dāng)前操作信息 當(dāng)異常發(fā)生時,用來保存CPSR的值,從異常返回時,將
SPSR_mode復(fù)制到CPSR中,恢復(fù)CPSR的值。 ─控制允許和禁止中斷 修改SPSR的值 ─設(shè)置處理器的運(yùn)行模式 修改SPSR的值注意:如果通過程序修改CPSR寄存器中的模式位進(jìn)入異常模式,那么硬件將不會把CPSR保存至SPSR中。
程序狀態(tài)寄存器(PSR)寄存器類別寄存器在匯編中的名稱各模式下實(shí)際訪問的寄存器用戶系統(tǒng)管理中止未定義中斷快中斷通用寄存器和程序計(jì)數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態(tài)各模式下的寄存器2023/2/3程序狀態(tài)寄存器CPSR的每一位的安排
2023/2/3標(biāo)志位含
義NNegativelessthan,當(dāng)用兩個補(bǔ)碼表示的帶符號數(shù)進(jìn)行運(yùn)算時,N=1表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示運(yùn)算的結(jié)果為正數(shù)或零;ZZero,Z=1表示運(yùn)算的結(jié)果為零(通常表示比較結(jié)果“相等”);Z=0表示運(yùn)算的結(jié)果為非零;CCarry/Borrow/Extend加法運(yùn)算結(jié)果進(jìn)位時(包括CMN指令),C=1;減法運(yùn)算借位時,C=0;移位操作的非加/減運(yùn)算指令,C為從最高位最后移出的值;其他的非加/減運(yùn)算指令,C的值通常不改變。VOverflow加/減法運(yùn)算指令,V=1表示符號位溢出。對于其他的非加/減運(yùn)算指令,C的值通常不改變。QQ標(biāo)志指示DSP運(yùn)算指令是否溢出。3130292827…876543210NZCV(保留)IFTM4M3M2M1M02023/2/3 CPSR的最低8位為控制位,當(dāng)發(fā)生異常時,這些位被硬件改變。當(dāng)處理器處于一個特權(quán)模式時,可用軟件操作這些位。中斷禁止位I、F:(I--IRQdisable,F—FIQdisable)I=1禁止IRQ中斷;
I=0允許IRQ中斷F=1禁止FIQ中斷;
F=0允許FIQ中斷T標(biāo)志位(Statebit):該位反映處理器的運(yùn)行狀態(tài)T=1時,程序運(yùn)行于Thumb狀態(tài)T=0時,程序運(yùn)行于ARM狀態(tài)
運(yùn)行模式位M[4:0]是模式位,決定處理器的運(yùn)行模式
3130292827…876543210NZCV(保留)IFTM4M3M2M1M0CPSR(當(dāng)前程序狀態(tài)寄存器)的低5位用于定義當(dāng)前操作模式:處理器運(yùn)行模式及可以訪問的寄存器3130292827…876543210NZCV(保留)IFTM4M3M2M1M0ARM異常簡介
只要正常的程序流被暫時中止,處理器就進(jìn)入異常模式,如果同時發(fā)生兩個或更多異常,那么將按照異常的優(yōu)先級來處理異常。
在ARM中共有7種異常:異常模式向量表偏移復(fù)位(reset)SVC(管理模式)+0x00(優(yōu)先級最高)未定義指令UND(未定義模式)+0x04軟件中斷(SWI)SVC(管理模式)+0x08預(yù)取指終止ABT(中止模式)+0x0c數(shù)據(jù)終止ABT(中止模式)+0x10未分配--+0x14IRQIRQ(中斷模式)+0x18FIQ
FIQ(快速中斷模式)+0x1cARM指令系統(tǒng)
尋址方式是處理器執(zhí)行指令時尋找真實(shí)操作數(shù)地址的方式。ARM處理器支持9種基本尋址方式尋址方式分類
尋址方式是根據(jù)指令中給出的地址碼字段來實(shí)現(xiàn)尋找真實(shí)操作數(shù)地址的方式。ARM處理器具有9種基本尋址方式。1.寄存器尋址; 2.立即尋址;3.寄存器移位尋址; 4.寄存器間接尋址;5.基址尋址; 6.多寄存器尋址;7.堆棧尋址; 8.塊拷貝尋址;9.相對尋址。
操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值來操作。寄存器尋址指令舉例如下:MOVR1,R2 ;將R2的值存入R1SUBR0,R1,R2;將R1的值減去R2的值,結(jié)果保存到R0
0xAA0x55R2R1尋址方式分類——寄存器尋址MOVR1,R20xAA
立即尋址指令中的操作碼字段后面的地址碼部分即是操作數(shù)本身,也就是說,數(shù)據(jù)就包含在指令當(dāng)中,取出指令也就取出了可以立即使用的操作數(shù)(這樣的數(shù)稱為立即數(shù))。立即尋址指令舉例如下:SUBS R0,R0,#1;R0減1,結(jié)果放入R0,并且影響標(biāo)志位;R0=R0-#1;MOV R0,#0xFF;將立即數(shù)0xFF裝入R0寄存器
尋址方式分類——立即尋址
寄存器移位尋址是ARM指令集特有的尋址方式。當(dāng)?shù)?個操作數(shù)是寄存器移位方式時,第2個寄存器操作數(shù)在與第1個操作數(shù)結(jié)合之前,選擇進(jìn)行移位操作。寄存器移位尋址指令舉例如下:MOV R0,R2,LSL#3 ;R2的值左移3位,結(jié)果放入R0,即是R0=R2×8ANDS R1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相“與”操作,結(jié)果放入R10x55R0R20x01尋址方式分類——寄存器移位尋址MOVR0,R2,LSL#30x080x08邏輯左移3位
寄存器間接尋址指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數(shù)保存在寄存器指定地址的存儲單元中,即寄存器為操作數(shù)的地址指針。寄存器間接尋址指令舉例如下:LDR R1,[R2] ;將R2指向的存儲單元的數(shù)據(jù)讀出;將其保存在R1中SWP R1,R1,[R2] ;將寄存器R1的值和R2指向的存儲單元的內(nèi)容交換0x55R0R20x400000000xAA0x40000000尋址方式分類——寄存器間接尋址LDRR0,[R2]0xAA
基址尋址就是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數(shù)組操作、功能部件寄存器訪問等?;穼ぶ分噶钆e例如下:LDR R2,[R3,#0x0C] ;讀取R3+0x0C地址上的存儲單元的內(nèi)容,存入R2。STR R1,[R0,#-4]! ;先R0=R0-4,然后把R1的值保存到R0指定的存儲單元尋址方式分類——基址尋址0x55R2R30x400000000xAA0x4000000CLDRR2,[R3,#0x0C]0xAA將R3+0x0C作為地址裝載數(shù)據(jù)
多寄存器尋址一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。多寄存器尋址指令舉例如下:LDMIA R1!,{R2-R7,R12};
[R1]->R2,[R1+4]->R3,[R1+8]->R4等(R1自動加1)。STMIA R0!,{R2-R7,R12};將寄存器R2~R7、R12的值保存到R0指向的存儲;單元中(R0自動加1)。注:ARM指令中{!},為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。0x40000000R1R20x??0x010x400000000x??R3R40x??R60x??0x020x030x040x400000040x400000080x4000000C存儲器地址尋址方式分類——多寄存器尋址LDMIAR1!,{R2-R4,R6}0x010x020x030x040x40000010
堆棧是一個按特定順序進(jìn)行存取的存儲區(qū),操作順序?yàn)椤昂筮M(jìn)先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針SP,R13)指向一塊存儲區(qū)域(堆棧),SP指針?biāo)赶虻拇鎯卧词嵌褩5臈m敗4鎯ζ鞫褩?煞譃閮煞N:向上生長:向高地址方向生長,稱為遞增堆棧向下生長:向低地址方向生長,稱為遞減堆棧尋址方式分類——堆棧尋址尋址方式分類——堆棧尋址棧底(低地址)棧頂棧區(qū)SP堆棧存儲區(qū)(低地址)棧頂棧底棧區(qū)SP向下增長向上增長0x123456780x12345678堆棧壓棧堆棧壓棧滿堆棧是指堆棧指針指向堆棧的最后一個已使用的地址;空堆棧是指堆棧指針指向下一個待壓入數(shù)據(jù)的空位置。 ARM體系結(jié)構(gòu)使用多寄存器指令load-store來完成堆棧操作。在指令上加上后綴FA、FD、EA、ED(F-滿位置,E-空位置,A-遞增,D-遞減)來表示sp指針的尋址方式,如FA表示滿遞增。尋址方式分類——堆棧尋址可以組合出四種類型的堆棧方式:滿遞增:堆棧向上增長,堆棧指針指向含有有效數(shù)據(jù)項(xiàng)的最高地址。指令如LDMFA、STMFA等;空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等;滿遞減:堆棧向下增長,堆棧指針指向含有有效數(shù)據(jù)項(xiàng)的最低地址。指令如LDMFD、STMFD等;空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。尋址方式分類——堆棧尋址
多寄存器傳送指令用于將一塊數(shù)據(jù)從存儲器的某一位置拷貝到另一位置。塊拷貝尋址與堆棧尋址有所類似。兩者的區(qū)別在于:堆棧尋址中數(shù)據(jù)的存取是面向堆棧的,塊拷貝尋址中數(shù)據(jù)的存取是面向寄存器指向的存儲單元的.在塊拷貝尋址方式中,基址寄存器傳送一個數(shù)據(jù)后有4種增長方式,即:IA:每次傳送后地址增加4;(IncrementAfterOperating)IB:每次傳送前的地址增加4;(IncrementBeforeOperating)DA:每次傳送后地址減少4;(DecrementAfterOperating)DB:每次傳送前地址減少4。(DecrementBeforeOperating)尋址方式分類——塊拷貝尋址STMIA
R0!,{R1—R7,R9,R11};將R1-R7的數(shù)據(jù)保存到R0指向的存儲器中,存儲器指針在保存第一個值之后增加4,向上增長。R0作為基址寄存器。STMIB
R0!,{R1—R7};將R1-R7的數(shù)據(jù)保存到存儲器中,存儲器指針在保存第一個值之前增加4,向上增長。R0作為基址寄存器。STMDA
!,{R1—R7};將R1-R7的數(shù)據(jù)保存到R0指向的存儲器中,存儲器指針在保存第一個值之后減少4,向下減少。R0作為基址寄存器。STMDB
!,{R1—R7};將R1-R7的數(shù)據(jù)保存到存儲器中,存儲器指針在保存第一個值之前減少4,向下減少。R0作為基址寄存器。注:ARM指令中{!}為可選后綴,若選用該后綴,則當(dāng)數(shù)據(jù)傳送完畢之后,將最后的地址寫入基址寄存器,否則基址寄存器的內(nèi)容不改變。
ARM指令中{^}為可選后綴,當(dāng)指令為LDM且寄存器列表中包含R15,選用該后綴時表示:除了正常的數(shù)據(jù)傳送之外,還將SPSR復(fù)制到CPSR。同時,該后綴還表示傳入或傳出的是用戶模式下的寄存器,而不是當(dāng)前模式下的寄存器。
相對尋址是基址尋址的一種變通。由程序計(jì)數(shù)器PC提供基準(zhǔn)地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數(shù)的有效地址。相對尋址指令舉例如下:
BL SUBR1 ;調(diào)用到SUBR1子程序
BEQ LOOP ;條件跳轉(zhuǎn)到LOOP標(biāo)號處
...LOOP MOV R6,#1 ...SUBR1 ...尋址方式分類——相對尋址BLLabelxxxxxxLabelxxxMOVPC,LRAddr1Addr2xxxxxxLRPC助記符說明操作條件碼位置Blabel分支指令PC←labelB{cond}BLlabel帶鏈接的分支指令LR←PC-4,PC←labelBL{cond}BXRm帶狀態(tài)切換的分支指令PC←label,切換處理器狀態(tài)BX{cond}ARM指令——分支指令
帶鏈接的分支指令——BL指令適用于子程序調(diào)用,使用該指令后,下一條指令的地址被拷貝到R14(即LR)連接寄存器中,然后跳轉(zhuǎn)到指定地址運(yùn)行程序。跳轉(zhuǎn)范圍限制在當(dāng)前指令的±32M字節(jié)地址內(nèi)。指令格式如下:BL{cond}LabelAddr1LabelAddr2Addr21.當(dāng)程序執(zhí)行到BL跳轉(zhuǎn)指令時,硬件將下一條指令的地址Addr2裝入LR寄存器,并把跳轉(zhuǎn)地址裝入程序計(jì)數(shù)器(PC)2.程序跳轉(zhuǎn)到目標(biāo)地址Label繼續(xù)執(zhí)行,當(dāng)子程序執(zhí)行結(jié)束后,將LR寄存器內(nèi)容存入PC,返回調(diào)用函數(shù)繼續(xù)執(zhí)行助記符說明操作條件碼位置MOVRd,operand2數(shù)據(jù)傳送Rd←operand2MOV{cond}{S}MVNRd,operand2數(shù)據(jù)非傳送Rd←(~operand2)MVN{cond}{S}ARM數(shù)據(jù)處理指令——數(shù)據(jù)傳送
MOV指令將8位立即數(shù)或寄存器傳送到目標(biāo)寄存器(Rd),可用于移位運(yùn)算等操作。指令格式如下:MOV{cond}{S}Rd,operand2
MOV指令舉例如下:
MOV R1,#0x10 ;R1=0x10
MOV R0,R1 ;R0=R1
MOVS R3,R1,LSL#2 ;R3=(R1<<2),并影響標(biāo)志位
MOV PC,LR ;PC=LR,子程序返回
助記符說明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算
加法運(yùn)算指令——ADD指令將operand2的值與Rn的值相加,結(jié)果保存到Rd寄存器。指令格式如下:ADD{cond}{S}Rd,Rn,operand2
應(yīng)用示例:
ADDSR1,R1,#1 ;R1=R1+1,并影響標(biāo)志位
ADDR1,R1,R2 ;R1=R1+R2
助記符說明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}
減法運(yùn)算指令——SUB指令用寄存器Rn減去operand2,結(jié)果保存到Rd中。指令格式如下:SUB{cond}{S}Rd,Rn,operand2
應(yīng)用示例:
SUBS R0,R0,#1 ;R0=R0-1,并影響標(biāo)志位
SUBS R2,R1,R2 ;R2=R1-R2
,并影響標(biāo)志位
ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算助記符說明操作條件碼位置ANDRd,Rn,operand2邏輯與操作指令Rd←Rn&operand2AND{cond}{S}ORRRd,Rn,operand2邏輯或操作指令Rd←Rn|operand2ORR{cond}{S}EORRd,Rn,operand2邏輯異或操作指令Rd←Rn^operand2EOR{cond}{S}BICRd,Rn,operand2位清除指令Rd←Rn&(~operand2)BIC{cond}{S}ARM數(shù)據(jù)處理指令——邏輯運(yùn)算指令
邏輯或操作指令——ORR指令將operand2的值與寄存器Rn的值按位作邏輯“或”操作,結(jié)果保存到Rd中。指令格式如下:ORR{cond}{S}Rd,Rn,operand2
應(yīng)用示例:
MOV R1,R2,LSR#24 ;使用ORR指令將R2的高8位
ORR R3,R1,R3,LSL#8
;移入到R3低8位中注:LSL為邏輯左移;LSR為邏輯右移。助記符說明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}
帶進(jìn)位加法指令——ADC將operand2的值與Rn的值相加,再加上CPSR中的C條件標(biāo)志位,結(jié)果保存到Rd寄存器。指令格式如下:ADC{cond}{S}Rd,Rn,operand2應(yīng)用示例(使用ADC實(shí)現(xiàn)64位加法,結(jié)果存于R1、R0中):
ADDSR0,R0,R2 ;R0等于低32位相加,并影響標(biāo)志位
ADCR1,R1,R3
;R1等于高32位相加,并加上低位進(jìn)位ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算助記符說明操作條件碼位置ADDRd,Rn,operand2加法運(yùn)算指令Rd←Rn+operand2ADD{cond}{S}SUBRd,Rn,operand2減法運(yùn)算指令Rd←Rn-operand2SUB{cond}{S}RSBRd,Rn,operand2逆向減法指令Rd←operand2-RnRSB{cond}{S}ADCRd,Rn,operand2帶進(jìn)位加法Rd←Rn+operand2+CarryADC{cond}{S}SBCRd,Rn,operand2帶進(jìn)位減法指令Rd←Rn-operand2-(NOT)CarrySBC{cond}{S}RSCRd,Rn,operand2帶進(jìn)位逆向減法指令Rd←operand2-Rn-(NOT)CarryRSC{cond}{S}
帶進(jìn)位減法指令——SBC用寄存器Rn減去operand2,再減去CPSR中的C條件標(biāo)志位的非(減法運(yùn)算借位,則C=0),結(jié)果保存到Rd中。Rd=Rn-operand2-(C!)SBC{cond}{S}Rd,Rn,operand2應(yīng)用示例(使用SBC實(shí)現(xiàn)64位減法,結(jié)果存于R1、R0中):
SUBSR0,R0,R2 ;低32位相減,并影響標(biāo)志位
SBCR1,R1,R3
;高32位相減,并減去低位借位ARM數(shù)據(jù)處理指令——算術(shù)運(yùn)算ARM數(shù)據(jù)處理指令——比較指令
比較指令——CMP指令將寄存器Rn的值減去operand2的值,根據(jù)操作的結(jié)果更新CPSR中的相應(yīng)條件標(biāo)志位,以便后面的指令根據(jù)相應(yīng)的條件標(biāo)志來判斷是否執(zhí)行。指令格式如下:CMP{cond} Rn,operand2
應(yīng)用示例:
CMP R1,#10
;R1與10比較,設(shè)置相關(guān)標(biāo)志位注意:CMP指令與SUBS指令的區(qū)別在于CMP指令不保存運(yùn)算結(jié)果。在進(jìn)行兩個數(shù)據(jù)的大小判斷時,常用CMP指令及相應(yīng)的條件碼來操作。助記符說明操作條件碼位置CMPRn,operand2比較指令標(biāo)志N、Z、C、V←Rn-operand2CMP{cond}CMNRn,operand2負(fù)數(shù)比較指令標(biāo)志N、Z、C、V←Rn+operand2CMN{cond}TSTRn,operand2位測試指令標(biāo)志N、Z、C、V←Rn&operand2TST{cond}TEQRn,operand2相等測試指令標(biāo)志N、Z、C、V←Rn^operand2TEQ{cond}2023/2/3ARM匯編語言程序?qū)嵗?/p>
例:編寫一具有完整匯編格式的程序,實(shí)現(xiàn)冒泡法排序功能。設(shè)無符號字?jǐn)?shù)據(jù)存放在從0x400004開始的區(qū)域,字?jǐn)?shù)據(jù)的數(shù)目字存放在0x400000中。AREASORT,CODE,READONLY ENTRYSTART
MOVR0,#0x400000
MOV R1,[R0]LOOP SUBS R1,R1,#1 BEQ EXIT MOV R7,R1 LDR R0,=0x400004LOOP1 LDR R2,[R0],#4 LDR R3,[R0] CMP R2,R3
STRLOR3,[R0,#-4] STRLOR2,[R0] SUBSR7,R7,#1 BNE LOOP1 B LOOPEXIT END搭建Linux交叉編譯開發(fā)環(huán)境vim沒有菜單,只有命令vim有三種基本工作模式,分別是:命令模式(commandmode)插入模式(insertmode)底行模式(lastlinemode)VIM的使用:三種工作模式CommandMode主要功能:移動鼠標(biāo)或編輯文字LastLineMode主要功能:搜索或替換、存保存及結(jié)束InsertMode主要功能:輸入文字按a/A、i/I、o/O鍵按:鍵命令錯誤或按Esc鍵執(zhí)行vi命令回到終端按q、q!、wq鍵按Esc鍵gcc編譯器GNUCC(簡稱為gcc)是GNU項(xiàng)目中符合ANSIC標(biāo)準(zhǔn)的編譯系統(tǒng),gcc不僅功能強(qiáng)大,而且可以編譯如C、C++、ObjectC、Java、Fortran、Pascal、Modula-3和Ada等多種語言,而且gcc又是一個交叉平臺編譯器,它能夠在當(dāng)前CPU平臺上為多種不同體系結(jié)構(gòu)的硬件平臺開發(fā)軟件,因此尤其適合在嵌入式領(lǐng)域的開發(fā)編譯。gcc編譯過程Gcc的編譯流程分為了4個步驟,分別為:·預(yù)處理(Pre-Processing);·編譯(Compiling);·匯編(Assembling);·鏈接(Linking)。1.預(yù)處理階段預(yù)處理程序(Pre-processor)讀取C語言源文件,對其中以“#”開頭的指令(偽指令)和特殊符號進(jìn)行處理。偽指令主要包括文件包含、宏定義和條件編譯指令。2.編譯階段編譯程序(Compiler)對預(yù)處理之后的輸出文件進(jìn)行詞法分析和語法分析,試圖找出所有不符合語法規(guī)則的部分。在確定各成分都符合語法規(guī)則后,將其“翻譯”為功能等價的中間代碼表示或者匯編代碼。3.匯編過程匯編程序(Assembler)把匯編語言代碼翻譯成目標(biāo)機(jī)器代碼的過程。4.連接階段將一個文件中引用的符號(如變量或函數(shù)調(diào)用)與該符號在另外一個文件中的定義連接起來,從而使有關(guān)的目標(biāo)文件連成一個整體,最終成為可被操作系統(tǒng)執(zhí)行的可執(zhí)行文件。連接模式分為靜態(tài)連接和動態(tài)連接。
理解下列Makefile文件: #一個簡單的Makefile的例子 #以#開頭的為注釋行 test:prog.ocode.o gccprog.ocode.o–otest
prog.o:prog.cprog.hcode.h gcc–cprog.c–oprog.o
code.o:code.ccode.h gcc–ccode.c–ocode.o
clean: @echo"cleanningproject" rmmain*.o @echo"cleancompleted"BootLoader介紹在嵌入式系統(tǒng)中,通常沒有像BIOS那樣的固件程序,因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader來完成。Bootloader(引導(dǎo)加載程序)是嵌入式系統(tǒng)上電后運(yùn)行的第一段軟件代碼。通過它,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),完成由硬件啟動到操作系統(tǒng)啟動的過渡,從而為操作系統(tǒng)提供基本的運(yùn)行環(huán)境,以便為操作系統(tǒng)內(nèi)核運(yùn)行準(zhǔn)備好正確的環(huán)境.Bootloader的主要運(yùn)行任務(wù)是硬件初始化,將Linux內(nèi)核鏡像從硬盤Flash讀到RAM中,然后跳轉(zhuǎn)到Linux內(nèi)核的入口點(diǎn)去運(yùn)行,從而啟動Linux系統(tǒng)。BootLoader介紹BootLoader非通用性:
每種不同的CPU體系結(jié)構(gòu)都有不同的BootLoader。有些BootLoader也支持多種體系結(jié)構(gòu)的CPU,比如U-Boot就同時支持ARM體系結(jié)構(gòu)和MIPS體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader實(shí)際上也依賴于具體的嵌入式板級設(shè)備的配置。這也就是說,對于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,通常也都需要修改BootLoader的源程序。BootLoader的兩種類型BootLoader的啟動過程有兩種類型:單階段(SingleStage):一些只需完成很簡單功能的bootloader可能是單階段的多階段(Multi-Stage):
通常多階段的BootLoader能提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲設(shè)備(Flash)上啟動的BootLoader大多都是2階段的啟動過程,也即啟動過程可以分為stage1和stage2兩部分:(1)Stage1--依賴于處理器體系結(jié)構(gòu)和板級初始化的代碼,需要短小精悍,通常用匯編語言編寫;(2)Stage2--通常用C語言來實(shí)現(xiàn),以便于實(shí)現(xiàn)更復(fù)雜的功能以及取得更好的代碼可讀性和可移植性。但是與普通C語言應(yīng)用程序不同的是,在編譯和鏈接Bootloader程序時,不能使用glibc庫中的任何支持函數(shù)。Uboot的作用uboot相關(guān)命令printenv打印環(huán)境變量usage:
printenv
-printvaluesofallenvironmentvariables
printenvname...
-printvalueofenvironmentvariable'name'Uboot>printenv
baudrate=115200
ipaddr=
ethaddr=12:34:56:78:9A:BC
serverip=Uboot>printenvipaddripaddr=
環(huán)境變量相關(guān)命令setenv添加、修改、刪除環(huán)境變量setenvnamevalue...
-setenvironmentvariable'name'to'value...‘setenvname
-deleteenvironmentvariable'name‘添加例子:
Uboot>setenvmyboardAT91RM9200DK
Uboot>printenvmyboard myboard=AT91RM9200DK修改例子:
Uboot>setenvipaddr4Uboot>setenvserverip8刪除例子:
Uboot>setenvmyboard環(huán)境變量相關(guān)命令setenv命令的使用實(shí)例:>setenvserverip>setenvipaddr00>setenvrootpath“/usr/local/arm/3.3.2/rootfs”>setenvbootargs“root=/dev/nfsrwnfsroot=\$(serverip):\$(rootpath)ip=\$(ipaddr)”>setenvkernel_addr30000000>setenvnfscmd“tftp\$(kernel_addr)uImage;bootm\$(kernel_addr)”>runnfscmd
上面定義的環(huán)境變量有serverip、ipaddr、rootpath、bootargs、kernel_addr。環(huán)境變量bootargs中還調(diào)用了環(huán)境變量,bootargs環(huán)境變量定義了命令行參數(shù),通過bootm命令傳遞給內(nèi)核。環(huán)境變量nfscmd通過tftp協(xié)議把uImage下載到指定的地址并且引導(dǎo)起來。最后,通過run命令來執(zhí)行nfscmd腳本。環(huán)境變量相關(guān)命令saveenv保存變量 設(shè)置好的環(huán)境變量只是保持在內(nèi)存(斷點(diǎn)消失)中,所以需要通過saveenv命令保存至Flash中。我們經(jīng)常要設(shè)置的環(huán)境變量有ipaddr,serverip,bootcmd,bootargs。Linux內(nèi)核結(jié)構(gòu)Linux內(nèi)核組成 Linux內(nèi)核主要由五個子系統(tǒng)組成:進(jìn)程調(diào)度,內(nèi)存管理,虛擬文件系統(tǒng),網(wǎng)絡(luò)接口,進(jìn)程間通信。Linux內(nèi)核結(jié)構(gòu)
進(jìn)程調(diào)度(SCHED) 控制進(jìn)程對CPU的訪問。當(dāng)需要選擇下一個進(jìn)程運(yùn)行時,由調(diào)度程序選擇最值得運(yùn)行的進(jìn)程。可運(yùn)行進(jìn)程實(shí)際上是僅等待CPU資源的進(jìn)程,如果某個進(jìn)程在等待其它資源,則該進(jìn)程是不可運(yùn)行進(jìn)程。
Linux使用了比較簡單的基于優(yōu)先級的進(jìn)程調(diào)度算法來選擇運(yùn)行新的進(jìn)程。Linux內(nèi)核結(jié)構(gòu)
(2)內(nèi)存管理(MM) Linux允許多個進(jìn)程安全的共享主內(nèi)存區(qū)域。它的內(nèi)存管理支持虛擬內(nèi)存,即在計(jì)算機(jī)中運(yùn)行的程序,其代碼、數(shù)據(jù)、堆棧的總量可以超過實(shí)際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤中。內(nèi)存管理從邏輯上分為硬件無關(guān)部分和硬件有關(guān)部分。硬件無關(guān)部分提供了進(jìn)程的映射和邏輯內(nèi)存的對換;硬件相關(guān)部分為內(nèi)存管理硬件提供了虛擬接口。Linux內(nèi)核結(jié)構(gòu)
(3)虛擬文件系統(tǒng)(VirtualFileSystem,VFS) 虛擬文件系統(tǒng)隱藏了各種硬件的具體細(xì)節(jié),為所有的設(shè)備提供了統(tǒng)一的接口,VFS提供了多達(dá)數(shù)十種不同的文件系統(tǒng)。虛
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 部編2024版歷史七年級上冊第四單元《第20課 三國兩晉南北朝時期的科技與文化》有關(guān)故事、軼事和傳說(學(xué)案)
- 房地產(chǎn)企業(yè)物業(yè)管理部給排水設(shè)備維修養(yǎng)護(hù)方案
- 古琴銷售合同協(xié)議書(2篇)
- 韶關(guān)學(xué)院java課程設(shè)計(jì)模板
- 互聯(lián)網(wǎng)+智慧出行大數(shù)據(jù)平臺規(guī)劃建設(shè)方案
- 呼吸機(jī)相關(guān)性肺炎的預(yù)防及護(hù)理措施方案
- 樓板厚度檢測方案
- 祁東船山的課程設(shè)計(jì)
- 數(shù)據(jù)中心機(jī)房應(yīng)急預(yù)案
- 出貨協(xié)議書(2篇)
- 部編版語文四年級上冊 《16.麻雀》課件 (共14張PPT)
- 中小學(xué)生心理健康量表MHT
- 保安證書表格
- 五年級語文上冊課件-第6單元口語交際-父母之愛(部編版)(共15張PPT)
- 《思想道德與法治》2021版教材第二章
- 流行病學(xué)課件:第23章 流行性感冒
- 辦公家具項(xiàng)目實(shí)施方案、供貨方案
- 青少年肥胖以及預(yù)防
- DB3303∕T 020-2020 公共機(jī)構(gòu)食堂陽光采購規(guī)范
- 幼兒園課件《我會保護(hù)自己》
- 合理應(yīng)用抗菌藥物
評論
0/150
提交評論