【嵌入式】上学期末整理的一些知识点
【馮諾依曼、哈佛體系結構】
??????? 哈佛結構:程序指令存儲和數據存儲分開的存儲器結構。中央處理器首先到程序指令存儲器中讀取程序指令內容,解碼后得到數據地址,再到相應的數據存儲器中讀取數據,并進行下一步的操作(通常是執行)。指令和數據有不同的寬度。
馮·諾伊曼結構:將程序指令存儲器和數據存儲器合并在一起的存儲器結構,程序指令和數據的寬度相同。
在嵌入式應用領域,哈佛結構卻擁有優勢,更加適合于那些程序固化、任務相對簡單的控制系統。
馮·諾依曼結構的統一編址可以最大限度地利用資源,而哈佛結構的計算機若應用于這種情形下則會對存儲器資源產生浪費。
使用馮·諾依曼結構的計算機,程序空間不封閉,程序空間的數據在運行期理論上可以被修改,此外程序一旦跑飛也有可能運行到數據區?;诠鸾Y構的處理器MCS-51,不會有代碼區被改寫的問題;程序只能在封閉的代碼區中運行,不可能跑到數據區。
使用馮·諾伊曼結構的:英特爾的8086等、ARM7、MIPS處理器。
【RISC/CISC】
??????? 精簡指令集計算機、復雜指令集計算機
??????? 1、指令系統
CISC計算機的指令系統比較豐富,有專用指令來完成特定的功能。處理特殊任務效率較高。
RISC設計者把主要精力放在那些經常使用的指令上,使它們簡單高效。對不常用的功能,常通過組合指令來完成。因此,在RISC 機器上實現特殊功能時,效率可能較低。
2、存儲器操作
CISC機器的存儲器操作指令多,操作直接。
RISC對存儲器操作有限制,使控制簡單化。
3、程序
CISC匯編語言程序編程相對簡單,科學計算及復雜操作的程序社設計相對容易,效率較高。
RISC匯編語言程序一般需要較大的內存空間,實現特殊功能時程序復雜,不易設計。
4、中斷
CISC機器是在一條指令執行結束后響應中斷。
RISC機器在一條指令執行的適當地方可以響應中斷。
5、CPU
CISC:CPU包含有豐富的電路單元,功能強、面積大、功耗大。
RISC:CPU包含有較少的單元電路,面積小、功耗低。
6、設計周期
CISC:結構復雜,設計周期長。
RISC:結構簡單,布局緊湊,設計周期短,且易于采用最新技術。
7、用戶使用
CISC功能強大,實現特殊功能容易。
RISC指令規整,性能容易把握,易學易用。
8、應用范圍
CISC 更適合于通用機。
RISC 由于RISC指令系統的確定與特定的應用領域有關,故RISC 機器更適合于專用機。
?
??嵌入式系統:以應用為中心、計算機技術為基礎,軟、硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。
特點:①嵌入式系統是專用的計算機系統
②嵌入式系統對環境的要求:嵌入式系統必須滿足對象系統的環境要求,如物理要求、電氣環境、成本低、功耗低等要求
??? ③嵌入式系統必須是能滿足對象系統控制要求的計算機系統
??? ④嵌入式系統是集計算機系技術與各行業于一體的集成系統
??? ⑤嵌入式系統具有較長的生命周期
??? ⑥嵌入式系統的軟件固化在非易失性存儲器中
??? ⑦實時性要求,對外部事件迅速做出反應
??? ⑧專用開發環境和開發工具進行設計
嵌入式系統三要素:嵌入性、專業性、計算機系統
??嵌入式技術:嵌入式技術是將計算機作為一個信息處理部件,嵌入到應用系統中的一種技術。它將軟件固化集成到硬件系統中,將硬件系統與軟件系統一體化。
??嵌入式系統產品包括硬件子系統和軟件子系統,其中硬件子系統包括嵌入式處理器、存儲器、可編程I/O系統以及外部設備驅動接口,軟件子系統包括操作系統軟件和應用軟件。
??處理器內核是一個設計,并不是一個芯片。內核的設計一般追求高速度、低功耗、易于集成。
??嵌入式處理器有四類:
①??嵌入式微處理器(MPU)
②??嵌入式微控制器(MCU)
③??嵌入式數字信號處理器(DSP)
④??嵌入式片上系統(SoC)
??幾種嵌入式操作系統:
VxWorks、pSOS、Palm OS、Windows CE、嵌入式Linux、μc/OS、FreeRTOS
??嵌入式系統設計步驟:
需求分析、結構設計、硬軟件及執行機構設計、嵌入式系統集成、系統測試
??處理器內核按照體系結構,主要分為以下幾類:
????MIPS
????ARM(ARM7/9,Cortex-M0/M3/M4,A8/9/15)
????PowerPC
??ARM體系結構的技術特征:
①??單周期操作
②??采用加載、存儲指令結構
③??固定的32位長度指令(使譯碼結構簡單,效率提高)
④??地址指令格式(采用三地址指令格式、較多寄存器、對稱的指令格式等便于生成優化代碼)
⑤??指令流水線技術(提高執行效率)
??
???所有數據操作,例如ADD,都是以字為單位
???Load/Store指令可以對字節、半字和字進行操作
??ARM處理器內核包含32位ARM指令集和16位Thumb指令集,有三種操作狀態:
????ARM狀態:32位,執行字方式的ARM指令
????Thumb狀態及Thumb-2狀態:Thumb狀態16位,執行半字方式的Thumb指令,Thumb-2狀態兼有16位及32位
???調試狀態:停機調試
注意:ARM狀態與Thumb狀態之間的切換并不影響處理器模式或寄存器內容。
處理器模式 | 說明 | 備注 |
用戶(usr) | 程序正常執行工作模式 | 不能直接切換到其它模式 |
系統(sys) | 運行特權級的操作系統任務 | 與用戶模式類似,但具有可以直接切換到其它模式等特權 |
快速中斷 (fiq) | 處理高速中斷,用于高速數據傳輸及通道處理 | FIQ異常響應時進入(優先級更高) |
外部中斷(irq) | 用于普通中斷處理 | IRQ異常響應時進入 |
管理(svc) | 操作系統保護模式,處理軟中斷SWI | 系統復位RESET和軟件中斷響應時進入 |
中止(abt) | 處理存儲器故障實現虛擬存儲器和存儲器保護 | 在ARM7TDMI沒有大用處 |
未定義(und) | 處理未定義的指令陷阱,用于硬件協處理器仿真 | 未定義指令異常響應時進入 |
??異常:異常是由于內部或外部事件引起的請求,使處理器去作相應處理請求的事件,當發生異常后時,系統執行完當前指令后,跳轉到相應的異常處理程序入口執行異常處理,異常處理程序完程序返回。
??除用戶模式外,其它模式均為特權模式;除用戶和系統模式外,其它模式均為異常模式
??用戶和系統模式都不能由異常進入,而且它們使用完全相同的寄存器組。
??ARM7TDMI內核包含1個CPSR(當前程序狀態寄存器)和5個供異常處理程序使用的SPSR(備份程序狀態寄存器)。CPSR反映了當前處理器的狀態,其包含(NZCV保留IFTM5):
置位:禁止中斷/Thumb狀態
C:當進行加法運算(包括CMN指令),最高位進位時C=1,不進位C=0;當進行減法運算(包括CMP 指令),最高位借位時C=0,否則C=1。對于結合移位操作的非加法/減法指令,C為從最高位最后移出的值,其它指令C通常不變;
MOV R1,0x80000000
MOVS R0,R1,LSR #32????? ;C=1
V:當進行加法/減法運算,并且發生有符號溢出時V=1,否則V=0,其它指令V通常不變。兩個負數運算結果第31位為0,則V=1;兩個正數運算結果第31位為1,則V=1。
??LDMFD? SP!,{R0-R3,PC}^?????? ;中斷返回
中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復的),CPSR也得到恢復。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。
??在異常發生后,ARM7TDMI內核會作以下工作(經典的異常中斷響應過程):
1.在適當的LR中保存下一條指令的地址,當異常入口來自:
ARM狀態,那么ARM7TDMI將當前指令地址加4或加8復制(取決于異常的類型)到LR中;
為Thumb狀態,那么ARM7TDMI將當前指令地址加4或加8 (取決于異常的類型)復制到LR中;異常處理器程序不必確定狀態。
2.將CPSR復制到適當的SPSR中;
3. 將CPSR模式位強制設置為與異常類型相對應的值;
4.強制PC從相關的異常向量處取指。
ARM7TDMI內核在中斷異常時置位中斷禁止標志,這樣可以防止不受控制的異常嵌套。
注:異??偸窃贏RM狀態中進行處理。當處理器處于Thumb狀態時發生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態。
??當異常結束時,異常處理程序必須(如何從異常中返回):
1.將LR中的值減去偏移量后存入PC,偏移量根據異常的類型而有所不同;
2.將SPSR的值復制回CPSR;
3.清零在入口置位的中斷禁止標志。
注:恢復CPSR的動作會將T、F和I位自動恢復為異常發生前的值。
??當nRESET信號再次變為高電平時(復位結束),ARM處理器執行下列操作:
1.強制M[4:0]變為b10011(管理模式SVN);
2.置位CPSR中的I和F位(禁止IRQ,FIQ);
3.清零CPSR中的T位(ARM狀態);
4.強制PC從地址0x00開始對下一條指令進行取指;
5.返回到ARM狀態并恢復執行。
??ARM7TDMI處理器采用馮·諾依曼結構(且為RISC),指令和數據共用一條32位數據總線。只有裝載LD、保存ST和交換SWP指令可訪問存儲器中的數據。
??ARM微處理器指令集分為六大類:分支指令、數據處理指令、程序狀態寄存器處理指令、加載/存儲指令、協處理器指令、異常產生指令。
??外設訪問的標準方法是使用存儲器映射的I/O,為外設的每個寄存器都分配一個地址。通常,存儲器映射的I/O位置沒有高速緩存和無緩沖區。
??ARM處理器支持8種基本尋址方式 :
1)??????寄存器尋址;
操作數的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執行時直接取出寄存器值來操作。舉例如下:
MOV? R1,R2? ??? ;將R2的值存入R1
2)??????立即尋址;
立即尋址指令中的操作碼字段后面的地址碼部分即是操作數本身,取出指令也就取出了可以立即使用的操作數(這樣的數稱為立即數)。舉例如下:
SUBS??????? R0,R0,#1???? ;R0減1,結果放入R0,并且影響標志位
3)??????寄存器移位尋址;
當第2個操作數是寄存器移位方式時,第2個寄存器操作數在與第1個操作數結合之前,選擇進行移位操作。寄存器移位尋址指令舉例如下:
MOV??????? R0,R2,LSL#3?? ???;R2的值左移3位,結果放入R0,即是R0=R2×8
4)??????寄存器間接尋址;
指令中的地址碼給出的是一個通用寄存器的編號,所需的操作數保存在寄存器指定地址的存儲單元中,即寄存器為操作數的地址指針。舉例如下:
LDR? R1,[R2]??? ;將R2指向的存儲單元的數據讀出保存在R1中
5)??????基址尋址;
將基址寄存器的內容與指令中給出的偏移量相加,形成操作數的有效地址?;穼ぶ酚糜谠L問基址附近的存儲單元,常用于查表、數組操作、功能部件寄存器訪問等。舉例如下:
LDR? R2,[R3,#0x0C] ? ;讀取R3+0x0C地址上的存儲單元的內容,放入R2
6)??????多寄存器尋址;
一次可傳送幾個寄存器值,允許一條指令傳送16個寄存器的任何子集或所有寄存器。舉例如下:
LDMIA???? R1!,{R2-R7,R12}? ;將R1指向的單元中的數據讀出到R2~R7、R12中(R1自動加1)
7)??????堆棧尋址;
堆棧是一個按特定順序進行存取的存儲區,操作順序為“后進先出”。堆棧尋址是隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區域(堆棧),指針指向棧頂。存儲器堆??煞譃閮煞N:
遞增堆棧:向高地址方向(上)生長;
遞減堆棧:向低地址方向(下)生長;
堆棧指針指向最后壓入的有效數據項,稱為滿堆棧;堆棧指針指向下一個待壓入數據的空位置,稱為空堆棧。
?? 滿遞增:堆棧向上增長,堆棧指針指向內含有效數據項的最高地址。指令如LDMFA、STMFA等;
?? 空遞增:堆棧向上增長,堆棧指針指向堆棧上的第一個空位置。指令如LDMEA、STMEA等;
?? 滿遞減:堆棧向下增長,堆棧指針指向內含有效數據項的最低地址。指令如LDMFD、STMFD等;
?? 空遞減:堆棧向下增長,堆棧指針向堆棧下的第一個空位置。指令如LDMED、STMED等。
8)??????相對尋址;
相對尋址是基址尋址的一種變通。由PC提供基準地址,指令中的地址碼字段作為偏移量,兩者相加后得到的地址即為操作數的有效地址。舉例如下:
??????? ??????? BL??? SUBR1???????????? ;調用到SUBR1子程序
??????? ??????? BEQ LOOP?????????????? ;條件跳轉到LOOP標號處
??????? ??????? ...
LOOP?????? MOV??????? R6,#1
??????? ??????? ...
SUBR1???? ...
??#immed_8r——常數表達式(立即數)
該常數由一個8位的常數通過循環右移偶數位得到。
操作碼 | 說明 | 操作碼 | 說明 |
ASR? #n | 算術右移n位 | ROR? #n | 循環右移n位 |
LSL? #n | 邏輯左移n位 | RRX | 帶擴展的循環右移1位 |
LSR? #n | 邏輯右移n位 | Type ?Rs | Type為移位的一種類型,Rs為偏移量寄存器,低8位有效 |
??所有的ARM指令都可以條件執行,而Thumb指令只有B(跳轉)指令具有條件執行功能。
?
操作碼 | 條件助記符 | 標志 | 含義 |
0000 | EQ | Z=1 | 相等 |
0001 | NE | Z=0 | 不相等 |
0010 | CS/HS | C=1 | 無符號數大于或等于 |
0011 | CC/LO | C=0 | 無符號數小于 |
0100 | MI | N=1 | 負數 |
0101 | PL | N=0 | 正數或零 |
0110 | VS | V=1 | 溢出 |
0111 | VC | V=0 | 沒有溢出 |
1000 | HI | C=1,Z=0 | 無符號數大于 |
1001 | LS | C=0,Z=1 | 無符號數小于或等于 |
1010 | GE | N=V | 有符號數大于或等于 |
1011 | LT | N!=V | 有符號數小于 |
1100 | GT | Z=0,N=V | 有符號數大于 |
1101 | LE | Z=1,N!=V | 有符號數小于或等于 |
1110 | AL | 任何 | 無條件執行 (指令默認條件) |
?
??存儲器訪問指令分為單寄存器操作指令和多寄存器操作指令。
??所有單寄存器加載/存儲指令(LDR/STR)可分為“字和無符號字節加載存儲指令”和“半字和有符號字節加載存儲指令。
從尋址方式的地址計算方法分,加載/存儲指令有以下4種格式:
零偏移。??????????????? 如:LDR? Rd,[Rn]
前索引偏移。??????? 如:LDR? Rd,[Rn,#0x04] !
【將Rn+0x04之后的內存地址中的數據加載到Rd中,然后更新Rn的值Rn = Rn + 0x04,上面的例子中如果沒有!那么最后Rn的值將不更新】
程序相對偏移。??? 如:LDR? Rd,labe1??????
后索引偏移。??????? 如:LDR? Rd,[Rn],#0x04
【將Rn中的地址指向的內存中的數據加載到Rd中,然后將Rn更新Rn = Rn + 0x04】
LDR{cond}SB? Rd,<地址>? ;將指定地址上的有符號字節讀入Rd
LDR{cond}SH? Rd,<地址>? ;將指定地址上的有符號半字讀入Rd
S:有符號B:按字節 H:按半字
??多寄存器加載/存儲指令(LDM/STM)可以實現在一組寄存器和一塊連續的內存單元之間傳輸數據。允許一條指令傳送16個寄存器的任何子集或所有寄存器。
LDM {cond} <模式>? Rn{!}, reglist{^}
!:在操作結束后,將最后的地址寫回Rn(Rn中的值為指向存儲單元的地址)中;
^:加入該后綴后,進行數據傳送且reglist不包含PC時,加載/存儲的寄存器是用戶模式下的,而不是當前模式的寄存器;若在LDM指令且reglist中包含有PC時使用,那么除了正常的傳送外,還將SPSR也拷貝到CPSR中,這可用于異常處理返回。
注意:該后綴不允許在用戶模式或系統模式下使用。
模式 | 說明 | 模式 | 說明 |
IA | 每次傳送后地址加4 | FD | 滿遞減堆棧 |
IB | 每次傳送前地址加4 | ED | 空遞減堆棧 |
DA | 每次傳送后地址減4 | FA | 滿遞增堆棧 |
DB | 每次傳送前地址減4 | EA | 空遞增堆棧 |
數據塊傳送操作 | 堆棧操作 | ||
使用堆棧指令的壓棧和出棧操作很簡單(只要前后一致即可EA-EA),而使用數據塊指令進行壓棧和出棧操作則需要考慮空與滿、加與減對應的問題(DA-IB,四個字母都不一樣)。
??SWP {cond} {B}??? Rd, Rm, [Rn]
B為可選后綴,若有B,則交換字節,否則交換32位字;
Rd保存從存儲器中讀入的數據;Rm的數據存儲到存儲器中,若Rm與Rd相同,則寄存器與存儲器內容進行交換;Rn為要進行數據交換的存儲器地址,Rn不能與Rd或Rm相同。?
SWPB?????? R1,R2,[R0]
將R0指向的存儲單元內的容讀取一字節數據到R1中 (高24位清零),并將R2的內容寫入到該內存單元中 (最低字節有效)
??
?? MOV??????? PC, LR????? ;子程序返回
?? MVN具有取反功能,所以可以裝載范圍更廣的立即數。如下:
??? MVN??????? R1,#0xFF????????? ;R1=0xFFFFFF00
MVN??????? R1,R2?????????????????????? ;將R2取反,結果存到R1
ADC? Rd, Rn, operand2 | 帶進位加法 | Rd←Rn+operand2 + Carry |
SBC ?Rd, Rn, operand2 | 帶進位減法 | Rd←Rn-operand2 - (NOT)Carry |
?? CMN指令用于把一個寄存器的內容和另一個寄存器的內容或立即數取反后進行比較,同時更新CPSR中條件標志位的值。該指令實際完成操作數1和操作數2相加,并根據結果更改條件標志位。(CMP和CMN總是修改標志位)
????? CMN R1,R0 ;將寄存器R1的值與寄存器R0的值相加,并根據結果設置CPSR的標志位
????? CMN R1,#100 ;將寄存器R1的值與立即數100相加,并根據結果設置CPSR的標志位
?? BIC指令將寄存器Rn的值與operand2的值的反碼按位“與”,結果保存到Rd中。指令格式: BIC {cond}{S}? Rd, Rn, operand2
??? BIC?R1,R1,#0x0F?? ;將R1的低4位清零,其它位不變
BIC? R1,R2,R3??????????????? ;將R3的反碼和R2相邏輯“與”,結果保存到R1
?? TST按位與(每位與的結果都為0,Z才變0);TEQ按位異或(兩個值完全相等則Z為0),測試相等(都改變標志位)
?? MUL??? R1,R2,R3? ;R1=R2×R3
MULS?? R0,R3,R7?;R0=R3×R7,同時影響CPSR中的N位和Z位
MLA??? R1,R2,R3,R0???? ;R1 = R2×R3+R0
?? 在ARM中有兩種方式可以實現程序跳轉:使用分支指令跳轉、向PC寄存器賦值實現跳轉。分支指令有以下三種:
1分支指令B(不能自動返回);
2帶鏈接的分支指令BL(帶返回的跳轉);
BL指令適用于子程序調用,使用該指令后,當前PC值被拷貝到R14中,然后跳轉到指定地址運行程序。跳轉范圍限制在當前指令的±32M字節地址內。
3帶狀態切換的分支指令BX
????? 該指令可以根據跳轉地址(Rm)的最低位來切換處理器狀態(置T位)。
?? 協處理器指令:
CDP?? coproc,opcode1,CRd,CRn,CRm{,opcode2} |
LDC{L}??? coproc, CRd,<地址> |
STC{L}?? coproc, CRd,<地址> |
MCR?? coproc,opcode1,Rd,CRn,CRm{,opcode2} |
MRC?? coproc,opcode1,Rd,CRn,CRm{,opcode2} |
?? SWI指令用于產生軟中斷,從而實現在從用戶模式變換到管理模式,并且將CPSR保存到管理模式的SPSR中,然后程序跳轉到SWI異常入口。在其它模式下也可使用SWI指令,處理器同樣地切換到管理模式。
SWI? immed_24
?? 在ARM處理器中,只有MRS/MSR指令可以對CPSR/SPSR進行讀/寫。
MRS{cond}??? Rd,psr??? ;Rd不能為R15,psr為CPSR或SPSR
MSR? psr_fields, Rd/#immed_8r
?? 嵌入式系統中使用的存儲器多是半導體存儲器及閃存(最常用的是SRAM和Flash)。
?? 存儲器的主要技術指標?
易失性,只讀性,位容量,速度,功耗,可靠性,價格(易只位速功可價)
?? 常用的半導體存儲器有哪幾種?分別的特點?
半導體存儲器按存取方式不同分為隨機讀寫存儲器RAM和只讀存儲器ROM。
1、RAM:①隨機存?、谝资?#xff1a;當電源關閉時RAM不能保留數據③高訪問速度④需要刷新⑤對靜電敏感
RAM按信息存儲方式可分為:靜態SRAM、動態DRAM
2、ROM: ①電路簡單②集成度高③成本低④非易失性
分為三類:掩膜ROM、一次可編程ROM(PROM)、可讀寫ROM(EPROM、EEPROM)
??RAM存儲器有幾種?特點及應用場景?
RAM按信息存儲方式可分為兩種:
①? 靜態SRAM:具有極高的讀寫速度,屬于易失性存儲器,電源掉電后SRAM中的數據將會丟失,不能直接使用SRAM引導程序運行。應用:常用作變量/數據緩沖,或者將程序復制到SRAM上運行,以提高系統的性能。
②? 動態DRAM:存儲容量大、價格便宜、需要定時刷新,適用于速度要求中等的大量信息存儲,如內存就是DRAM芯片組合而成的。
另外:雙端口RAM: 具有兩個端口,即兩套數據線、地址線、控制線。通常用于兩個嵌入式處理器共享內存。
?? FLASH存儲器又稱閃存,是一種可在線多次擦除的非易失性存儲器。特點:非易失性、體積小、功耗低、抗振性強、密度高、可直接執行:直接與MCU連接,不需要先將程序載入到RAM,然后在RAM中運行,所以工作速度僅取決于Flash的存取時間。
?? FLASH的兩種主要種類:NAND FLASH和NOR FLASH。①NOR FLASH是在EEPROM的基礎上發展起來的,其存儲單元由N-MOS構成。NOR FLASH的特點是可以隨機讀取任意單元的內容,適合程序代碼的并行讀寫存儲,所以常用于制作計算機的BIOS存儲器和微控制器內部存儲器等。②NAND FLASH將幾個N-MOS單元用同一根線連接,可以按順序讀取存儲單元的內容,適合于數據或文件的串行讀寫存儲。
??
?? 邏輯電路中的小圈表示低電平有效
??
?? LPC2000微控制器擴展了器件內部Flash總線寬度為128位,用于提高處理器的指令執行速度。這個接口通過存儲器加速模塊(MAM)來控制。把Flash存儲器被分成兩組,它們輪番工作,及時的為CPU提供需要的指令和數據,以防止CPU取指暫停。每組Flash存儲器都有自己的預取指緩沖區、分支跟蹤緩沖區和數據緩沖區。
總結
以上是生活随笔為你收集整理的【嵌入式】上学期末整理的一些知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 股票交易sdk接口是什么意思?
- 下一篇: NS3 Tutorial 中文版:第二