嵌入式系统概述
1.什么是嵌入式系统?有何特点?
嵌入式系统是以应用为中心,以计算机技术为基础,且软、硬件可裁剪的,
适用于系统对功能、可靠性、体积、功能、功耗成本具有严格要求的计算机系统,
他一般由嵌入式微处理器。外围硬件设备,嵌入式操作系统和用户应用程序组成。
用于实现对其他设备的控制,监视、处理的功能。
特点:技术先进,系统内核小,专用性强,系统精简,实时性高,
软件开发标准化,不具备二次开发的能力
2、嵌入式系统可以分为几层,每一层完成哪些功能?
I/O接口,组成嵌入式系统的基础,实现逻辑运算和算术运算;
中间层:相关底层硬件的备至和初始化,设备驱动程序
软件层:主要由RTOS,文件系统,图形用户接口,网络系统和通用组件模块组成,是软件开发的基础;
功能层:完成被控制对象的控制功能。
3嵌入式操作系统中硬件抽象层有什么特点?
硬件抽象层又称为中间层,是介于硬件层和软件层之间的,
它将硬件层和软件层分开。具有硬件相关性和操作系统相关性。
4.嵌入式处理器分为哪几类?他们有何特点?
嵌入式微处理器,嵌入式微控制器,嵌入式DSP处理器,嵌入式片上系统
嵌入式微处理器:处理能力强,具有较高的性能,价格相应较高
嵌入式微控制器:单片化,体积小,功耗小,成本低,可靠性提高,价格低廉,功能优良,品种数量多;
嵌入式DSP处理器:专用于信号处理,在系统结构和指令算法方面有特殊设计,具有较高的编程效率和指令执行速度。
嵌入式片上系统:实现软硬件的无缝结合,具有较高的综合性,
绝大部分系统构件在系统内部,系统简介,减少了系统的体积和功耗,提高了系统的设计效率和可靠性。
5.简述嵌入式系统的开发过程。
嵌入式系统的开发过程可以分为需求分析、体系结构设计、软件设计、硬件设计、系统集成和系统优化与测试6个阶段。
自下而上和自上而下的设计流程
ARM技术及体系结构
1.什么是哈佛结构?与普林斯顿结构有何区别?
哈佛结构是一种将程序中指令和数据分开存储的存储器结构。
即哈佛结构中程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。
普林斯顿结构(冯·诺伊曼结构)是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置。这便是。这便是两种结构的区别。
2.什么是RSIC?什么是CSIC?简述他们的特点与差别。
RSIC是精简指令集计算机,CISC是复杂指令集计算机。两者的区别在于不同的CPU设计理念和方法。
对于CISC:
⑴ 在CSIC结构的指令系统中,各种指令的使用频率相差悬殊。有80%的指令只在20%的运行时间内才会用到。
⑵ CISC结构指令系统的复杂性带来了计算机体系结构的复杂性,这不仅增加了研制时间和成本,而且还容易造成设计错误。
⑶ 在CISC结构指令系统中,由于各条指令的功能不均衡性,不利于采用先进的计算机体系结构技术来提高系统的性能。
对于RISC:
⑴ 简化指令集,只保留常用的基本指令;
⑵ 设计大量的通用存储器,减少访存的次数;
⑶ 采用简单的指令格式、规整的指令字长和简单的寻址方式。
3.ARM7处理器是几级流水线?在ARM7处理器中,“PC指向的是下一条要执行的指令”,这句话对吗?为什么?
ARM7处理器采用三级流水线。
“PC指向的是下一条要执行的指令”,这句话不对。在ARM处理器中将PC程序计数器定义到R15寄存器,
无论处理器处于何种状态,PC总是指向“正在取值”指令的地址,
一般来说,人们习惯性的约定将“正在执行的指令作为参考点”,成为当前第一条指令,那么PC总是指向随后的第三条指令,或者说PC总是指向当前正在执行的指令地址再加上2条指令的地址,即指向正在执行指令的下下一条指令,而不是指向下一条要执行的指令。
4.ARM处理器的工作状态分为哪二种?ARM处理器又是怎么定义和标志的?
ARM处理器的工作状态分为ARM状态和Thumb状态.
这两种状态有程序状态字CPSR中T标志位确定,为0时处理器工作在ARM状态,为1时处理器工作在Thumb状态。
5.ARM处理器的工作状态分为ARM状态和Thumb状态,这两种状态有程序状态字CPSR中T标志位确定,为0时处理器工作在ARM状态,为1时处理器工作在Thumb状态。
ARM7TDMI处理器内核包含2套指令系统,分别为ARM指令集和Thumb指令集,两种指令集的特点是:
ARM指令集:处理器执行32位字对齐方式的ARM指令,每条ARM指令长度为32位,指令的功能强大。
Thumb指令集:处理器执行16位字对齐方式的Thumb指令,每条Thumb指令长度为16位,是ARM指令功能的子集。
ARM7TDMI指令系统
1.ARM指令的寻址方式有几种?并指出下列指令中的寻址方式。
ARM指令的寻址方式有8种
分别为立即寻址、寄存器寻址、寄存器移位寻址、寄存器间接寻址、
基址变址寻址、相对寻址、多寄存器寻址、堆栈寻址。
⑴ SUB R0, R1, R2 ;寄存器寻址
⑵ LDR R0, [R2] ;寄存器间接寻址
⑶ MVN R0, #0x0F2 ;立即寻址
⑷ LDMIA R0, {R1-R5} ;多寄存器寻址
⑸ STR R2, [R4, #0x02]! ;基址变址寻址
⑹ LDR R1, [R2, R3] ;基址变址寻址
⑺ MOV R1, R1, ROR #2 ;寄存器移位寻址
⑻ LDR R1, [R3], #0x04 ;基址变址寻址
2.指出下列指令是否正确,若不正确请说明原因。
⑴ MOVS R1, 101 ;不正确,立即寻址方式应该是#101
⑵ MVN R1, #0x10F ;错误,立即数超出范围
⑶ STMDA R11, {R2-R8}! ;错误,!位置错,
⑷ ADD R0!, R2, #4 ;错误,加法操作中无!符号
⑸ LDR R4, [R5]! ;指令本身正确
⑹ MRS PC, CPSR ;指令本身不报错,但有严重警告,但会导致无法预料的结果,不正确,MRS是将CPSR传送到通用寄存器中,但这里的通用寄存器不包括R15,即PC
⑺ LDMFDS R0!, { R5-R8, R2} ;错带S指令无法识别,序号
⑻ ADD R3, [R3], R7 ;不正确,ADD指令不能访问存储器
(9) LDR R11, [R15,R8] ! ;错误,R15作为PC指针,会产生不可预知的结果
(10) BXS R0 ;错误,切换状态不带S
3.试说明MOV指令、LDR加载指令和LDR伪指令三者的区别。
MOV指令是把立即数、寄存器或寄存器移位后的数送给目标寄存器,可能会影响标志位。
LDR指令是将存储器中的数据按给定地址加载到寄存器中,数据来自存储器,目标也是寄存器,不影响标志位。
LDR伪指令(LDR 目标寄存器,=表达式)用于加载32位的立即数或一个地址值到指定寄存器,形式上与LDR指令有区别。
4.解释B指令、BL指令与BX指令的功能差别,并举例说明其使用方法。
B指令是分支指令,BL指令是带链接的分支指令,BX是带状态切换的分支指令。
B指令“B WAITA”指跳转至标号WAITA处开始执行,B指令的跳转范围为±32M;
BL指令,实现程序跳转,完成子程序调用,并保持PC到链寄存器LR中,跳转范围±32M,举例“BL DELAY”完成的跳转至标号DELAY处执行,并把PC-4存入LR。
BX指令,带状态切换的跳转,比如“BX R0”表示跳转R0指定的地址开始执行,并查看R0[0]位的值,如果是1,对CPSR的T位置位,解释目标程序为Thumb指令,如果是0,对CPSR的T位清零,解释目标程序为ARM指令。
5.分析下列两段程序片断的功能,试用类C语言写出其等价功能。
(1)if(R0 > R1)
R0++;
else
R1++;
(2)if((R0 != 10)&&(R1 != 20))
R0 = R0+R1;
6.使用ARM汇编指令的条件执行功能,试用汇编语言实现下列两条C代码语句。 (1) if(x = = y) a = b + c; else a = b – c; (2) if(x = = y) && ( a = = b) c = c * 2+b;
1)
LDR R0, x
LDR R1, y
LDR R2, b
LDR R3, c
CMP R0,R1
ADDEQ R4,R2,R3
SUBNE R4,R2,R3
STR R4,a
(2)
LDR R0, x
LDR R1, y
LDR R2,a
LDR R3,b
LDR R4,c
CMP R0,R1
CMPEQ R2,R3,
MULEQ R4,R4,#2
ADD R4,R4,R3
STR R4,c
7.下列代码段是实现开IRQ中断和关IRQ中断功能,试补齐空白处内容。
⑴
MRS R0,CPSR
BIC R1,R0,#0x80
MSR CPSR_c, R1
⑵
MRS R1,CPSR
ORR R1, R1, #0x80
MSR CPSR_c, R1
|