【嵌入式】上学期末整理的一些知识点

2019-07-12 18:40发布

【冯诺依曼、哈佛体系结构】        哈佛结构:程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。指令和数据有不同的宽度。冯·诺伊曼结构:将程序指令存储器和数据存储器合并在一起的存储器结构,程序指令和数据的宽度相同。在嵌入式应用领域,哈佛结构却拥有优势,更加适合于那些程序固化、任务相对简单的控制系统。冯·诺依曼结构的统一编址可以最大限度地利用资源,而哈佛结构的计算机若应用于这种情形下则会对存储器资源产生浪费。使用冯·诺依曼结构的计算机,程序空间不封闭,程序空间的数据在运行期理论上可以被修改,此外程序一旦跑飞也有可能运行到数据区。基于哈佛结构的处理器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,0x80000000MOVS 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内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM状态中进行处理。当处理器处于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的值存入R12)      立即寻址;立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。举例如下:SUBS        R0,R0,#1     ;R0减1,结果放入R0,并且影响标志位3)      寄存器移位寻址;当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下:MOV        R0,R2,LSL#3      ;R2的值左移3位,结果放入R0,即是R0=R2×84)      寄存器间接寻址;指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。举例如下:LDR  R1,[R2]    ;将R2指向的存储单元的数据读出保存在R1中5)      基址寻址;将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。举例如下:LDR  R2,[R3,#0x0C]   ;读取R3+0x0C地址上的存储单元的内容,放入R26)      多寄存器寻址;一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。举例如下:LDMIA     R1!,{R2-R7,R12}  ;将R1指向的单元中的数据读出到R2~R7、R12中(R1自动加1)7)      堆栈寻址;堆栈是一个按特定顺序进行存取的存储区,操作顺序为“后进先出”。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针指向栈顶。存储器堆栈可分为两种:递增堆栈:向高地址方向(上)生长;递减堆栈:向低地址方向(下)生长;堆栈指针指向最后压入的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。Ø  满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如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,<地址>  ;将指定地址上的有符号字节读入RdLDR{cond}SH  Rd,<地址>  ;将指定地址上的有符号半字读入RdS:有符号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取反,结果存到R1ADC  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或SPSRMSR  psr_fields, Rd/#immed_8r   嵌入式系统中使用的存储器多是半导体存储器及闪存(最常用的是SRAM和Flash)。   存储器的主要技术指标?易失性,只读性,位容量,速度,功耗,可靠性,价格(易只位速功可价)   常用的半导体存储器有哪几种?分别的特点?半导体存储器按存取方式不同分为随机读写存储器RAM和只读存储器ROM。1、RAM:①随机存取②易失性:当电源关闭时RAM不能保留数据③高访问速度④需要刷新⑤对静电敏感RAM按信息存储方式可分为:静态SRAM、动态DRAM2、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存储器都有自己的预取指缓冲区、分支跟踪缓冲区和数据缓冲区。