嵌入式系统复习提纲.docx
- 文档编号:18256955
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:20
- 大小:26.44KB
嵌入式系统复习提纲.docx
《嵌入式系统复习提纲.docx》由会员分享,可在线阅读,更多相关《嵌入式系统复习提纲.docx(20页珍藏版)》请在冰点文库上搜索。
嵌入式系统复习提纲
第一章
嵌入式系统复习提纲
绪论
1.嵌入式系统的定义
(1)广义:
根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“用来控制或监视机器、装置或工厂等大规模系统的设备”。
(2)狭义:
国内嵌入式行业一个普遍被认同的定义,即以应用为中心,以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2.嵌入式实时操作系统
嵌入式实时操作系统是指在限定的时间内对输入进行快速处理并做出响应的嵌入式操作系统。
3.当前最常见的源码开放的嵌入式操作系统有哪些,请举出两例,并分析其特点。
(1)嵌入式Linux,特点:
源代码开放、开发工具多、内核小、功能强大、运行稳定、效率高等
(2)μC/OS-II,特点:
源代码公开、可移植性、可固化、可裁剪、占先式、多任务、可确定性
第二章ARM技术与ARM体系结构
1.ARM的含义
ARM通常具有如下三种含义:
(1)ARM是AdvancedRISCMachineLimited的简称(代表一个公司);
(2)ARM是AdvancedRISCMachineLimited公司的产品,该产品以IPCore(知识产权核)的形式提供,并可泛指许多半导体厂商购买了这种知识产权后生产出来的“ARM处理器系列的芯片以及衍生品”(代表一类微处理器的通称);
(3)ARM是一种RISCMPU/MCU(微处理器/微控制器)的体系结构,如同X86架构是一种CISC结构一样,另外,还有MIPS架构,PowerPC架构等(代表一种技术)。
2.ARM内核版本命名规则
见课本P12
3.流水线内核结构
ARM7采用了三条流水线的内核结构,三级流水线分别为取指(Fetch)、译码(Decode)、执行(Excute)
ARM920,在指令操作上采用五级流水线,即取指、译码、执行、存储器访问(简称:
访存)和寄存器回写(简称:
回写)
4.ARM处理器的工作模式
ARM处理器共有七种工作模式,即用户模式(USR),快速中断模式(FIQ),普通中断模式(IRQ),管理模式(SVC),终止模式(ABT),未定义指令异常模式(UND)和系统模式(SYS),除用户模式外,其他6种处理器模式可以称为特权模式,在6种特权模式中,除了系统模式外,其他5中特权模式又称为异常模式,每种异常都对应有自己的异常处理入口点。
5.ARM内部寄存器
在ARM处理器内部共有37个寄存器,这些寄存器包括以下两类寄存器:
31个通用寄存器:
包括程序计数器PC等,这些寄存器都是32位的寄存器
6个状态寄存器:
状态寄存器也是32位的寄存器
6.ARM7内部寄存器R13、R4和R15的主要功能和作用
通用寄存器R13通常被用作栈指针,也称为SP;
R14又被称为链接寄存器(LR),在ARM中有两种特殊的用途:
(1)当使用BL或者BLX指令调用子程序时,R14被设置成该程序的返回地址。
在子程序中当把R14的值复制到程序计数器PC时,就实现了子程序返回。
(2)当发生异常中断的时候,该模式下的特定物理R14被设置成该异常模式将要返回的地支。
R15,也即程序计数器(也称程序指针)PC,指向被取指的指令。
7.程序状态寄存器(主要了解V、C、Z、N的置位复位情况)
V——溢出标志位
C——进位或借位标志位
Z——结果为零标志位
N——符号标志位
具体置位情况见课本P22
8.ARM异常处理
ARM异常类型有复位、未定义指令、软件中断、预取指终止、数据终止、IRQ中断、FIQ中断等
(1)异常产生时ARM进行的操作
P23-P24等四点
(2)异常返回操作
A、从SWI和未定义指令返回,指令:
MOVSPC,LR
B、从FIQ中断、IRQ中断和预取异常返回,指令:
SUBSPC,LR,#4
C、从数据异常返回,指令:
SUBSPC,LR,#8
9.ARM数据存储方式
ARM处理器对存储器操作的数据单元包括字节(8bit)的存取、半字(16bit)的存取、字(32bit)的存取。
数据存储格式
根据字节在内存单元中高低地址的分配次序可将存储格式分为两种:
小端存储格式和大端存储格式。
小端存储格式即对于字或半字单元的存储,其高字节存储于高地址,低字节存储于低地址;
大端存储格式即对于字或半字单元的存储,其高字节存储于低地址,低字节存储于高地址。
10.ARM流水线技术分析
程序计数器R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或“正在译码”的指令。
所以PC始终指向该指令地址加8字节的地址,即PC值等于当前程序执行位置加8。
互锁:
当前指令的执行可能需要前面指令执行的结果,但这时前面的指令没有执行完毕,从而会导致当前指令的执行无法获得合法的操作数,这时就会引起流水线的等待,这种现象在流水线机制里称为互锁。
第三章ARM指令寻址方式
1.ARM指令的编码格式
每条ARM指令占有4个字节,其指令长度为32位。
其中type(bit[27:
26]):
表示指令的类型:
Type(bit[27:
26])
描述
00
数据处理指令及杂类Load/Store指令
01
Load/Store指令
10
批量Load/Store指令
11
协处理器指令与软中断指令
其他见课本P31
2.指令条件码
需理解(课本P32,表3-2)
3.数据处理指令第二操作数的构成方式
数据处理指令第二操作数operand2的构成有三种格式:
立即数方式、寄存器方式和寄存器移位方式
合法立即数的判断要求掌握
数据处理指令编码格式要求掌握
4.Load/Store指令寻址
根据访问数据格式的不同,将这类指令的寻址分为字、无符号字节的Load/Store指令寻址和半字、有符号字节的Load/Store指令寻址两类
根据访问存储单元和基地址寄存器更新的先后顺序可以将基址加变址寻址分为两种:
(1)前变址法:
基地址寄存器中的值和地址偏移量先做加减运算,生成的操作数作为内存访问的地址。
(2)后变址法:
将基地址寄存器中的值直接作为内存访问的地址进行操作,内存访问完毕后基地址寄存器中的值和地址偏移量做加减运算,并更新基地址寄存器。
Load/Store指令编码格式要求掌握
字,无符号字节寻址指令中,偏移量(地址模式)可以通过三种方式得到,即:
立即数、寄存器和寄存器移位。
5.杂类Load/Store指令(半字、有符号字)
后缀:
SB,SignedByte,表示有符号字节
SH,SignedHalfWord,表示有符号半字
H,UnsignedHalfWord,表示无符号半字
杂类Load/Store指令的偏移量(地址模式)只有两种,即:
立即数和寄存器
6.批量Load/Store指令寻址方式
批量Load/Store指令在实现寄存器组和连续的内存单元中数据的传递时,有两种实现方法,即进行内存操作和堆栈操作,分别通过在LDM/STM指令后加不同的后缀来实现:
(1)内存操作
后增IA(IncrementAfter);先增IB(IncrementBefore);后减(DecrementAfter);先减DB(DecrementBefore)概念弄清楚
(2)堆栈操作
堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称做是堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶,在ARM里通常用R13作为栈指针
满递增堆栈FA(FullAdcending),满递减堆栈FD(FullDecending),空递增堆栈EA(EmptyAscending),空递减堆栈ED(EmptyDecending)概念弄清楚
第四章ARM指令集系统
1.ARM微处理器指令集分类
ARM微处理器的指令集可以分为数据处理指令、分支指令、加载/存储指令、批量加载/存储指令、交换指令、程序状态寄存器(PSR)处理指令、协处理器操作指令和异常产生指令八大类。
2.基本指令操作码编码表
见课本P51表4-2,需理解
3.数据处理指令考察方法举例
(1)将数据0XFFFFFFFF送入寄存器R0
MOVR0,#-1
MVNR0,#0
(2)将R2中的内容乘以8倍后存入R1
MOVR1,R2,LSL#0x03
(3)求R1+R2和放在R1中
ADDR1,R1,R2
求R4R3+R2R1,结果存入R6R5(64位二进制数加法)
ADDSR5,R3,R1
ADCR6,R4,R2
求R2R1+1,结果存入R4R3
ADDSR3,R1,#1
ADCR4,R2,#0
(4)求R1-R2,差放在R1中
SUBR1,R1,R2
求R4R3-R2R1,结果存入R6R5(64位二进制数减法)
SUBSR5,R3,R1
SBCR6,R4,R2
求R2R1-1,结果存入R4R3
SUBSR3,R1,#1
SBCR4,R2,#0
(5)将R0低4位数据保留,其余位清零,并影响标志位
ANDR0,R0,#0x0F
保持R0的高24位,低8位置1
ORRR0,R0,#0xFF
将R0的低8位按位取反
EORR0,R0,#0xFF
清除R0中的低8位,其余位不变
BICR0,R0,#0xFF
(6)将R0与R1比较,并根据比较的结果设置C和Z标志位
CMPR0,R1(若R0>R1,则C=1,若R0 (7)判断R0的低8位是否为0,并置Z标志位 TSTR0,#0x0FF 判断R0的值与R1的值是否相等,并根据结果置Z标志位 TEQR0,R1 (8)实现两个无符号32位二进制数的乘积,这两个数分别存于R0,R1中,乘积的结果存于R2,R3中 UMULLR2,R3,R0,R1 其他乘法指令亦要求理解掌握 4.ARM分支指令 ARM分支指令用于实现程序流程的跳转,在ARM程序中只有两种方法可以实现程序流程的跳转: (1)使用专门的分支指令(B) (2)直接将程序计数器PC写入跳转地址值 程序无条件跳转到标号Label处 Blabel; 当R1=0时,程序跳转到标号stop处执行 CMPR1,#0 BEQstop; 程序无条件跳转到标号Label处执行,并将当前的PC值(下一条指令的地址)保存到LR中BLLabel 程序跳转到R1指定的地址,并根据R1的bit[0]来切换处理器的状态 BXR1 该指令中,若R1的bit[0]为1,则跳转时将自动将CPSR中的标志位T置位,目标地址的代码为Thumb代码;如果R1的bit[0]为0,则跳转时自动将CPSR中的T标志位清0,目标地址的代码为ARM代码 BLX指令为BL指令和BX指令结合,目标地址可以用标号表示,也可以用寄存器中存储的地址,BX指令的目标地址只能用寄存器来存储,B指令和BL指令的目标地址只能用标号表示,能够实现的跳转范围是-32MB-+32MB(凡是标号表示的目标地址都不超出此范围) 5.加载存储指令 参考课本P66-P69,例4-27至例4-29,要求能根据指令写出指令实现的加载/存储功能,或者根据需要加载/存储某些数据(字、字节、半字、有无符号等数据)写出相应的指令。 6.批量加载存储指令 ARM微处理器所支持批量加载/存储指令可以一次性实现一片连续的存储器单元和多个寄存器之间进行传送数据 将寄存器R0,R3-R10,LR中的内容存入一个堆栈区 STMFDR13! ,{R0,R3-R10,LR} 将上述堆栈内容恢复到寄存器R0,R3-R10,PC LDMFDR13! ,{R0,R3-R10,LR} P71: 例2.代码小节中所举例子要求清楚掌握 7.交换指令 SWPR0,R1,[R2] SWPBR0,R1,[R2],具体见课本例子,要求掌握 8.程序状态寄存器PSR访问指令 MRS以及MSR指令,具体用法见课本例子,要求掌握 9.协处理器操作指令 概念: 协处理器操作是ARM处理器对协处理器进行管理,也就是ARM处理器的相关操作通过发送指令给协处理器来完成。 ARM微处理器最多可支持16个协处理器,用于各种协处理器操作。 在程序执行的过程的中,每个协处理器针对自身的协处理指令,忽略ARM处理器和其他协处理器的指令。 ARM协处理器指令主要作用: (1)初始化协处理器的数据处理操作 (2)在ARM处理器的寄存器和协处理器的寄存器之间传送数据 (3)在ARM协处理器的寄存器和存储器之间传送数据 协处理器操作指令不作考试要求 10.异常产生指令 概念: SWI指令用于产生软件中断,它将处理器置于监控模式(SVC),从0x08开始执行指令。 ARM通过这种机制实现用户模式对操作系统中特权模式的程序调用,也就是使用户程序调用操作系统的系统程序成为可能。 BKPT指令产生软件断点中断,可用于程序的调试。 此两个指令不作考试要求 11.本章出题类型 可参考本章练习题 (1)例: 写出下列ARM指令所显示的操作: LDRR2,[R3,#-4]! (将内存地址[R3-4]中的数据加载如寄存器R2,完成此操作后,R3=R3-4) STMDBR0! {R1-R5,R10,R11} (寄存器列表R11,R10,R5-R1中的数据存入以地址[R0]为起始的内存单元,并且每存入一个数据,地址减4,并将地址R0-24写入R0) (2)写出一条指令,完成如下操作 R1=R2*3 (指令: RSBR1,R2,R2,LSL#2或ADDR1,R2,R2LSL#1) (3)写出实现如下操作的ARM指令 当Z=1时,将存储器地址为R1的字数据读入寄存器R0 (指令: LDREQR0,[R1,#0]或者LDREQR0,[R1]) 第五章Thumb指令 1.ARM的两种工作状态 从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: ·第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令; ·第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。 当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。 在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。 2.ARM两种工作状态切换方法(理解) ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。 ·进入Thumb状态: 当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。 此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。 ·进入ARM状态: 当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。 此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。 3.Thumb指令 (1)Thumb数据处理指令 寄存器移位指令: LSR,LSL,ASR 低位寄存器算术运算指令(第二操作数只有寄存器和立即数两种方式): ADD,SUB MOV、CMP、ADD与SUB指令 ALU操作指令: AND,EOR,LSL,LSR,ASR,ADC,SBC,ROR,TST,NEG,CMP,CMN,ORR,MUL,BIC,MVN 带高位寄存器操作的Thumb指令: ADD,CMP,MOV 带SP/PC的算术运算指令 ADD,SUB (2)Thumb存储器操作指令 LDR(后缀H,B,SH,SB),STR(后缀H,B,SH,SB) LDMIA,STMIA PUSH,POP (3)Thumb分支指令 条件分支指令B,条件: EQ、NE、CS、CC、MI、PL、VS、VC、HI、LS、GE、LT、GT、LE 无条件分支指令B 带链接分支指令BL 带状态切换分支指令BX (4)Thumb软中断指令 与ARM指令集下的软中断指令相似,用于使处理器产生软件异常,使用这种机制实现在用户模式下对操作系统中特权模式的程序调用。 4.与32位的ARM指令集相比较,16位的Thumb指令集具有哪些优势 (1)Thumb指令具有较高的代码密度,因为Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能。 ARM代码所需的存储空间约为ARM代码的60%-70%。 (2)若使用16位的存储器,Thumb代码比ARM代码快约40%-50%。 (3)与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%。 5.例题 对于PC加法运算指令ADDRd,PC,#immed_8×4,其机器码编码格式为: 15 14 13 12 11 10 8 7 0 1 0 1 0 X Rd immed_8 immed_8×4表示偏移量,请根据上述编码格式写出该指令偏移量的最大值。 (其最大值为255×4=1020字节) 第六章伪指令与伪操作 1.伪指令 伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,只是在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。 (1)ARM汇编语言的伪指令 LDR、ADRL、ADR、NOP (2)Thumb汇编语言伪指令 LDR、ADR、NOP 2.伪操作 伪操作是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,对源程序运行汇编程序处理,而不是在计算机运行期间由处理器执行(也就是说这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作也就随之消失)。 3.目前常用的ARM汇编程序的编译环境有两种 (1)ADS/SDT、RealViewMDK等ARM公司推出的开发工具 ARM将Keil公司收购之后,正式推出了针对ARM微控制器的开发工具RealViewMicrocontrollerDevelopmentKit(简称RealViewMDK或MDK) (2)GNUARM开发工具 GNU是GNU’sNotUnix的递归缩写。 GNU格式ARM汇编语言程序主要是面对在ARM平台上移植嵌入式Linux操作系统。 4.符号定义伪操作 LCLA、LCLL、LCLS GBLA、GBLL、GBLS SETA、SETL、SETSRLIST 5.数据定义伪操作 DCB、DCW、DCWU、DCD、DCDU、DCFS、DCFSU、DCFD、DCFDU、DCQ、DCQU LTORG、SPACE、MAP、FIELD 6.汇编代码控制伪操作 汇编器在对程序代码进编译时,会根据汇编控制伪操作的定义情况对程序进行编译,常用的有条件编译、重复汇编和宏定义 (1)IF条件编译伪操作 IFlogical_expression 程序代码段A {ELSE 程序代码段B } ENDIF (2)WHILE条件编译伪操作 WHILElogical_expression 程序代码段 WEND (3)MACRO宏定义伪操作 MACRO {$label}macroname{$parameter{,$parameter}...} 程序代码段 MEND 需知道如何根据宏定义调用宏以及宏调用后编译器是如何进行宏替换的。 7.汇编信息报告控制伪操作 信息报告伪操作用于程序汇编指示,主要是在程序调试阶段使用。 ASSERT、INFO、OPT、TTL、SUBT 8.指令集类型标识伪操作 指令集类型标识伪操作用来告诉编译器所处理的是32位ARM指令还是16位的Thumb指令,实现这一操作的有操作符有ARM、CODE32、THUMB、CODE16。 9.文件包含伪操作 文件包含伪操作包括两类: 一类是将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理(GET,INCLUDE);另一类也是将一个源文件包含到当前源文件中,但被包含文件不进行汇编处理(INCBIN)。 10.其他类型伪操作 ALIGN、AREA、END、ENTRY、EQU、(EXPORT、GLOBAL、EXPORTAS、IMPORT、EXTERN、KEEP、NOFP、REQUIRE、REQUIRE8、PRESERVE8、ROUT了解) 第七章汇编语言程序设计 1.ADS环境下ARM汇编语句格式 {symbol}{instrction}{;commetn} {symbol}{directive}{;comment} {symbol}{pseudo-instrction}{;comment} 2.ARM编译环境下汇编语句中符号规则 ARM编译环境下汇编语句中符号可以用来表示地址(一般为程序标号)、常量和变量。 当标号以数字开头时称为局部标号,只在当前段起作用。 1)符号命名规则 符号由大小写字母、数字、下划线组成,且区分大小写 局部标号可以用数字开头,而不能是其他的标号。 符号在其作用范围内必须是唯一的,不可以有重名的,并且程序中的符号不能与系统内部变量或者系统预定义的符号同名 程序中的符号不要与指令助记符或者伪操作同名 2)常量 ARM汇编语言中使用到的常量有数字常量、字符常量、字符串常量和布尔常量。 3)变量 汇编语言中的变量包括数字变量、字符串变量、逻辑变量 汇编规则 对于数字变量来说,如果该变量前面有$字符,在汇编时编译器将该数字变量的数字转换成十六进制的串,然后用该十六进制串取代$字符后的变量。 对于逻辑变量来说,如果该逻辑变量前面有一个$字符,在汇编时编译器将该逻辑变量替换成它的取值(T或者F) 4)字符串表达式操作(了解) ARM汇编语言中有专门对字符串操作的运算符,包括取字符串的长度、数字转化为字符、提取字符串中的子串和连接两个字符串操作。 5)地址标号 当符号作为程序标号时,其内容为程序语句的地址。 对于以数字开头的标号,并且使用ROUT指示符时,其作用范围是当前段,这种标号为局部标号。 标号可分为三种类型: PC相关标号、寄存器相关标号和绝对地址 6)局部标号(了解) 3.GNU环境下汇编语句与编译说明(了解) 1)GNU环境下ARM汇编语句格式 {label: }{instruction}{@comment} {label: }{directive}{@comment} {label: }{pseudo-instrction}{@comment} 2)基本语法 预处理: 移除多余的间隔符代码中的所有注释,并将字符常量转换为数字值。 不作宏处理和文件包含处理。 可识别注释方式三种: /
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 复习 提纲