嵌入式系统复习终极版.docx
《嵌入式系统复习终极版.docx》由会员分享,可在线阅读,更多相关《嵌入式系统复习终极版.docx(23页珍藏版)》请在冰豆网上搜索。
嵌入式系统复习终极版
嵌入式系统复习重点
1、题型
填空题2`×10
单选题2`×5
名词解释2`×5
简答题5`×6
设计题15`×2
2、考点
第1章嵌入式系统概述
1、嵌入式系统从技术角度的定义及其特点(见PPT第一章)
定义:
以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
特点:
嵌入性、内含计算机、专用性。
2、嵌入式系统的未来P3
产品市场窗口现在预计翻番的周期狂热到6~9个月;
全球重新定义市场的机会和膨胀的应用空间;
互联现在是一个需求而不是辅助性的,包括用有线和刚刚显露头角的无线技术;
基于电子的产品更复杂化;
互联嵌入式系统产生新的依赖网络基础设施的应用;
微处理器的处理能力按莫尔定律(Moore’sLaw)预计的速度在增加。
该定律认为集成电路和晶体管个数每18个月翻一番。
3、什么是嵌入式处理器及嵌入式系统的分类P5
嵌入式处理器:
为完成特殊应用而设计的特殊目的的处理器。
嵌入式系统可以分为以下几大类:
嵌入式微处理器EMPU;
嵌入式微控制器MCU;
嵌入式DSP处理器;
嵌入式片上系统SOC。
4、嵌入式操作系统相关的基本概念P7-10(可能考名词解释)
前后台系统:
对基于芯片的开发来说,应用程序一般是一个无限的循环,可称为前后台系统或超循环系统。
循环中调用相应的函数完成相应的操作,这部分可以看成后台行为,后台也可以叫做任务级,这种系统在处理的及时性上比实际可以做到的要差。
中断服务程序处理异步事件,这部分可以看成前台行为,前台也叫中断级,时间相关性很强的关键操作一定是靠中断服务程序来保证的。
操作系统:
操作系统是计算机中最基本的程序。
操作系统负责计算机系统中全部软硬资源的分配与回收、控制与协调等并发的活动;操作系统提供用户接口,使用户获得良好的工作环境;操作系统为用户扩展新的系统功能提供软件平台。
实时操作系统:
实时操作系统是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于RTOS之上的各个任务,RTOS根据各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度、异常处理等工作。
在RTOS支持的系统中,每个任务均有一个优先级,RTOS根据各个任务的优先级,动态地切换各个任务,保证对实时性的要求。
代码的临界区:
也称为临界区,指处理不可分割的代码,运行这些代码不允许被打断。
一旦这部分代码开始执行,则不允许任何中断打断(这不是绝对的,如果中断不调用任何包含临界区的代码,也不访问临界区的使用的共享资源,这个中断可以执行)。
为确保临界区代码的执行,在进入临界区之前要关中断,而临界区代码执行完成以后要立即开中断。
资源:
程序运行时可使用的软、硬件环境统称为资源。
资源可以是输入、输出设备,例如打印机、键盘、显示器,也可以是一个变量、一个结构或一个数组等。
共享资源:
可以被一个以上任务使用的资源叫做共享资源。
为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥。
任务:
一个任务也叫做一个线程,是一个简单的程序,该程序可以认为CPU完全属于该程序本身。
实时应用程序的设计过程,包括如何把问题分割成多个任务,每个任务都是整个应用的某一部分,被赋予一定的优先级,有它自己的一套CPU和寄存器和自己的栈空间。
任务切换:
当多任务内核决定运行另外的任务时,保存正在运行任务的当前状态,即CPU寄存器中的全部内容。
这些内容保存在当前状态保存区,也就是任务自己的栈区之中。
入栈工作完成以后,就把下一个将要运行的任务的当前状态从任务的栈中重新装入CPU寄存器,并开始下一个任务的运行,这个过程就叫任务的切换。
(这个过程增加了应用程序的额外负担,CPU的寄存器越多,额外负担就越重。
做任务切换所需要的时间取决于CPU有多少寄存器要入栈,实时内核的性能不应该以每秒钟能做多少次任务切换来评价。
)
内核:
多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通信。
内核提供的基本服务是任务切换。
使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。
内核提供必不可少的系统服务,如信号量、消息队列、延时等。
调度:
调度是内核的主要职责之一。
调度就是决定该轮到哪个任务运行了。
多数实时内核是基于优先级调度法的。
每个任务根据其重要程序的不同被赋予一定的优先级。
基于优先级的调度法指CPU总是让处在就绪态的优先级最高的任务先运行。
然而究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是非占先式的还是占先式的内核。
非先占式内核:
非占先式内核要求每个任务自我放弃CPU的所有权。
非占先式调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。
异步事件还是由中断服务来处理。
中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。
但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。
先占式内核:
当系统响应时间很重要时,要使用占先式内核。
因此绝大多数商业上销售的实时内核都是占先式内核。
最高优先级的任务一旦就绪,总能得到CPU的控制权。
当一个运行着的任务使一个比它优先级高的任务进入了就绪状态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权。
如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。
任务优先级:
任务的优先级是表示任务被调度的优先程度。
每个任务都具有优先级。
任务越重要,赋予的优先级应越高,越容易被调度而进入运行态。
中断:
中断是一种硬件机制,用于通知CPU有个异步事件发生了。
中断一旦被识别,CPU保存部分(或全部)上下文即部分或全部寄存器的值,跳转到专门的子程序,称为中断服务子程序(ISR)。
中断服务子程序做事件处理,处理完成后,程序回到:
1.在前后台系统中,程序回到后台程序;
2.对非占先式内核而言,程序回到被中断了的任务;
3.对占先式内核而言,让进入就绪态的优先级最高的任务开始运行。
时钟节拍:
时钟节拍是特定的周期性中断。
这个中断可以看作是系统心脏的脉动。
中断之间的时间间隔取决于不同应用,一般在10ms到200ms之间。
时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。
时钟节拍率越快,系统的额外开销就越大。
5、嵌入式实时操作系统的优缺点及常见的嵌入式实时操作系统P11-14
优点:
在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。
通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化;而且对实时性要求苛刻的事件都得到了快速、可靠的处理。
通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。
缺点:
使用嵌入式实时操作系统还需要额外的ROM/RAM开销,2~5%的CPU额外负荷,以及内核的费用。
常见的嵌入式实时操作系统:
uClinux、WindowsCE、VxWorks、μC/OS-II
第2章ARM7体系结构
1、ARM的体系结构及常用的ARM处理器系列P16
ARM内核采用RISC体系结构。
RISC是精简指令集计算机的缩写,其目标是设计出在高时钟频率下单周期执行,简单而有效的指令集。
ARM内核采用RISC体系结构,因此具有RISC的结构特点如具有大量的通用存储器;独特的装载/保存(load-store)结构;简单的寻址模式;统一和固定长度的指令格式。
常用的ARM处理器系列:
ARM7系列、ARM9系列、ARM10系列、ARM11系列、Intel的XScale系列和MPCore系列;还有针对低端8位MCU市场推出的Cortex-M3系列,其具有32位CPU性能、8位CPU的价格。
2、ARM7TDMI的完整意思是什么?
ARM7TDMI是基于ARM体系结构V4版本的低端ARM核。
其弥补了ARM6很难在低于5V电压下稳定工作的不足,还增加了后缀所对应的功能:
3、存储器的字与半字及对齐关系P20
从偶数地址开始的连续2个字节构成一个半字;以能被4整除的地址开始的连续4个字节构成一个字;ARM指令的长度刚好是一个字,Thumb指令的长度刚好是一个半字。
如果一个数据是从偶地址开始的连续存储,那么它就是半字对齐,否则就是非半字对齐;如果一个数据是以能被4整除的地址开始的连续存储,那么它就是字对齐,否则就是非字对齐。
4、3级流水线P20(可能考大题)
可参考第二章PPT23页的思考题例子。
5、ARM处理器的两种状态P24
ARM7TDMI处理器内核包含2套指令系统,分别为ARM指令集和Thumb指令,并且各自对应1种处理器的状态:
ARM状态:
32位,处理器执行字方式的ARM指令,处理器默认为此状态;
Thumb状态:
16位,处理器执行半字方式的Thumb指令。
注意:
两个状态之间的切换并不影响处理器模式或寄存器内容。
具体例子见书上P25程序清单2.2。
6、ARM处理器的7种处理模式P26(必考)
ARM体系结构支持7种处理器模式,分别为:
用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。
这样的好处是可以更好的支持操作系统并提高工作效率,ARM7TDMI完全支持这七种模式。
处理器模式
说明
备注
用户(usr)
正常程序运行的工作模式
不能直接从用户模式切换到其他模式
特
权
模式
系统(sys)
用于支持操作系统的特权任务等
与用户模式类似,但具有直接切换到其他模式等特权
异常模式
管理(svc)
供操作系统使用的一种保护模式
只有在系统复位和软件中断响应时,才进入此模式
中止(abt)
用于虚拟内存和(或)存储器保护
在ARM7内核中没有多大用处
未定义(und)
支持软件仿真的硬件协处理器
只有在未定义指令异常响应时,才进入此模式
中断(irq)
中断请求处理
只有在IRQ异常响应时,才进入此模式
快速中断(fiq)
快速中断请求处理
只有在FIQ异常响应时,才进入此模式
7、ARM状态下的内部寄存器P28-36(重点)(熟记各数字)
在ARM处理器内部共有37个用户可访问的寄存器,分别为31个通用32位寄存器和6个状态寄存器。
ARM处理器共有7种不同的处理器模式,每种模式都有一组相应的寄存器组,最多可以18个活动的寄存器。
如下表所示:
寄存器R0~R7为未分组的通用寄存器,它们在任何处理器模式都对应于相同的32位物理寄存器。
寄存器R8~R12有两个分组的物理寄存器。
一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。
在发生FIQ中断后,处理器不必为保护寄存器而浪费时间,从而加速了FIQ的处理速度。
寄存器R13、R14分别有6个分组的物理寄存器。
1个用于用户和系统模式,其余5个分别用于5种异常模式。
寄存器R13通常作为堆栈指针(SP),用于保存待使用的寄存器的内容。
寄存器R14称为链接寄存器(LR),在结构上有两个特殊功能:
当使用BL指令调用子程序时,返回地址将自动存入R14中;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。
寄存器R15称为程序计数器(PC),它指向正在“取指”的指令。
寄存器CPSR为当前程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。
每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。
Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:
8个通用寄存器R0~R7,在汇编语言中寄存器R0~R7为通用寄存器,对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。
程序计数器(PC);
堆栈指针(SP),堆栈指针SP对应ARM状态的寄存器R13。
每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。
注意:
在发生异常时,处理器自动进入ARM状态。
链接寄存器(LR),链接寄存器LR对应ARM状态寄存器R14。
注意:
在发生异常时,处理器自动进入ARM状态。
当前程序状态寄存器(CPSR)。
在两种状态中,寄存器R0-R7是低端寄存器,R8-R12是高端寄存器,在Thumb状态中,高端寄存器的访问是受到限制的,只有MOV、CMP和ADD指令可以对其访问,可以用于数据的快速暂存。
8、当前程序状态寄存器的用法P36-39
ARM内核包含1个CPSR和5个仅供异常处理程序使用的SPSR。
CPSR反映当前处理器的状态,其包含:
4个条件代码标志(负标志N、零标志Z、进位标志C和溢出标志V);
2个中断禁止位(IRQ禁止与FIQ禁止);
5个对当前处理器模式进行编码的位(M[4:
0]);
1个用于指示当前执行指令的位(ARM指令还是Thumb指令)。
其格式如下:
各标志位的含义如下:
负标志N:
运算结果的第31位值,记录标志设置操作的结果;
零标志Z:
如果标志设置的操作为0,则置位;
进位标志C:
记录无符号加法溢出,减法无借位,循环移位;
溢出标志V:
记录标志设置操作的有符号溢出。
中断禁止控制位I和F:
当控制位I置位时,IRQ中断被禁止;
当控制位F置位时,FIQ中断被禁止。
处理器状态位T:
当控制位T置位时,处理器正在Thumb状态下运行;
当控制位T清零时,处理器正在ARM状态下运行。
警告:
绝对不要强制改变CPSR寄存器中的控制位T。
如果这样做,处理器将进入一个无法预测的状态。
处理器模式位M0~M4:
注意:
不是所有模式位的组合都定义了有效的处理器模式,如果将非法值写入M[4:
0]中,处理器将进入一个无法恢复的模式。
保留位:
CPSR中的保留位被保留将来使用。
当改变CPSR标志和控制位时,请确认没有改变这些保留位。
另外,请确保您的程序不依赖于包含特定值的保留位,因为将来的处理器可能会将这些位设置为1或者0。
9、ARM体系的异常、中断及其向量表P39(异常中断的进入与退出是重中之重)
当多个异常同时发生时,一个固定的优先级决定系统处理它们的顺序:
当一个异常导致模式切换时,内核自动的做如下处理:
(即异常的进入)
将异常处理程序的返回地址(加固定的偏移量)保存到相应异常模式下的LR;
将CPSR的当前值保存到相应异常模式下的SPSR;
设置CPSR为相应的异常模式;
设置PC为相应异常处理程序的中断入口向量地址,跳转到相应的异常中断处理程序执行;
当异常处理程序结束时,异常处理程序必须:
(即异常的退出)
返回到发生异常中断的指令的下一条指令处执行,即就是说将LR中的值减去偏移量后移入PC;
将SPSR的值复制回CPSR;
清零在入口处置位的中断禁止标志。
10、ARM体系的存储系统P48(了解“大端”与“小端”)
存储器系统有两种映射机制:
小端存储器系统:
在小端格式中,数据的高字节存放在高地址中。
大端存储器系统:
在大端格式中,数据的高字节存放在低地址中。
第3章ARM7TDMI(-S)指令系统
1、ARM处理器的8种寻址方式P52(可能考名词解释)
寄存器寻址:
操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。
寄存器寻址指令举例如下:
MOVR1,R2;将R2的值存入R1
SUBR0,R1,R2;将R1的值减去R2的值,结果保存到R0
立即寻址:
立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。
立即寻址指令举例如下:
SUBSR0,R0,#1;R0减1,结果放入R0,并且影响标志位
MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器
寄存器移位寻址:
寄存器移位寻址是ARM指令集特有的寻址方式。
当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。
寄存器移位寻址指令举例如下:
MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0;即是R0=R2×8
ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1相;“与”操作,结果放入R1
寄存器间接寻址:
寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。
寄存器间接寻址指令举例如下:
LDRR1,[R2];将R2指向的存储单元的数据读出;保存在R1中
SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储;单元的内容交换
基址寻址:
基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。
基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。
基址寻址指令举例如下:
LDRR2,[R3,#0x0C];读取R3+0x0C地址上的存储单元;的内容,放入R2
STRR1,[R0,#-4]!
;先R0=R0-4,然后把R1的值寄存;到保存到R0指定的存储单元
多寄存器寻址:
多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。
多寄存器寻址指令举例如下:
LDMIAR1!
{R2-R7,R12};将R1指向的单元中的数据读出到;R2~R7、R12中(R1自动加1)
STMIAR0!
{R2-R7,R12};将寄存器R2~R7、R12的值保;存到R0指向的存储;单元中;(R0自动加1)
堆栈寻址:
堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。
所以可以组合出四种类型的堆栈方式:
满递增:
堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如LDMFA、STMFA等;
空递增:
堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如LDMEA、STMEA等;
满递减:
堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如LDMFD、STMFD等;
空递减:
堆栈向下增长,堆栈指针向堆栈下的第一个空位置。
指令如LDMED、STMED等。
相对寻址:
相对寻址是基址寻址的一种变通。
由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。
相对寻址指令举例如下:
BLSUBR1;调用到SUBR1子程序
BEQLOOP;条件跳转到LOOP标号处
...
LOOPMOVR6,#1
...
SUBR1...
2、ARM指令集中各典型指令的用途P58
小例子:
(可能考选择或填空)
加载指令:
LDR/STR——加载/存储指令
LDM/STM——多寄存器加载/存储指令
SWP——寄存器和存储器交换指令
数据处理指令:
见书上P70-71
乘法指令:
3、ARM分支指令和杂项指令P72-77
分支指令:
B指令为简单的跳转指令,不附带其它功能。
跳转范围限制在当前指令的±32M字节地址内(ARM指令为字对齐,最低2位地址固定为0)。
BL指令除了具有跳转功能,还能在跳转之前将下一条指令的地址拷贝到R14(即LR)链接寄存器中,它适用于子程序调用。
跳转范围限制在当前指令的±32M字节地址内。
BX指令除了具有跳转功能,还能在跳转的同时切换处理器状态。
其跳转范围不受限制。
杂项指令:
在ARM指令集中杂项指令共有3条,它们非常重要,特别是与操作系统的使用息息相关:
1.软件中断产生指令:
SWI,主要用于用户程序调用操作系统的系统服务。
2.程序状态寄存器读指令:
MRS,对状态寄存器CPSR和SPSR进行读操作。
3.程序状态寄存器写指令:
MSR,对状态寄存器CPSR和SPSR进行写操作。
4、ARM伪指令P78
ARM伪指令有四条:
1.小范围地址读取指令:
ADR,将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。
2.中等范围地址读取指令:
ADRL,将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。
3.大等范围地址读取指令:
LDR,用于加载32位的立即数或一个地址值到指定寄存器。
4.空操作指令:
NOP,在汇编时将会被代替成ARM中的空操作,比如可能是“MOVR0,R0”指令等。
NOP可用于延时操作。
5、ARM指令集和Thumb指令集的异同
同:
Thumb指令的格式与使用方式与ARM指令集类似,它也具有以下种类的指令:
存储器访问指令
数据处理指令
分支指令
杂项指令
伪指令
异:
Thumb指令集较ARM指令集有如下限制:
只有B指令可以条件执行,其它指令都不能条件执行;
分支指令的跳转范围有更多限制;
数据处理指令的操作结果必须放入其中一个;
单寄存器访问指令,只能操作R0~R7;
LDM和STM指令可以对R0~R7的任何子集进行操作;
第4章LPC2000系列ARM硬件结构
1、了解硬件结构P90
2、存储器重映射的概念及其作用P106
给物理存储器分配逻辑地址的过程称为存储器映射。
将已经过映射的存储器再次映射的过程称为存储器重映射,它使同一物理存储单元出现多个不同的逻辑地址(增加了代码的可移植性和可通用性)。
这些存储单元主要包括引导块“BootBlock”和用于保存异常向量表的少量存储单元。
引导块(BootBlock)是芯片设计厂家在LPC2000系列ARM内部固化的一段代码,用户无法修改或删除。
这段代码在芯片复位后被首先运行,其功能主要是:
判断运行哪个存储器上的程序;
检查用户代码是否有效;
判断芯片是否被加密;
芯片的在应用编程(IAP)以及在系统编程功能(ISP)
3、时钟部件——锁相环PLL(可能考大题)P126
PLL频率计算:
可以得出以下几个等式:
Fosc=Fcco/(2×p×M)Fcco=Fosc×(2×p×M)
Fcclk=Fcco/(2×p)Fcco=Fcclk×(2×p)
最后得出PLL的输出频率(当PLL激活并连接时)为:
Fcclk=M×Fosc或Fcclk=Fcco/(2×P)
CCO输出频率为:
Fcco=Fcclk×2×P或Fcco=Fosc×M×2×P
PLL设置举例:
系统要求Fosc=10MHz,Fcclk=60MHz。
根据这些要求:
确定Fcclk=60MHz;
选择Fosc=10MHz;
计算M=Fcclk/Fosc=60MHz/10MHz=6。
M-1=5,所以写入PLLCFG[4:
0]=00101;
计算P=Fcco/(Fcclk*2),其中Fcco为156~320MHz。
当Fcco=156MHz时,P=156MHz/(2*60MHz)=1.3当Fcco=320MHz时,P=2.67
P取整数2,所以写入PLLCFG[6:
5]=01。
4、外部存储器控制器EMC及引脚连接模块P152-178
5、GPIOP179
6、向量中断控制器P1