第一章嵌入式系统概述
嵌入式系统的定义与特点;
定义:以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统
特点:1、面向特定应用 趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密
2、支持实时多任务操作系统
3、功耗小、成本低和可靠性好
4、不可被垄断
SOC的全称与概念;
全称:嵌入式片上系统 概念:一个有专用目标的集成电路产品,其中包含完整系统并有嵌入软件的全部内容
嵌入式处理器分类——嵌入式微处理器、微控制器、DSP处理器、片上系统。
嵌入式系统的交叉开发环境概念;
在通用计算机上(如通用PC机)编辑、编译程序,生成目标平台上可以运行的二进制代码格式指令,最后再下载到目标平台上运行调试的开发方式,
嵌入式系统几种常用调试方式;
源程序模拟器 ROM监控器 在线仿真器(ICE) 在线调试器 (ICD)
第二章ARM微处理器
ARM处理器技术特点;
1、支持Thumb(16 位)/ARM(32 位)双指令集,能很好的兼容8 位/16 位器件
2、大多数数据操作都在大量的寄存器中完成
3、寻址方式灵活简单,执行效率高
4、指令长度固定
5、专用的载入和存储指令访问存储器
ARM处理器工作状态;
第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
第二种为Thumb状态,此时处理器执行16位的,半字对齐的Thumb指令。
RISC与CISC的含义;RISC设计遵循的一般原则;
RISC:精减指令系统计算机
CISC:复杂指令系统计算机
RISC设计遵循的一般原则:
1)确定指令系统时,只选择使用频度很高的指令,在此基础上增加少量能有效支持操作系统和高级语言实现及其他功能的最有用的指令
2)减少指令系统可采用的寻址方式的种类,简化指令的格式,都具有相同的长度。
3)让所有指令都在一个机器周期内完成。
(4)扩大通用寄存器的个数
(5)大多数指令都采用硬联控制实现,少数指令采用微程序实现。
(6)精简指令和优化设计编译程序支持高级语言的实现。
处理器的冯诺依曼结构与哈佛结构特点与区别;
冯诺依曼特点:必须有一个存储器、控制器、运算器、必须有输入输出设备
哈佛结构特点:程序存储器与数据存储器分开、提供了较大的存储器带宽、各自有自己的总线、适合于数字信号处理。
区别:
设计理念不同:冯诺依曼:程序存储器和数据存储器合并在一起的处理器架构设计,使用同一个存储器,经由同一个总线传输
哈佛:将程序指令存储和数据存储分开的存储器结构,数据和指令的储存可以同时进行
ARM的各种变种的意义(T变种、M变种、E变种、J变种、SIMD变种);
T:以16位的指令实现32位的指令功能,实现严格控制产品成本
M:增加了两条用于进行长乘法操作的ARM指令支持长乘法指令的ARM体系版本
E:增加一些附加指令用于增强处理器对一些典型的DSP算法的处理性能
J:与普通的Java虚拟机相比,Jazelle使Java代码运行速度提高 且功耗降低。
SIMD:提高了嵌入式应用系统的音频和视频处理器能力,它可以使微处理器的音频和视频性能提高且用户可自定义饱和运算的模式。
ARM处理器的7种工作模式以及含义;
用户模式: ARM微处理器的正常运行模式,通常用来执行一般的应用程序(只有这为特权模式,其余为非特权模式)
快速中断模式(FIQ):响应快速中断时的模式,由外部触发FIQ引脚,用于高速数据传输或通道处理;
外部中断模式(IRQ): 响应一般的外部中断时的模式,由外部触发IRQ引脚;
管理模式(SVC): 操作系统的保护模式;
中止模式(ABT): 当数据或指令预取中止时进入该模式,可用于实现虚拟存储及存储保护 指令预取中止:
系统模式(SYS): 运行具有特权的操作系统任务;
未定义模式(UND):当未定义的指令执行时进入该模式,可用于支持硬件协处理器软件仿真
Arm体系小端、大端存储模式含义;
小端模式:字的高位字节对应存储在高地址、低位字节对应存储在相邻的低地址 (相反大端为 低、高 替换字)
ARM处理器的几个重要的寄存器功能:CPSR、SPSR、R13(SP)、R14(LR)、R15(PC);
R13(SP)、R14(LR):
R13在ARM指令中常用作堆栈指针
R14用做子程序连接寄存器LR,常用来保存R15的值
R15(PC)用作程序计数器(pc) PC 指向当前指令的下两条指令地址
CPSR、SPSR
当前程序状态寄存器),在任何处理器模式下被访问。 CPSR在用户级编程时用于存储条件码。
SPSR:程序状态保存寄存器。SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态
CPSR存储器各部分意义;
N负数标志 Z零标志C进位标志V溢出标志
I IRQ使能位 F FIQ使能位 T 状态位 M4到M0模式位
CPSR的N、V、C、Z标志位的意义;
N——本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正书或零。
Z——z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。
C——下面分四种情况讨论C的设置方法: 在加法指令中(包括比较指令CMP),当结果产生了进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。 在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1。 对于包含移位操作的非加减运算指令,C中包含最后一次溢出的的位的数值。对于其他非加减运算指令,C位的值通常不受影响。
V——对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。
如何利用汇编完成工作模式的切换;
打开IRQ中断(将CPSR寄存器的I位清零)
MRS R0,CPSR ;0x40000038
BIC R0,R0,#0X80 ;0x4000003c
MSR CPSR_cxsf, R0 ;0x40000040 ;
切换到用户模式
MSR CPSR_c, #0xd0 ;0x40000044
MRS R0, CPSR ;0x40000048 ;
切换到管理模式
MSR CPSR_c, #0xdf ;0x4000004c
MRS R0, CPSR ;0x40000050
ARM各种异常类型的含义;
复位 当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 未定义指令 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。
软件中断 该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。
指令预取中止 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问,产生数据中止异常。
IRQ(外部中断请求) 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。
FIQ(快速中断请求) 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常
第三章ARM程序设计基础
条件执行的含义;
CPU有一个指令指示器,指向下一条要执行的指令,CPU根据指示器的指示加载指令并且执行。
掌握以下指令,指令部分需要结合教材的所有范例来看,以及理解和使用:
汇编指令:
条件执行标识符的意义,教材表3-2;
N:当运算的结果为负数的话置位,其他情况清O
Z:当运算的结果为0的话置位,其他情况清O
C:当运算的结果产生进位或者减法运算没有借位的话置位,其他情况清O
V:当运算的结果产生溢出的话置位,其他情况清O
ARM立即数寻址、寄存器、寄存器间接寻址。。。。寻址方式;
立即寻址: 这种寻址方式就在指令中给出操作数,只要取出指令也就取到了操作数(立即数)
寄存器寻址: 利用寄存器中的数值作为操作数,指令中地址码给出的是寄存器的编号
寄存器间接寻址:以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中,寄存器起到地址指针的作用
算术运算的指令:ADD、SUB、ADC。。。指令的功能与使用;
ADD指令用于将操作数1寄存器的值和操作数2相加。
SUB指令用于操作数1寄存器的值中减去操作数2。
RSB指令用于操作数2的值减去操作数1。反减的优点在于操作数2的可选范围比较大。
ADC、SBC、RSC指令分别是ADD、SUB、RSB的带进(借)位的运算,运算结果将影响CPSR中进位标志C
逻辑运算的指令:AND、ORR、EOR;
AND、ORR、EOR分别完成逻辑与、逻辑或、逻辑异或运算
CMP、BIC;
CMP指令用于把操作数1寄存器的值与操作数2(寄存器或立即数)的值进行比较,同时更新CPSR中条件标志位的值
BIC指令用于将操作数1寄存器中的位与操作数2中相应位的反码进行“与”运算,该指令可以实现操作数1某些位清0
B、BL、BLX、BX;
B:跳转到目标地址处执行
BL:指令在跳转之前会将PC的当前值保存到R14中,因此可以通过将R14的内容重新加载到PC中来返回到跳转指令之后的那个指令处执行。该指令是实现自程序调用的基本手段。
BLX:将下一条指令的地址拷贝到R14中,转移到标号处或目标地址寄存器指定的位置;如果目标地址寄存器的第0位为1或使用标号,则程序切换到Thumb状态
BX:指令执行时将目标地址寄存器的第0位拷贝到CPSR的T标志位(决定程序是切换到Thumb指令还是继续执行ARM指令)
LDR、STR(LDRB、LDRH类);
是将单一的数据传入(LDR)或传出(STR)寄存器
指令的寻址是非常灵活的,通常由两部分组成,一部分为一个基址寄存器
STMFD、LDMED类指令的的意义;
一般指令加如下后缀的作用:
IA 每次传送数据后地址增加4(指向下一个字数据)。
IB 每次传送数据前地址增加4。
DA 每次传送数据后地址减少4(指向前一个字数据)。
DB 每次传送数据前地址增加4。
FD 满递减堆栈
ED 空递减堆栈
FA 满递增堆栈
EA 空递增堆栈
LDM指令用于加载寄存器,即将连续内存单元的数据加载到多个寄存器中;STM指令用于存储寄存器,即将多个寄存器的数据存储到连续的内存单元中
MSR、MRS;
MSR 指令用于将操作数的内容传送到程序状态寄存器(CPSR 或SPSR)的特定域中。其中,操作数可以为通用寄存器或立即数
MRS 指令用于将程序状态寄存器的内容传送到通用寄存器中。注意通用寄存器不能使用R15。该指令一般用在以下两种情况:
①当需要改变程序状态寄存器的内容时,可用MRS 将程序状态寄存器的内容读入通用寄存器,修改后再写回程序状态寄存器。
②当在异常处理或进程切换时,需要保存程序状态寄存器的值,可先用该指令读出程序状态寄存器的值,然后保存
软件中断与断点中断指令:SWI、BKPT
SWI 指令用于产生软件中断,以便用户程序能调用操作系统的系统例程。操作系统在SWI 的异常处理程序中提供相应的系统服务。
BKPT 指令产生软件断点中断,可用于程序的调试。
理解软件中断的含义与作用;
出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。