




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章1.嵌入式系統(tǒng)定義嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),采用可剪裁軟硬件,適用于對(duì)功能、可靠性、成本、體積、功耗等有嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。 嵌入式微處理器 外圍硬件設(shè)備 嵌入式操作系統(tǒng) 應(yīng)用程序 嵌入式系統(tǒng)體系結(jié)構(gòu) 嵌入式處理器類(lèi)型 嵌入式微處理器(Embedded Microprocessor Unit,EMPU) 由通用微處理器裁剪后發(fā)展而來(lái) 386EX,PowerPC,MIPS,ARM 嵌入式微控制器(Microcontroller Unit,MCU) 在一塊芯片上集成cpu、存儲(chǔ)器及其他部件 單片機(jī) 嵌入式DSP處理器(Embedded Digital Signal
2、Processor,EDSP) 嵌入式片上系統(tǒng)(System On Chip)第二章ARM主要采用32位指令集, Thumb 16位指令集 ARM9處理器架構(gòu) ARM9處理器系列有兩個(gè)分支 基于v4版本的ARM9,典型的有ARM9TDMI和ARM922T 基于v5TE或v5TEJ架構(gòu)的ARM9E,典型處理器有ARM9EJ-S和ARM926EJ-S等 后面關(guān)于ARM9的介紹主要也是圍繞ARM9E系列 狀態(tài)寄存器 1個(gè)當(dāng)前程序狀態(tài)寄存器(CPSR)和5個(gè)備份狀態(tài)寄存器(SPSR)狀態(tài)寄存器結(jié)構(gòu)SPSR在處理器進(jìn)入異常模式時(shí)用來(lái)保存CPSR寄存器內(nèi)容,當(dāng)從異常退出時(shí),用SPSR恢復(fù)CPSR的值流水線
3、技術(shù)和哈佛體系結(jié)構(gòu) 馮·諾依曼體系將數(shù)據(jù)和指令全部存儲(chǔ)在同一個(gè)存儲(chǔ)器中 哈佛體系中,指令存儲(chǔ)和數(shù)據(jù)存儲(chǔ)是分開(kāi)的,指令的存取和數(shù)據(jù)的存取通過(guò)不同的數(shù)據(jù)總線進(jìn)行內(nèi)存管理單元MMU作用 CPU產(chǎn)生的虛擬地址被先送到MMU中,通過(guò)一定的映射,轉(zhuǎn)換為物理地址,然后進(jìn)行相應(yīng)的讀寫(xiě)操作 有了MMU,才能使用虛擬內(nèi)存第三章1.立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)沒(méi)有存儲(chǔ)在寄存器或存儲(chǔ)器中,而是包含在指令的操作碼中,只要取出指令也就取到了操作數(shù)。這個(gè)操作數(shù)被稱(chēng)為立即數(shù),對(duì)應(yīng)的尋址方式也就叫做立即尋址。例如指令: MOV R0, #0xFF000 ;將立即數(shù)0xFF000裝入R0寄存器
4、 ADD R1, R1,0x7f ; R1R10x7f 在以上兩條指令中,第二個(gè)源操作數(shù)即為立即數(shù),要求以“”為前綴,對(duì)于以十六進(jìn)制表示的立即數(shù),還要求在“”后加上“0x”。2.寄存器尋址就是利用寄存器中的內(nèi)容作為操作數(shù),寄存器本身就是操作數(shù)地址。這種尋址方式是各類(lèi)微處理器經(jīng)常采用的一種方式,也是一種執(zhí)行效率較高的尋址方式。 例如指令: MOV R2, R3 ;R2R3 R3中的內(nèi)容賦給R2ADD R2,R3,R4 ;R2R3R4 R3和R4中的內(nèi)容相加,結(jié)果賦給R23.寄存器間接尋址就是以寄存器中的內(nèi)容作為操作數(shù)的地址,而操作數(shù)本身存放在存儲(chǔ)器中。例如指令 : LDRR1,R2;R1R2 S
5、TRR1,R2;R2R1 第一條指令將以R2中的內(nèi)容為地址,將該地址中的數(shù)據(jù)傳送到R1中。 第二條指令將R1中的內(nèi)容傳送到以R2中的內(nèi)容為地址的存儲(chǔ)器中。4.變址尋址就是將寄存器(該寄存器一般稱(chēng)作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個(gè)操作數(shù)的有效地址。變址尋址方式常用于訪問(wèn)某基地址附近的地址單元。例如指令: LDR R0,R1,8 ;R0R18 LDR R0,R1,8! ;R0R18,R1R18 LDR R0,R1,2 ;R0R1,R1R12 LDR R0,R1,R2 ;R0R1R25.寄存器移位尋址是ARM指令集獨(dú)有的尋址方式,操作數(shù)由寄存器的數(shù)值進(jìn)行相應(yīng)移位而得到;移
6、位的方式在指令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。6.多寄存器尋址方式,一條指令可以完成多個(gè)寄存器值的傳送。這種尋址方式可以一次對(duì)多個(gè)寄存器尋址,多個(gè)寄存器由小到大排列,最多可傳送16個(gè)寄存器。 例如: LDMIA R1!,R2-R4,R5 ;R2R1 ;R3R14 ;R4R18 ;R5R112 該指令的后綴IA表示在每次執(zhí)行完加載/存儲(chǔ)操作后,R1按字長(zhǎng)度增加,因此, 指令可將連續(xù)存儲(chǔ)單元的值傳送到R2R5。7.堆棧尋址:堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,F(xiàn)ILO)的方式工作,使用一個(gè)稱(chēng)作堆棧指針的專(zhuān)用寄存器指示當(dāng)前的操作位置,
7、堆棧指針總是指向棧頂。l 當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時(shí),稱(chēng)為滿堆棧(Full Stack);而當(dāng)堆棧指針指向下一個(gè)將要放入數(shù)據(jù)的空位置時(shí),稱(chēng)為空堆棧(Empty Stack)。l 同時(shí),根據(jù)堆棧的生成方式,又可以分為遞增堆棧(Ascending Stack)和遞減堆棧(Decending Stack),當(dāng)堆棧由低地址向高地址生成時(shí),稱(chēng)為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時(shí),稱(chēng)為遞減堆棧。ARM微處理器支持這四種類(lèi)型的堆棧工作方式,即:l 滿遞增方式FA(Full Ascending):堆棧指針指向最后入棧的數(shù)據(jù)位置,且由低地址向高地址生成。l 滿遞減方式FD(Full Decendin
8、g):堆棧指針指向最后入棧的數(shù)據(jù)位置,且由高地址向低地址生成。l 空遞增方式EA(Empty Ascending):堆棧指針指向下一個(gè)入棧數(shù)據(jù)的空位置,且由低地址向高地址生成。l 空遞減方式ED(Empty Decending):堆棧指針指向下一個(gè)入棧數(shù)據(jù)的空位置,且由高地址向低地址生成。8.相對(duì)尋址:與基址變址尋址方式相類(lèi)似,相對(duì)尋址以程序計(jì)數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號(hào)作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。l 以下程序段完成子程序的調(diào)用和返回,跳轉(zhuǎn)指令BL采用了相對(duì)尋址方式: BL NEXT;跳轉(zhuǎn)到子程序NEXT處執(zhí)行 NEXT MOVPC,LR;從子程序返回1單一數(shù)
9、據(jù)加載/存儲(chǔ)指令(1)LDR指令格式為:LDR條件 目的寄存器,<存儲(chǔ)器地址> LDR指令是字加載指令,用于從存儲(chǔ)器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。l 指令示例:LDR R3,R4 ;將存儲(chǔ)器地址為R4的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2 ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,8 ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2! ;將存儲(chǔ)器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2寫(xiě)入R1。LDR R3,R1,8 ! ;將存儲(chǔ)器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R18寫(xiě)入R
10、1。應(yīng)用示例:LDRR3, R4 ;將R4指向地址的字?jǐn)?shù)據(jù)存入R30x55R3R40x400000000x123456780x40000000存儲(chǔ)器地址LDR R3,R1,R2;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2寫(xiě)入R1。LDR R3,R1,R2,LSL3??;將存儲(chǔ)器地址為R1R2×8的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2×8寫(xiě)入R1。LDR R3,R1,R2,LSL3;將存儲(chǔ)器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2×8寫(xiě)入R1。注:R15不可以作為偏移寄存器使用。(2)LDRB指令 格式為: LDR條件B 目的寄存器,
11、<存儲(chǔ)器地址> LDRB指令是字節(jié)加載指令,用于從存儲(chǔ)器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器的高24位清零。 該指令通常用于從存儲(chǔ)器中讀取8位的字節(jié)數(shù)據(jù)到通用寄存器,然后對(duì)數(shù)據(jù)進(jìn)行處理。指令示例:LDRB R3,R1 ;將存儲(chǔ)器地址為R1的字節(jié)數(shù)據(jù)讀入寄存器R0,并將R3的高24位清零。LDRB R3,R1,8 ;將存儲(chǔ)器地址為R18的字節(jié)數(shù)據(jù)讀入寄存器R3,并將R3的高24位清零。(3)LDRH指令格式為: LDR條件H 目的寄存器,<存儲(chǔ)器地址> LDRH指令是無(wú)符號(hào)半字加載指令,用于從存儲(chǔ)器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時(shí)將寄存器
12、的高16位清零。該指令通常用于從存儲(chǔ)器中讀取16位的半字?jǐn)?shù)據(jù)到通用寄存器,然后對(duì)數(shù)據(jù)進(jìn)行處理。指令示例:LDRH R3,R1;將存儲(chǔ)器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。LDRH R3,R1,8 ;將存儲(chǔ)器地址為R18的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。LDRH R3,R1,R2 ;將存儲(chǔ)器地址為R1R2的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。(4)STR指令格式為:STR條件 源寄存器,<存儲(chǔ)器地址> STR指令是字存儲(chǔ)指令,用于從源寄存器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。該指令在程序設(shè)計(jì)中比較常用,且尋址方式靈活多樣,使用方式
13、可參考指令LDR。指令示例:STRR3,R1,8;將R3中的字?jǐn)?shù)據(jù)寫(xiě)入以R1為地址的存儲(chǔ)器中,并將新地址R18寫(xiě)入R1。STRR3,R1,8;將R3中的字?jǐn)?shù)據(jù)寫(xiě)入以R18為地址的存儲(chǔ)器中。(5)STRB指令格式為: STR條件B 源寄存器,<存儲(chǔ)器地址> STRB指令是無(wú)符號(hào)字節(jié)存儲(chǔ)指令,用于從源寄存器中將一個(gè)8位的字節(jié)數(shù)據(jù)傳送到存儲(chǔ)器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。指令示例:STRB R3,R1 ;將寄存器R3中的字節(jié)數(shù)據(jù)寫(xiě)入以R1為地址的存儲(chǔ)器中。STRB R3,R1,8;將寄存器R3中的字節(jié)數(shù)據(jù)寫(xiě)入以R18為地址的存儲(chǔ)器中。(6)STRH指令格式為: STR條件H 源寄存
14、器,<存儲(chǔ)器地址> STRH指令是無(wú)符號(hào)半字存儲(chǔ)指令,用于從源寄存器中將一個(gè)16位的半字?jǐn)?shù)據(jù)傳送到存儲(chǔ)器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低16位。指令示例:STRH R3,R1 ;將寄存器R3中的半字?jǐn)?shù)據(jù)寫(xiě)入以R1為地址的存儲(chǔ)器中。STRH R3,R1,8 ;將寄存器R3中的半字?jǐn)?shù)據(jù)寫(xiě)入以R18為地址的存儲(chǔ)器中。2批量數(shù)據(jù)加載/存儲(chǔ)指令 ARM微處理器所支持批量數(shù)據(jù)加載/存儲(chǔ)指令可以一次在一片連續(xù)的存儲(chǔ)器單元和多個(gè)寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的存儲(chǔ)器中的數(shù)據(jù)傳送到多個(gè)寄存器,批量數(shù)據(jù)存儲(chǔ)指令則完成相反的操作。l 數(shù)據(jù)處理指令只能對(duì)寄存器的內(nèi)容進(jìn)行操作,不允許對(duì)存儲(chǔ)器中
15、的數(shù)據(jù)進(jìn)行操作,也不允許指令直接使用存儲(chǔ)器的數(shù)據(jù)或在寄存器與存儲(chǔ)器之間傳送數(shù)據(jù)。l 數(shù)據(jù)處理指令可分為3大類(lèi):l 數(shù)據(jù)傳送指令l 算術(shù)邏輯運(yùn)算指令l 比較指令l 數(shù)據(jù)傳送指令用于在寄存器和寄存器之間進(jìn)行數(shù)據(jù)的雙向傳輸。l 算術(shù)邏輯運(yùn)算指令完成常用的算術(shù)與邏輯的運(yùn)算,該類(lèi)指令不但將運(yùn)算結(jié)果保存在目的寄存器中,同時(shí)更新CPSR中的相應(yīng)條件標(biāo)志位。l 比較指令是完成對(duì)指定的兩個(gè)寄存器(或1個(gè)寄存器,1個(gè)立即數(shù))進(jìn)行比較,不保存運(yùn)算結(jié)果,只影響CPSR中相應(yīng)的條件標(biāo)志位。1.數(shù)據(jù)傳送指令MOV和MVN(1)MOV指令 格式為: MOV條件S 目的寄存器,源操作數(shù) MOV指令可完成在寄存器之間或寄存器與
16、第2操作數(shù)之間進(jìn)行數(shù)據(jù)傳送。 其中S選項(xiàng)決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒(méi)有S時(shí)指令不更新CPSR中條件標(biāo)志位的值。指令示例:MOVR4,R5;將寄存器R5的內(nèi)容傳送到寄存器R4MOVPC,R14;將寄存器R14的內(nèi)容傳送到PC,常用于子程序返回MOVNE R4,R5,LSL2;當(dāng)Z=0時(shí),將寄存器R5的內(nèi)容邏輯左移2位后傳送到R4(2)MVN指令格式為: MVN條件S 目的寄存器,源操作數(shù) MVN指令可完成在寄存器之間或寄存器與第2操作數(shù)之間進(jìn)行數(shù)據(jù)非傳送。與MOV指令不同之處是在傳送之前按位被取反了,即把一個(gè)被取反的值傳送到目的寄存器中。 其中S決定指令的操作是否影響CP
17、SR中條件標(biāo)志位的值,當(dāng)沒(méi)有S時(shí)指令不更新CPSR中條件標(biāo)志位的值。指令示例:MVN R0,1;將立即數(shù)1取反傳送到寄存器R0中 MVN R1,R2;將R2取反,結(jié)果存到R12.算術(shù)邏輯運(yùn)算指令(1)ADD指令格式為: ADD條件S 目的寄存器,操作數(shù)1,操作數(shù)2 ADD指令是加法指令,用于把兩個(gè)操作數(shù)相加,并將結(jié)果存放到目的寄存器中。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù) 。指令示例:ADDS R0,R3,R4 ; R0 = R3 + R4,設(shè)置標(biāo)志位ADDS R0,R3,#10 ; R0 = R3 + 10ADD R0,R2,R3,LSL#2
18、 ; R0 = R2 + R3×4(2)ADC指令格式為: ADC條件S 目的寄存器,操作數(shù)1,操作數(shù)2ADC指令是帶進(jìn)位加法指令,用于把兩個(gè)操作數(shù)相加,再加上CPSR中的C條件標(biāo)志位的值,并將結(jié)果存放到目的寄存器中。它使用一個(gè)進(jìn)位標(biāo)志位,這樣就可以做比32位大的數(shù)的加法,注意不要忘記設(shè)置S后綴來(lái)更改進(jìn)位標(biāo)志。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。以下指令序列實(shí)現(xiàn)64位二進(jìn)制數(shù)的加法:R2、R1= R2、R1+ R4、R3ADDS R1,R1,R3 ;R1= R1+ R3ADC R2,R2,R4 ;R2= R2+ R4+C(3)SUB
19、指令格式為: SUB條件S 目的寄存器,操作數(shù)1,操作數(shù)2 SUB指令是減法指令,用于把操作數(shù)1減去操作數(shù)2,并將結(jié)果存放到目的寄存器中。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。l 當(dāng)指令包含后綴”S”時(shí),如果減法運(yùn)算有借位,則C=0,否者C=1。指令示例:SUBS R0,R3,R4 ; R0 = R3 R4,設(shè)置標(biāo)志位SUB R0,R1,#0x10 ; R0 = R1 - 0x 10SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 << 1)(4) SBC指令格式為: S
20、BC條件S 目的寄存器,操作數(shù)1,操作數(shù)2 SBC指令是帶借位減法指令,用于把操作數(shù)1減去操作數(shù)2,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。該指令使用進(jìn)位標(biāo)志來(lái)表示借位,這樣就可以做大于32位的減法,注意不要忘記設(shè)置S后綴來(lái)更改進(jìn)位標(biāo)志。指令示例:SBCR2,R2,R4 ; R2 = R2 R4-!C(5)RSB指令格式為: RSB條件S 目的寄存器,操作數(shù)1,操作數(shù)2 RSB指令是反減法指令,用于把操作數(shù)2減去操作數(shù)1,并將結(jié)果存放到目的
21、寄存器中。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。指令示例:RSB R0,R1,R2 ; R0 = R2 R1RSB R0,R1,#0x10 ; R0 = 0x10 R1RSB R0,R2,R3,LSL#1 ; R0 =R3×2 - R2(6)RSC指令格式為:RSC條件S 目的寄存器,操作數(shù)1,操作數(shù)2RSC指令是帶借位反減法指令,用于把操作數(shù)2減去操作數(shù)1,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。該指令可用于有符號(hào)數(shù)或無(wú)符號(hào)數(shù)的減法運(yùn)算。l 操作數(shù)1應(yīng)是一個(gè)寄存器。
22、l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。指令示例:RSCS R6,R4,R3, LSL #1 ; R6 = R3×2 R4+C -1同時(shí)刷新標(biāo)志位(7)AND指令格式為:AND條件S 目的寄存器,操作數(shù)1,操作數(shù)2AND指令是邏輯與指令,用于在兩個(gè)操作數(shù)上進(jìn)行邏輯與運(yùn)算,并把結(jié)果放置到目的寄存器中。該指令常用于屏蔽操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。指令示例:AND R5,R6,R8 ; R5=R6R8AND R2,R2,3 ; 該指令保持R2的0、1位,其余位清零。(8)ORR指令 格式為:
23、ORR條件S 目的寄存器,操作數(shù)1,操作數(shù)2 ORR指令是邏輯或指令,用于在兩個(gè)操作數(shù)上進(jìn)行邏輯或運(yùn)算,并把結(jié)果放置到目的寄存器中。該指令常用于設(shè)置操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。指令示例:ORR R5,R6,R8 ; R5=R6R8ORR R2,R2,3 ; 該指令設(shè)置R2的0、1位,其余位保持不變。(9)EOR指令格式為: EOR條件S 目的寄存器,操作數(shù)1,操作數(shù)2 EOR指令是邏輯異或指令,用于在兩個(gè)操作數(shù)上進(jìn)行邏輯異或運(yùn)算,并把結(jié)果放置到目的寄存器中。該指令常用于反轉(zhuǎn)操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個(gè)寄存器
24、。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。 指令示例:EOR R5,R6,R8 ; R5=R6+R8EOR R2,R2,3 ; 該指令反轉(zhuǎn)R2的0、1位,其余位保持不變。(10)BIC指令格式為: BIC條件S 目的寄存器,操作數(shù)1,操作數(shù)2 BIC指令是位清除指令,用于清除操作數(shù)1的某些位(操作數(shù)1與操作數(shù)2的反碼按位做與運(yùn)算),并把結(jié)果放置到目的寄存器中。l 操作數(shù)1應(yīng)是一個(gè)寄存器。l 操作數(shù)2可以是一個(gè)寄存器,被移位的寄存器,或一個(gè)立即數(shù)。指令示例:BIC R0,R2,3 ;清除 R2 中的位 0、1,其余的位保持不變。BICS R0,R2,0x80000000 ;清
25、除 R2 中的位 31,其余的位保持不變,刷新標(biāo)志位。(11)MUL指令格式為: MUL條件S目的寄存器,操作數(shù)1,操作數(shù)2 MUL指令是乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果放置到目的寄存器中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位(不會(huì)影響V)。其中,操作數(shù)1和操作數(shù)2均為32位的有符號(hào)數(shù)或無(wú)符號(hào)數(shù)。指令示例:MULR0,R4,R5;R0 = R4 × R5MULS R0,R4,R5;R0 = R4 × R5,同時(shí)設(shè)置條件標(biāo)志位(12)MLA指令格式為: MLA條件S 目的寄存器,操作數(shù)1,操作數(shù)2,操作數(shù)3 MLA指令是乘加指令,完成將操作
26、數(shù)1與操作數(shù)2的乘法運(yùn)算,再將乘積加上操作數(shù)3,并把結(jié)果放置到目的寄存器中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位(不會(huì)影響V)。 其中,操作數(shù)1和操作數(shù)2均為32位的有符號(hào)數(shù)或無(wú)符號(hào)數(shù)。指令示例:MLAR0,R1,R2,R3;R0 = R1 × R2 + R3MLASR0,R1,R2,R3;R0 = R1 × R2 + R3,同時(shí)設(shè)置CPSR中的相關(guān)條件標(biāo)志位(13)SMULL指令格式為: SMULL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 SMULL指令是帶符號(hào)長(zhǎng)乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位放置到目
27、的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。 其中,操作數(shù)1和操作數(shù)2均為32位的有符號(hào)數(shù)。指令示例:SMULL R1,R2,R3,R4 ;R1 = (R3 × R4)的低32位 ;R2 = (R3 × R4)的高32位 (14)SMLAL指令 格式為: SMLAL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 SMLAL指令是長(zhǎng)乘加指令,完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結(jié)果的高32位同目的寄存器High中的值
28、相加后又放置到目的寄存器High中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的有符號(hào)數(shù)。l 對(duì)于目的寄存器Low,在指令執(zhí)行前存放64位加數(shù)的低32位,指令執(zhí)行后存放結(jié)果的低32位。l 對(duì)于目的寄存器High,在指令執(zhí)行前存放64位加數(shù)的高32位,指令執(zhí)行后存放結(jié)果的高32位。指令示例: SMLALR1,R2,R3,R4 ;R1 = (R3 × R4)的低32位 R1 ;R2 = (R3× R4)的高32位 R2(15)UMULL指令 格式為: UMULL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 UMUL
29、L指令是無(wú)符號(hào)乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位放置到目的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。 其中,操作數(shù)1和操作數(shù)2均為32位的無(wú)符號(hào)數(shù)。指令示例:UMULL R1,R2,R3,R4;R1 = (R3 × R4)的低32位;R2 = (R3 × R4)的高32位(16)UMLAL指令格式為: UMLAL條件S目的寄存器Low,目的寄存器低High,操作數(shù)1,操作數(shù)2 UMLAL指令是無(wú)符號(hào)長(zhǎng)乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運(yùn)算,并把結(jié)果的低32位同目的寄存器L
30、ow中的值相加后又放置到目的寄存器Low中,結(jié)果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時(shí)可以根據(jù)運(yùn)算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的無(wú)符號(hào)數(shù)。l 對(duì)于目的寄存器Low,在指令執(zhí)行前存放64位加數(shù)的低32位,指令執(zhí)行后存放結(jié)果的低32位。l 對(duì)于目的寄存器High,在指令執(zhí)行前存放64位加數(shù)的高32位,指令執(zhí)行后存放結(jié)果的高32位。指令示例:UMLAL R1,R2,R3,R4 ;R1 = (R3× R4) 的低32位 R1 ;R2 = (R3× R4) 的高32位 R2(1)CMP指令格式為:CMP條
31、件 操作數(shù)1,操作數(shù)2 CMP指令是比較指令,該指令是做一次減法運(yùn)算,但不存儲(chǔ)結(jié)果,只是刷新條件標(biāo)志位,根據(jù)條件標(biāo)志位判斷操作數(shù)的大小。 對(duì)條件位的影響是:結(jié)果為正數(shù)則N=0,結(jié)果為負(fù)數(shù)則N=1;結(jié)果為0則Z=1,結(jié)果不為0則Z=0;如果產(chǎn)生借位則C=0,沒(méi)有借位則C=1;結(jié)果是符號(hào)溢出則V=1,否則V=0。指令示例:CMPR1,#0x30;比較R1和0x30ADDCS R5,R5,#0x20;如果C=1,則R5=R5+0x20ADDCC R5,R5,#0x10;如果C=0,則R5=R5+0x10(2)CMN指令格式為: CMN條件 操作數(shù)1,操作數(shù)2 CMN指令是比較非指令,也是做一次減法運(yùn)
32、算,用第1操作數(shù)減去第2操作數(shù)的非值,結(jié)果不保存,只是刷新條件標(biāo)志位,對(duì)條件標(biāo)志位的影響和比較指令CMP相同。指令示例:CMNR1,#0x00;比較R1和0xFFFFFFFFADDCS R5,R5,#0x20;如果C=1,則R5=R5+0x20ADDCC R5,R5,#0x10;如果C=0,則R5=R5+0x10(3)TST指令格式為: TST條件 操作數(shù)1,操作數(shù)2 TST指令是位測(cè)試指令,用于把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的與運(yùn)算,并根據(jù)運(yùn)算結(jié)果更新CPSR中條件標(biāo)志位的值。指令示例:TSTR2,0x01;將寄存器R1的值與立即數(shù) 0x01按位與,并根據(jù)結(jié)果設(shè)置CP
33、SR的標(biāo)志位,用來(lái)判斷R2中最低位是否為0。第四章 uCLinux是專(zhuān)門(mén)針對(duì)沒(méi)有MMU的處理器而設(shè)計(jì)的,即uCLinux無(wú)法使用處理器的虛擬內(nèi)存管理技術(shù)。 uCLinux采用實(shí)存儲(chǔ)器管理策略,通過(guò)地址總線對(duì)物理內(nèi)存進(jìn)行直接訪問(wèn)。 RT-Linux開(kāi)發(fā)者并沒(méi)有針對(duì)實(shí)時(shí)操作系統(tǒng)的特性而重寫(xiě)Linux的內(nèi)核,而是通過(guò)在Linux內(nèi)核與硬件中斷之間增加一個(gè)精巧的可搶先的實(shí)時(shí)內(nèi)核,把標(biāo)準(zhǔn)的Linux內(nèi)核作為實(shí)時(shí)內(nèi)核的一個(gè)進(jìn)程與用戶進(jìn)程一起調(diào)度。內(nèi)存管理和MMU 存儲(chǔ)管理包含: 地址映射 內(nèi)存空間的分配 地址訪問(wèn)的限制(即保護(hù)機(jī)制) I/O地址的映射 代碼段、數(shù)據(jù)段、堆棧段空間的分配。 MMU,即內(nèi)存管理
34、單元,其主要作用是兩個(gè)方面:一是地址映射;二是對(duì)地址訪問(wèn)的保護(hù)和限制。進(jìn)程和進(jìn)程管理 進(jìn)程是一個(gè)運(yùn)行程序并為其提供執(zhí)行環(huán)境的實(shí)體,它包括一個(gè)地址空間和至少一個(gè)控制點(diǎn),進(jìn)程在這個(gè)地址空間上執(zhí)行單一指令序列。 進(jìn)程調(diào)度主要是協(xié)調(diào)進(jìn)程對(duì)計(jì)算機(jī)系統(tǒng)內(nèi)資源(如CPU 、內(nèi)存、I/O設(shè)備)的爭(zhēng)奪使用ü 搶占式調(diào)度ü 非搶占式調(diào)度RT-Linux有兩種中斷:硬中斷和軟中斷 Linux進(jìn)程的調(diào)度 分時(shí)調(diào)度策略(SCHED_OTHER) 先到先服務(wù)的實(shí)時(shí)調(diào)度策略(SCHED_FIFO) 時(shí)間片輪轉(zhuǎn)的實(shí)時(shí)調(diào)度策略(SCHED_RR) 文件系統(tǒng)定義:包含在磁盤(pán)驅(qū)動(dòng)器或者磁盤(pán)分區(qū)的目錄結(jié)構(gòu),整個(gè)磁
35、盤(pán)空間可以給一個(gè)或者多個(gè)文件系統(tǒng)使用。第五章Boot Loader基本概念初始化處理器以及外設(shè)的硬件資源,配置SDRAM控制器,為主程序提供運(yùn)行環(huán)境 串口,提供交互終端 網(wǎng)絡(luò),傳輸鏡像文件 其他I/O設(shè)備 執(zhí)行系統(tǒng)自檢,報(bào)告檢測(cè)結(jié)果 引導(dǎo)操作系統(tǒng) 根據(jù)系統(tǒng)命令燒寫(xiě)鏡像文件Boot Loader的操作模式 啟動(dòng)加載模式: 也稱(chēng)為“自主”模式,從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個(gè)過(guò)程并沒(méi)有用戶的介入 下載模式: 目標(biāo)機(jī)上的Boot Loader將通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等Boot Loader與主機(jī)之間的通信設(shè)備
36、及協(xié)議 目標(biāo)機(jī)上的Boot Loader通過(guò)串口與主機(jī)之間進(jìn)行文件傳輸 xmodem ymodem zmodem 以太網(wǎng)連協(xié)議 TFTPBoot Loader的典型結(jié)構(gòu) Boot Loader 的階段1通常包括以下步驟:1. 硬件設(shè)備初始化。2. 為加載Boot Loader的階段2準(zhǔn)備RAM空間。3. 拷貝Boot Loader的階段2到RAM空間中。4. 設(shè)置好堆棧。5. 跳轉(zhuǎn)到階段2的C入口點(diǎn)。 Boot Loader的階段2通常包括以下步驟:1. 初始化本階段要使用到的硬件設(shè)備。2. 檢測(cè)系統(tǒng)內(nèi)存映射(memory map)。3. 將kernel映像和根文件系統(tǒng)映像從Flash讀到RA
37、M空間中。 4. 為內(nèi)核設(shè)置啟動(dòng)參數(shù)。5. 調(diào)用內(nèi)核。第六章 Linux版本號(hào)格式 主版本號(hào).次版本號(hào).修正號(hào) 次版本號(hào)為偶數(shù)時(shí)表示是穩(wěn)定版本,如:2.2.5為奇數(shù)時(shí)表示測(cè)試版本 中斷是一個(gè)流程,一般來(lái)說(shuō),它要經(jīng)過(guò)三個(gè)環(huán)節(jié): 中斷響應(yīng) 中斷處理 中斷返回第七章普通桌面操作系統(tǒng)的文件系統(tǒng) 嵌入式操作系統(tǒng)的文件系統(tǒng)的設(shè)計(jì)目標(biāo) (1)使用簡(jiǎn)單方便 (2)安全可靠 (3)實(shí)時(shí)響應(yīng) (4)接口標(biāo)注的開(kāi)放性和可移植性 (5)可伸縮性和可配置性 (6)開(kāi)放的體系結(jié)構(gòu) (7)資源有效性 (8)功能完整性 (9)熱插拔 (10)支持多種文件類(lèi)型 大部分操作系統(tǒng)都是由文件管理器來(lái)使用設(shè)備API,而對(duì)上層用戶空間的
38、應(yīng)用程序提供文件API 在特殊的環(huán)境下才允許用戶通過(guò)設(shè)備API訪問(wèn)硬件設(shè)備嵌入式Linux中三種常用的塊驅(qū)動(dòng)程序 (1)Blkmem驅(qū)動(dòng)層 (2)RamDisk驅(qū)動(dòng)層 (3)MTD驅(qū)動(dòng)層根文件系統(tǒng)第八章Linux驅(qū)動(dòng)程序簡(jiǎn)介 設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口 設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),在應(yīng)用程序看來(lái),硬件設(shè)備只是一個(gè)設(shè)備文件, 應(yīng)用程序可以像操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作設(shè)備驅(qū)動(dòng)程序是內(nèi)核的一部分,它完成以下的功能: (1)對(duì)設(shè)備的初始化和釋放。 (2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)到內(nèi)核。 (3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)
39、。這需要在用戶空間,內(nèi)核空間,總線以及外設(shè)之間傳輸數(shù)據(jù)。 (4)檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤。 設(shè)備的分類(lèi) 字符設(shè)備 無(wú)需緩沖直接讀寫(xiě)的設(shè)備,如系統(tǒng)的串口設(shè)備/dev/cua0和/dev/cua1 塊設(shè)備 以塊為單位進(jìn)行讀寫(xiě),典型的塊大小為512或1024字節(jié);塊設(shè)備的存取是通過(guò)buffer、cache來(lái)進(jìn)行并且可以隨機(jī)訪問(wèn),即不管塊位于設(shè)備中何處都可以對(duì)其進(jìn)行讀寫(xiě) 網(wǎng)絡(luò)設(shè)備 通過(guò)BSD套接口訪問(wèn) 設(shè)備文件 Linux抽象了對(duì)硬件的處理,所有的硬件設(shè)備都可以作為普通文件一樣來(lái)看待:它們可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來(lái)完成打開(kāi)、關(guān)閉、讀寫(xiě)和I/O控制操作,而驅(qū)動(dòng)程序的主要任務(wù)也就是要實(shí)
40、現(xiàn)這些系統(tǒng)調(diào)用函數(shù) Linux為文件和設(shè)備提供了一致的用戶接口。對(duì)用戶來(lái)說(shuō),設(shè)備文件與普通文件并無(wú)區(qū)別 主設(shè)備號(hào)和次設(shè)備號(hào) 主設(shè)備號(hào) 標(biāo)識(shí)該設(shè)備的種類(lèi),也標(biāo)識(shí)了該設(shè)備所使用的驅(qū)動(dòng)程序 次設(shè)備號(hào) 標(biāo)識(shí)使用同一設(shè)備驅(qū)動(dòng)程序的不同硬件設(shè)備 已經(jīng)注冊(cè)的硬件設(shè)備的主設(shè)備號(hào)可以從/proc/devices文件中得到 使用mknod命令可以創(chuàng)建指定類(lèi)型的設(shè)備文件,并為其分配主次設(shè)備號(hào)。 # mknod /dev/lp0 c 6 0 Linux設(shè)備驅(qū)動(dòng)程序的特點(diǎn) (1)內(nèi)核代碼 (2)內(nèi)核接口 (3)內(nèi)核機(jī)制與服務(wù) (4)可加載 (5)可配置 (6)動(dòng)態(tài)性 Linux的設(shè)備驅(qū)動(dòng)程序與外界的接口可以分成三部分:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ī)動(dòng)車(chē)借款合同書(shū)
- 公司品牌服務(wù)合同
- 工業(yè)園物業(yè)委托管理合同
- 口罩機(jī)居間服務(wù)協(xié)議
- 環(huán)境保護(hù)工程設(shè)備供應(yīng)協(xié)議
- 關(guān)于個(gè)人借款的合同5篇
- 汽車(chē)銷(xiāo)售入股合同范本
- 白糖批發(fā)銷(xiāo)售合同范本
- 專(zhuān)業(yè)咨詢服務(wù)產(chǎn)業(yè)分析報(bào)告
- 離子交換樹(shù)脂戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 2025年春季學(xué)期教導(dǎo)處工作計(jì)劃及安排表
- DL-T5002-2021地區(qū)電網(wǎng)調(diào)度自動(dòng)化設(shè)計(jì)規(guī)程
- 2024年個(gè)人信用報(bào)告(個(gè)人簡(jiǎn)版)樣本(帶水印-可編輯)
- 16J914-1 公用建筑衛(wèi)生間
- 第二章政府審計(jì)組織與審計(jì)法律規(guī)范
- 楚才辦公室裝修設(shè)計(jì)方案20140315
- 人教版八年級(jí)(上冊(cè))物理習(xí)題全集(附答案)
- 電影院影務(wù)崗位工作流程
- 衛(wèi)生責(zé)任區(qū)域劃分表
- 《感染性腹瀉》PPT課件.ppt
- 計(jì)數(shù)的基本原理說(shuō)課
評(píng)論
0/150
提交評(píng)論