嵌入式系統(tǒng)原理與設(shè)計重點總結(jié)_第1頁
嵌入式系統(tǒng)原理與設(shè)計重點總結(jié)_第2頁
嵌入式系統(tǒng)原理與設(shè)計重點總結(jié)_第3頁
嵌入式系統(tǒng)原理與設(shè)計重點總結(jié)_第4頁
嵌入式系統(tǒng)原理與設(shè)計重點總結(jié)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一章1.嵌入式系統(tǒng)定義嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機(jī)技術(shù)為基礎(chǔ),采用可剪裁軟硬件,適用于對功能、可靠性、成本、體積、功耗等有嚴(yán)格要求的專用計算機(jī)系統(tǒng)。 嵌入式微處理器 外圍硬件設(shè)備 嵌入式操作系統(tǒng) 應(yīng)用程序 嵌入式系統(tǒng)體系結(jié)構(gòu) 嵌入式處理器類型 嵌入式微處理器(Embedded Microprocessor Unit,EMPU) 由通用微處理器裁剪后發(fā)展而來 386EX,PowerPC,MIPS,ARM 嵌入式微控制器(Microcontroller Unit,MCU) 在一塊芯片上集成cpu、存儲器及其他部件 單片機(jī) 嵌入式DSP處理器(Embedded Digital Signal

2、Processor,EDSP) 嵌入式片上系統(tǒng)(System On Chip)第二章ARM主要采用32位指令集, Thumb 16位指令集 ARM9處理器架構(gòu) ARM9處理器系列有兩個分支 基于v4版本的ARM9,典型的有ARM9TDMI和ARM922T 基于v5TE或v5TEJ架構(gòu)的ARM9E,典型處理器有ARM9EJ-S和ARM926EJ-S等 后面關(guān)于ARM9的介紹主要也是圍繞ARM9E系列 狀態(tài)寄存器 1個當(dāng)前程序狀態(tài)寄存器(CPSR)和5個備份狀態(tài)寄存器(SPSR)狀態(tài)寄存器結(jié)構(gòu)SPSR在處理器進(jìn)入異常模式時用來保存CPSR寄存器內(nèi)容,當(dāng)從異常退出時,用SPSR恢復(fù)CPSR的值流水線

3、技術(shù)和哈佛體系結(jié)構(gòu) 馮諾依曼體系將數(shù)據(jù)和指令全部存儲在同一個存儲器中 哈佛體系中,指令存儲和數(shù)據(jù)存儲是分開的,指令的存取和數(shù)據(jù)的存取通過不同的數(shù)據(jù)總線進(jìn)行內(nèi)存管理單元MMU作用 CPU產(chǎn)生的虛擬地址被先送到MMU中,通過一定的映射,轉(zhuǎn)換為物理地址,然后進(jìn)行相應(yīng)的讀寫操作 有了MMU,才能使用虛擬內(nèi)存第三章1.立即尋址也叫立即數(shù)尋址,這是一種特殊的尋址方式,操作數(shù)沒有存儲在寄存器或存儲器中,而是包含在指令的操作碼中,只要取出指令也就取到了操作數(shù)。這個操作數(shù)被稱為立即數(shù),對應(yīng)的尋址方式也就叫做立即尋址。例如指令: MOV R0, #0xFF000 ;將立即數(shù)0xFF000裝入R0寄存器 ADD R

4、1, R1,0x7f ; R1R10x7f 在以上兩條指令中,第二個源操作數(shù)即為立即數(shù),要求以“”為前綴,對于以十六進(jìn)制表示的立即數(shù),還要求在“”后加上“0x”。2.寄存器尋址就是利用寄存器中的內(nèi)容作為操作數(shù),寄存器本身就是操作數(shù)地址。這種尋址方式是各類微處理器經(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ù)本身存放在存儲器中。例如指令 : LDRR1,R2;R1R2 STRR1,R

5、2;R2R1 第一條指令將以R2中的內(nèi)容為地址,將該地址中的數(shù)據(jù)傳送到R1中。 第二條指令將R1中的內(nèi)容傳送到以R2中的內(nèi)容為地址的存儲器中。4.變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)的內(nèi)容與指令中給出的地址偏移量相加,從而得到一個操作數(shù)的有效地址。變址尋址方式常用于訪問某基地址附近的地址單元。例如指令: LDR R0,R1,8 ;R0R18 LDR R0,R1,8! ;R0R18,R1R18 LDR R0,R1,2 ;R0R1,R1R12 LDR R0,R1,R2 ;R0R1R25.寄存器移位尋址是ARM指令集獨有的尋址方式,操作數(shù)由寄存器的數(shù)值進(jìn)行相應(yīng)移位而得到;移位的方式在指

6、令中以助記符的形式給出,而移位的位數(shù)可用立即數(shù)或寄存器尋址方式表示。6.多寄存器尋址方式,一條指令可以完成多個寄存器值的傳送。這種尋址方式可以一次對多個寄存器尋址,多個寄存器由小到大排列,最多可傳送16個寄存器。 例如: LDMIA R1!,R2-R4,R5 ;R2R1 ;R3R14 ;R4R18 ;R5R112 該指令的后綴IA表示在每次執(zhí)行完加載/存儲操作后,R1按字長度增加,因此, 指令可將連續(xù)存儲單元的值傳送到R2R5。7.堆棧尋址:堆棧是一種數(shù)據(jù)結(jié)構(gòu),按先進(jìn)后出(First In Last Out,F(xiàn)ILO)的方式工作,使用一個稱作堆棧指針的專用寄存器指示當(dāng)前的操作位置,堆棧指針總是

7、指向棧頂。l 當(dāng)堆棧指針指向最后壓入堆棧的數(shù)據(jù)時,稱為滿堆棧(Full Stack);而當(dāng)堆棧指針指向下一個將要放入數(shù)據(jù)的空位置時,稱為空堆棧(Empty Stack)。l 同時,根據(jù)堆棧的生成方式,又可以分為遞增堆棧(Ascending Stack)和遞減堆棧(Decending Stack),當(dāng)堆棧由低地址向高地址生成時,稱為遞增堆棧,當(dāng)堆棧由高地址向低地址生成時,稱為遞減堆棧。ARM微處理器支持這四種類型的堆棧工作方式,即:l 滿遞增方式FA(Full Ascending):堆棧指針指向最后入棧的數(shù)據(jù)位置,且由低地址向高地址生成。l 滿遞減方式FD(Full Decending):堆棧指

8、針指向最后入棧的數(shù)據(jù)位置,且由高地址向低地址生成。l 空遞增方式EA(Empty Ascending):堆棧指針指向下一個入棧數(shù)據(jù)的空位置,且由低地址向高地址生成。l 空遞減方式ED(Empty Decending):堆棧指針指向下一個入棧數(shù)據(jù)的空位置,且由高地址向低地址生成。8.相對尋址:與基址變址尋址方式相類似,相對尋址以程序計數(shù)器PC的當(dāng)前值為基地址,指令中的地址標(biāo)號作為偏移量,將兩者相加之后得到操作數(shù)的有效地址。l 以下程序段完成子程序的調(diào)用和返回,跳轉(zhuǎn)指令BL采用了相對尋址方式: BL NEXT;跳轉(zhuǎn)到子程序NEXT處執(zhí)行 NEXT MOVPC,LR;從子程序返回1單一數(shù)據(jù)加載/存儲

9、指令(1)LDR指令格式為:LDR條件 目的寄存器, LDR指令是字加載指令,用于從存儲器中將一個32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。l 指令示例:LDR R3,R4 ;將存儲器地址為R4的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2 ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,8 ;將存儲器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R3。LDR R3,R1,R2! ;將存儲器地址為R1+R2的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2寫入R1。LDR R3,R1,8 ! ;將存儲器地址為R1+8的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R18寫入R1。應(yīng)用示例:LDRR3, R4 ;將

10、R4指向地址的字?jǐn)?shù)據(jù)存入R30x55R3R40x400000000x123456780x40000000存儲器地址LDR R3,R1,R2;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R2寫入R1。LDR R3,R1,R2,LSL3??;將存儲器地址為R1R28的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R28寫入R1。LDR R3,R1,R2,LSL3;將存儲器地址為R1的字?jǐn)?shù)據(jù)讀入寄存器R3,并將新地址R1R28寫入R1。注:R15不可以作為偏移寄存器使用。(2)LDRB指令 格式為: LDR條件B 目的寄存器, LDRB指令是字節(jié)加載指令,用于從存儲器中將一個8位的字節(jié)數(shù)據(jù)傳送到目的

11、寄存器中,同時將寄存器的高24位清零。 該指令通常用于從存儲器中讀取8位的字節(jié)數(shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。指令示例:LDRB R3,R1 ;將存儲器地址為R1的字節(jié)數(shù)據(jù)讀入寄存器R0,并將R3的高24位清零。LDRB R3,R1,8 ;將存儲器地址為R18的字節(jié)數(shù)據(jù)讀入寄存器R3,并將R3的高24位清零。(3)LDRH指令格式為: LDR條件H 目的寄存器, LDRH指令是無符號半字加載指令,用于從存儲器中將一個16位的半字?jǐn)?shù)據(jù)傳送到目的寄存器中,同時將寄存器的高16位清零。該指令通常用于從存儲器中讀取16位的半字?jǐn)?shù)據(jù)到通用寄存器,然后對數(shù)據(jù)進(jìn)行處理。指令示例:LDRH R3,R1;

12、將存儲器地址為R1的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。LDRH R3,R1,8 ;將存儲器地址為R18的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。LDRH R3,R1,R2 ;將存儲器地址為R1R2的半字?jǐn)?shù)據(jù)讀入寄存器R3,并將R3的高16位清零。(4)STR指令格式為:STR條件 源寄存器, STR指令是字存儲指令,用于從源寄存器中將一個32位的字?jǐn)?shù)據(jù)傳送到存儲器中。該指令在程序設(shè)計中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。指令示例:STRR3,R1,8;將R3中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲器中,并將新地址R18寫入R1。STRR3,R1,8;將R3中的

13、字?jǐn)?shù)據(jù)寫入以R18為地址的存儲器中。(5)STRB指令格式為: STR條件B 源寄存器, STRB指令是無符號字節(jié)存儲指令,用于從源寄存器中將一個8位的字節(jié)數(shù)據(jù)傳送到存儲器中。該字節(jié)數(shù)據(jù)為源寄存器中的低8位。指令示例:STRB R3,R1 ;將寄存器R3中的字節(jié)數(shù)據(jù)寫入以R1為地址的存儲器中。STRB R3,R1,8;將寄存器R3中的字節(jié)數(shù)據(jù)寫入以R18為地址的存儲器中。(6)STRH指令格式為: STR條件H 源寄存器, STRH指令是無符號半字存儲指令,用于從源寄存器中將一個16位的半字?jǐn)?shù)據(jù)傳送到存儲器中。該半字?jǐn)?shù)據(jù)為源寄存器中的低16位。指令示例:STRH R3,R1 ;將寄存器R3中的

14、半字?jǐn)?shù)據(jù)寫入以R1為地址的存儲器中。STRH R3,R1,8 ;將寄存器R3中的半字?jǐn)?shù)據(jù)寫入以R18為地址的存儲器中。2批量數(shù)據(jù)加載/存儲指令 ARM微處理器所支持批量數(shù)據(jù)加載/存儲指令可以一次在一片連續(xù)的存儲器單元和多個寄存器之間傳送數(shù)據(jù),批量加載指令用于將一片連續(xù)的存儲器中的數(shù)據(jù)傳送到多個寄存器,批量數(shù)據(jù)存儲指令則完成相反的操作。l 數(shù)據(jù)處理指令只能對寄存器的內(nèi)容進(jìn)行操作,不允許對存儲器中的數(shù)據(jù)進(jìn)行操作,也不允許指令直接使用存儲器的數(shù)據(jù)或在寄存器與存儲器之間傳送數(shù)據(jù)。l 數(shù)據(jù)處理指令可分為3大類:l 數(shù)據(jù)傳送指令l 算術(shù)邏輯運算指令l 比較指令l 數(shù)據(jù)傳送指令用于在寄存器和寄存器之間進(jìn)行數(shù)

15、據(jù)的雙向傳輸。l 算術(shù)邏輯運算指令完成常用的算術(shù)與邏輯的運算,該類指令不但將運算結(jié)果保存在目的寄存器中,同時更新CPSR中的相應(yīng)條件標(biāo)志位。l 比較指令是完成對指定的兩個寄存器(或1個寄存器,1個立即數(shù))進(jìn)行比較,不保存運算結(jié)果,只影響CPSR中相應(yīng)的條件標(biāo)志位。1.數(shù)據(jù)傳送指令MOV和MVN(1)MOV指令 格式為: MOV條件S 目的寄存器,源操作數(shù) MOV指令可完成在寄存器之間或寄存器與第2操作數(shù)之間進(jìn)行數(shù)據(jù)傳送。 其中S選項決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時指令不更新CPSR中條件標(biāo)志位的值。指令示例:MOVR4,R5;將寄存器R5的內(nèi)容傳送到寄存器R4MOVP

16、C,R14;將寄存器R14的內(nèi)容傳送到PC,常用于子程序返回MOVNE R4,R5,LSL2;當(dāng)Z=0時,將寄存器R5的內(nèi)容邏輯左移2位后傳送到R4(2)MVN指令格式為: MVN條件S 目的寄存器,源操作數(shù) MVN指令可完成在寄存器之間或寄存器與第2操作數(shù)之間進(jìn)行數(shù)據(jù)非傳送。與MOV指令不同之處是在傳送之前按位被取反了,即把一個被取反的值傳送到目的寄存器中。 其中S決定指令的操作是否影響CPSR中條件標(biāo)志位的值,當(dāng)沒有S時指令不更新CPSR中條件標(biāo)志位的值。指令示例:MVN R0,1;將立即數(shù)1取反傳送到寄存器R0中 MVN R1,R2;將R2取反,結(jié)果存到R12.算術(shù)邏輯運算指令(1)AD

17、D指令格式為: ADD條件S 目的寄存器,操作數(shù)1,操作數(shù)2 ADD指令是加法指令,用于把兩個操作數(shù)相加,并將結(jié)果存放到目的寄存器中。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù) 。指令示例:ADDS R0,R3,R4 ; R0 = R3 + R4,設(shè)置標(biāo)志位ADDS R0,R3,#10 ; R0 = R3 + 10ADD R0,R2,R3,LSL#2 ; R0 = R2 + R34(2)ADC指令格式為: ADC條件S 目的寄存器,操作數(shù)1,操作數(shù)2ADC指令是帶進(jìn)位加法指令,用于把兩個操作數(shù)相加,再加上CPSR中的C條件標(biāo)志位的值,并將結(jié)果存放到目

18、的寄存器中。它使用一個進(jìn)位標(biāo)志位,這樣就可以做比32位大的數(shù)的加法,注意不要忘記設(shè)置S后綴來更改進(jìn)位標(biāo)志。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(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指令格式為: SUB條件S 目的寄存器,操作數(shù)1,操作數(shù)2 SUB指令是減法指令,用于把操作數(shù)1減去操作數(shù)2,并將結(jié)果存放到目的寄存器中。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。l 操作數(shù)1應(yīng)是一個寄存器。l 操作

19、數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。l 當(dāng)指令包含后綴”S”時,如果減法運算有借位,則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指令格式為: SBC條件S 目的寄存器,操作數(shù)1,操作數(shù)2 SBC指令是帶借位減法指令,用于把操作數(shù)1減去操作數(shù)2,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。l 操作數(shù)1應(yīng)是一個寄存器

20、。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。該指令使用進(jìn)位標(biāo)志來表示借位,這樣就可以做大于32位的減法,注意不要忘記設(shè)置S后綴來更改進(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é)果存放到目的寄存器中。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。指令示例:RSB R0,R1,R2 ; R0 = R2 R1RSB R0,R1,#0x10 ;

21、 R0 = 0x10 R1RSB R0,R2,R3,LSL#1 ; R0 =R32 - R2(6)RSC指令格式為:RSC條件S 目的寄存器,操作數(shù)1,操作數(shù)2RSC指令是帶借位反減法指令,用于把操作數(shù)2減去操作數(shù)1,再減去CPSR中的C條件標(biāo)志位的反碼,并將結(jié)果存放到目的寄存器中。該指令可用于有符號數(shù)或無符號數(shù)的減法運算。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。指令示例:RSCS R6,R4,R3, LSL #1 ; R6 = R32 R4+C -1同時刷新標(biāo)志位(7)AND指令格式為:AND條件S 目的寄存器,操作數(shù)1,操作數(shù)2AND指令是邏

22、輯與指令,用于在兩個操作數(shù)上進(jìn)行邏輯與運算,并把結(jié)果放置到目的寄存器中。該指令常用于屏蔽操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。指令示例:AND R5,R6,R8 ; R5=R6R8AND R2,R2,3 ; 該指令保持R2的0、1位,其余位清零。(8)ORR指令 格式為: ORR條件S 目的寄存器,操作數(shù)1,操作數(shù)2 ORR指令是邏輯或指令,用于在兩個操作數(shù)上進(jìn)行邏輯或運算,并把結(jié)果放置到目的寄存器中。該指令常用于設(shè)置操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。指令

23、示例:ORR R5,R6,R8 ; R5=R6R8ORR R2,R2,3 ; 該指令設(shè)置R2的0、1位,其余位保持不變。(9)EOR指令格式為: EOR條件S 目的寄存器,操作數(shù)1,操作數(shù)2 EOR指令是邏輯異或指令,用于在兩個操作數(shù)上進(jìn)行邏輯異或運算,并把結(jié)果放置到目的寄存器中。該指令常用于反轉(zhuǎn)操作數(shù)1的某些位。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。 指令示例:EOR R5,R6,R8 ; R5=R6+R8EOR R2,R2,3 ; 該指令反轉(zhuǎn)R2的0、1位,其余位保持不變。(10)BIC指令格式為: BIC條件S 目的寄存器,操作數(shù)1,操作

24、數(shù)2 BIC指令是位清除指令,用于清除操作數(shù)1的某些位(操作數(shù)1與操作數(shù)2的反碼按位做與運算),并把結(jié)果放置到目的寄存器中。l 操作數(shù)1應(yīng)是一個寄存器。l 操作數(shù)2可以是一個寄存器,被移位的寄存器,或一個立即數(shù)。指令示例:BIC R0,R2,3 ;清除 R2 中的位 0、1,其余的位保持不變。BICS R0,R2,0x80000000 ;清除 R2 中的位 31,其余的位保持不變,刷新標(biāo)志位。(11)MUL指令格式為: MUL條件S目的寄存器,操作數(shù)1,操作數(shù)2 MUL指令是乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)

25、志位(不會影響V)。其中,操作數(shù)1和操作數(shù)2均為32位的有符號數(shù)或無符號數(shù)。指令示例:MULR0,R4,R5;R0 = R4 R5MULS R0,R4,R5;R0 = R4 R5,同時設(shè)置條件標(biāo)志位(12)MLA指令格式為: MLA條件S 目的寄存器,操作數(shù)1,操作數(shù)2,操作數(shù)3 MLA指令是乘加指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,再將乘積加上操作數(shù)3,并把結(jié)果放置到目的寄存器中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位(不會影響V)。 其中,操作數(shù)1和操作數(shù)2均為32位的有符號數(shù)或無符號數(shù)。指令示例:MLAR0,R1,R2,R3;R0 = R1 R2 + R3MLASR0,R

26、1,R2,R3;R0 = R1 R2 + R3,同時設(shè)置CPSR中的相關(guān)條件標(biāo)志位(13)SMULL指令格式為: SMULL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 SMULL指令是帶符號長乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果的低32位放置到目的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。 其中,操作數(shù)1和操作數(shù)2均為32位的有符號數(shù)。指令示例:SMULL R1,R2,R3,R4 ;R1 = (R3 R4)的低32位 ;R2 = (R3 R4)的高32位 (14)SMLAL指令 格式為:

27、 SMLAL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 SMLAL指令是長乘加指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結(jié)果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的有符號數(shù)。l 對于目的寄存器Low,在指令執(zhí)行前存放64位加數(shù)的低32位,指令執(zhí)行后存放結(jié)果的低32位。l 對于目的寄存器High,在指令執(zhí)行前存放64位加數(shù)的高32位,指令執(zhí)行后存放結(jié)果的高32位。指令示例: SML

28、ALR1,R2,R3,R4 ;R1 = (R3 R4)的低32位 R1 ;R2 = (R3 R4)的高32位 R2(15)UMULL指令 格式為: UMULL條件S 目的寄存器Low,目的寄存器High,操作數(shù)1,操作數(shù)2 UMULL指令是無符號乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果的低32位放置到目的寄存器Low中,結(jié)果的高32位放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。 其中,操作數(shù)1和操作數(shù)2均為32位的無符號數(shù)。指令示例:UMULL R1,R2,R3,R4;R1 = (R3 R4)的低32位;R2 = (R3 R4)的高32位(16

29、)UMLAL指令格式為: UMLAL條件S目的寄存器Low,目的寄存器低High,操作數(shù)1,操作數(shù)2 UMLAL指令是無符號長乘法指令,完成將操作數(shù)1與操作數(shù)2的乘法運算,并把結(jié)果的低32位同目的寄存器Low中的值相加后又放置到目的寄存器Low中,結(jié)果的高32位同目的寄存器High中的值相加后又放置到目的寄存器High中,同時可以根據(jù)運算結(jié)果設(shè)置CPSR中相應(yīng)的條件標(biāo)志位。其中,操作數(shù)1和操作數(shù)2均為32位的無符號數(shù)。l 對于目的寄存器Low,在指令執(zhí)行前存放64位加數(shù)的低32位,指令執(zhí)行后存放結(jié)果的低32位。l 對于目的寄存器High,在指令執(zhí)行前存放64位加數(shù)的高32位,指令執(zhí)行后存放結(jié)果

30、的高32位。指令示例:UMLAL R1,R2,R3,R4 ;R1 = (R3 R4) 的低32位 R1 ;R2 = (R3 R4) 的高32位 R2(1)CMP指令格式為:CMP條件 操作數(shù)1,操作數(shù)2 CMP指令是比較指令,該指令是做一次減法運算,但不存儲結(jié)果,只是刷新條件標(biāo)志位,根據(jù)條件標(biāo)志位判斷操作數(shù)的大小。 對條件位的影響是:結(jié)果為正數(shù)則N=0,結(jié)果為負(fù)數(shù)則N=1;結(jié)果為0則Z=1,結(jié)果不為0則Z=0;如果產(chǎn)生借位則C=0,沒有借位則C=1;結(jié)果是符號溢出則V=1,否則V=0。指令示例:CMPR1,#0x30;比較R1和0x30ADDCS R5,R5,#0x20;如果C=1,則R5=R

31、5+0x20ADDCC R5,R5,#0x10;如果C=0,則R5=R5+0x10(2)CMN指令格式為: CMN條件 操作數(shù)1,操作數(shù)2 CMN指令是比較非指令,也是做一次減法運算,用第1操作數(shù)減去第2操作數(shù)的非值,結(jié)果不保存,只是刷新條件標(biāo)志位,對條件標(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指令是位測試指令,用于把一個寄存器的內(nèi)容和

32、另一個寄存器的內(nèi)容或立即數(shù)進(jìn)行按位的與運算,并根據(jù)運算結(jié)果更新CPSR中條件標(biāo)志位的值。指令示例:TSTR2,0x01;將寄存器R1的值與立即數(shù) 0x01按位與,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位,用來判斷R2中最低位是否為0。第四章 uCLinux是專門針對沒有MMU的處理器而設(shè)計的,即uCLinux無法使用處理器的虛擬內(nèi)存管理技術(shù)。 uCLinux采用實存儲器管理策略,通過地址總線對物理內(nèi)存進(jìn)行直接訪問。 RT-Linux開發(fā)者并沒有針對實時操作系統(tǒng)的特性而重寫Linux的內(nèi)核,而是通過在Linux內(nèi)核與硬件中斷之間增加一個精巧的可搶先的實時內(nèi)核,把標(biāo)準(zhǔn)的Linux內(nèi)核作為實時內(nèi)核的一個進(jìn)程與

33、用戶進(jìn)程一起調(diào)度。內(nèi)存管理和MMU 存儲管理包含: 地址映射 內(nèi)存空間的分配 地址訪問的限制(即保護(hù)機(jī)制) I/O地址的映射 代碼段、數(shù)據(jù)段、堆棧段空間的分配。 MMU,即內(nèi)存管理單元,其主要作用是兩個方面:一是地址映射;二是對地址訪問的保護(hù)和限制。進(jìn)程和進(jìn)程管理 進(jìn)程是一個運行程序并為其提供執(zhí)行環(huán)境的實體,它包括一個地址空間和至少一個控制點,進(jìn)程在這個地址空間上執(zhí)行單一指令序列。 進(jìn)程調(diào)度主要是協(xié)調(diào)進(jìn)程對計算機(jī)系統(tǒng)內(nèi)資源(如CPU 、內(nèi)存、I/O設(shè)備)的爭奪使用 搶占式調(diào)度 非搶占式調(diào)度RT-Linux有兩種中斷:硬中斷和軟中斷 Linux進(jìn)程的調(diào)度 分時調(diào)度策略(SCHED_OTHER)

34、先到先服務(wù)的實時調(diào)度策略(SCHED_FIFO) 時間片輪轉(zhuǎn)的實時調(diào)度策略(SCHED_RR) 文件系統(tǒng)定義:包含在磁盤驅(qū)動器或者磁盤分區(qū)的目錄結(jié)構(gòu),整個磁盤空間可以給一個或者多個文件系統(tǒng)使用。第五章Boot Loader基本概念初始化處理器以及外設(shè)的硬件資源,配置SDRAM控制器,為主程序提供運行環(huán)境 串口,提供交互終端 網(wǎng)絡(luò),傳輸鏡像文件 其他I/O設(shè)備 執(zhí)行系統(tǒng)自檢,報告檢測結(jié)果 引導(dǎo)操作系統(tǒng) 根據(jù)系統(tǒng)命令燒寫鏡像文件Boot Loader的操作模式 啟動加載模式: 也稱為“自主”模式,從目標(biāo)機(jī)上的某個固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,整個過程并沒有用戶的介入 下載模式: 目標(biāo)

35、機(jī)上的Boot Loader將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)下載文件,比如:下載內(nèi)核映像和根文件系統(tǒng)映像等Boot Loader與主機(jī)之間的通信設(shè)備及協(xié)議 目標(biāo)機(jī)上的Boot Loader通過串口與主機(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入口點。 Boot Loader的階段2通常包括

36、以下步驟:1. 初始化本階段要使用到的硬件設(shè)備。2. 檢測系統(tǒng)內(nèi)存映射(memory map)。3. 將kernel映像和根文件系統(tǒng)映像從Flash讀到RAM空間中。 4. 為內(nèi)核設(shè)置啟動參數(shù)。5. 調(diào)用內(nèi)核。第六章 Linux版本號格式 主版本號.次版本號.修正號 次版本號為偶數(shù)時表示是穩(wěn)定版本,如:2.2.5為奇數(shù)時表示測試版本 中斷是一個流程,一般來說,它要經(jīng)過三個環(huán)節(jié): 中斷響應(yīng) 中斷處理 中斷返回第七章普通桌面操作系統(tǒng)的文件系統(tǒng) 嵌入式操作系統(tǒng)的文件系統(tǒng)的設(shè)計目標(biāo) (1)使用簡單方便 (2)安全可靠 (3)實時響應(yīng) (4)接口標(biāo)注的開放性和可移植性 (5)可伸縮性和可配置性 (6)開

37、放的體系結(jié)構(gòu) (7)資源有效性 (8)功能完整性 (9)熱插拔 (10)支持多種文件類型 大部分操作系統(tǒng)都是由文件管理器來使用設(shè)備API,而對上層用戶空間的應(yīng)用程序提供文件API 在特殊的環(huán)境下才允許用戶通過設(shè)備API訪問硬件設(shè)備嵌入式Linux中三種常用的塊驅(qū)動程序 (1)Blkmem驅(qū)動層 (2)RamDisk驅(qū)動層 (3)MTD驅(qū)動層根文件系統(tǒng)第八章Linux驅(qū)動程序簡介 設(shè)備驅(qū)動程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口 設(shè)備驅(qū)動程序為應(yīng)用程序屏蔽了硬件的細(xì)節(jié),在應(yīng)用程序看來,硬件設(shè)備只是一個設(shè)備文件, 應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作設(shè)備驅(qū)動程序是內(nèi)核的一部分,它完成以下

38、的功能: (1)對設(shè)備的初始化和釋放。 (2)把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)到內(nèi)核。 (3)讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù)。這需要在用戶空間,內(nèi)核空間,總線以及外設(shè)之間傳輸數(shù)據(jù)。 (4)檢測和處理設(shè)備出現(xiàn)的錯誤。 設(shè)備的分類 字符設(shè)備 無需緩沖直接讀寫的設(shè)備,如系統(tǒng)的串口設(shè)備/dev/cua0和/dev/cua1 塊設(shè)備 以塊為單位進(jìn)行讀寫,典型的塊大小為512或1024字節(jié);塊設(shè)備的存取是通過buffer、cache來進(jìn)行并且可以隨機(jī)訪問,即不管塊位于設(shè)備中何處都可以對其進(jìn)行讀寫 網(wǎng)絡(luò)設(shè)備 通過BSD套接口訪問 設(shè)備文件 Linux抽象了對硬件的處理,所有的

39、硬件設(shè)備都可以作為普通文件一樣來看待:它們可以使用和操作文件相同的、標(biāo)準(zhǔn)的系統(tǒng)調(diào)用接口來完成打開、關(guān)閉、讀寫和I/O控制操作,而驅(qū)動程序的主要任務(wù)也就是要實現(xiàn)這些系統(tǒng)調(diào)用函數(shù) Linux為文件和設(shè)備提供了一致的用戶接口。對用戶來說,設(shè)備文件與普通文件并無區(qū)別 主設(shè)備號和次設(shè)備號 主設(shè)備號 標(biāo)識該設(shè)備的種類,也標(biāo)識了該設(shè)備所使用的驅(qū)動程序 次設(shè)備號 標(biāo)識使用同一設(shè)備驅(qū)動程序的不同硬件設(shè)備 已經(jīng)注冊的硬件設(shè)備的主設(shè)備號可以從/proc/devices文件中得到 使用mknod命令可以創(chuàng)建指定類型的設(shè)備文件,并為其分配主次設(shè)備號。 # mknod /dev/lp0 c 6 0 Linux設(shè)備驅(qū)動程序的特點 (1)內(nèi)核代碼 (2)內(nèi)核接口 (3)內(nèi)核機(jī)制與服務(wù) (4)可加載 (5)可配置 (6)動態(tài)性 Linux的設(shè)備驅(qū)動程序與外界的接口可以分成三部分:(1)驅(qū)動程序與操作系統(tǒng)內(nèi)核的接口(2)驅(qū)動

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論