嵌入式系统作业.docx
《嵌入式系统作业.docx》由会员分享,可在线阅读,更多相关《嵌入式系统作业.docx(25页珍藏版)》请在冰豆网上搜索。
嵌入式系统作业
嵌入式系统2011作业
第1章嵌入式系统概述
1、什么是嵌入式系统?
答:
嵌入式系统指的是以应用为中心和以计算机技术为基础的,并且软硬件是可裁剪的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标严格要求的专用计算机系统。
2、与通用计算机相比,嵌入式系统有哪些特点?
答:
1:
嵌入式系统通常是面向特定应用的;
2:
嵌入式系统功耗低、体积小、集成度高、成本低;
3:
嵌入式系统具有较长的生命周期;
4:
嵌入式系统具有固化的代码;
5:
嵌入式系统开发需要专用开发工具和环境;
6:
嵌入式系统软件需要RTOS开发平台;
7:
嵌入式系统开发人员以应用专家为主;
8:
嵌入式系统是知识集成系统。
3、根据嵌入式系统的复杂程度,嵌入式系统可分为哪4类?
答:
1:
单个微处理器;
2:
嵌入式处理器可扩展的系统;
3:
复杂的嵌入式系统;
4:
在制造或过程控制中使用的计算机系统。
4、嵌入式微处理器有哪几类?
试举例说明。
答:
嵌入式微处理器,例如:
Am186/88、386EX、SC-400.
嵌入式微控制器,例如:
8051、P51XA、MCS-251.
嵌入式DSP处理器,例如:
TMS320系列、DSP56000系列.
嵌入式片上系统,例如:
TriCore、M-Core、Smarrt-XA。
5、从硬件系统来看,嵌入式系统由哪几部份组成?
画出简图。
答:
P11图1-4
6、嵌入式微处理器和嵌入式微控制器分别由哪些部件组成?
两者有何区别?
答:
(1)组成:
嵌入式微处理器:
包括指令执行部件与总线接口部件。
嵌入式微控制器(单片机):
将整个系统集成到一个芯片上。
(2)两者区别:
嵌入式微处理器:
如果要构成一个系统,完成特定功能必须扩展Rom、RAM、总线接口等器件.并且将系统集成在一块板上。
嵌入式微控制器:
一个芯片就是一个系统,芯片包括Rom、RAM、I/O接口、通用接口(比如UART)
特殊接口(比如网络接口、Can接口).
不用外扩接口电路,即可完成一定功能。
第2章ARM微处理器硬件结构
2.1哈佛体系结构和冯·诺依曼体系结构有何不同?
答:
冯·诺依曼结构:
处理器使用一组总线(数据总线、地址总线、控制总线)连接程序存储器、数据存储器、接口器件。
所有器件共享一个地址空间。
并且程序存储单元与数据存储单元存储位数一致。
冯·诺依曼结构由于总线瓶颈,不适合流水线作业。
哈佛体系结构:
有两组总线。
一组总线用于访问程序存储器;一组总线用于访问数据存储器。
程序与数据各自有自己独立的存储空间。
程序存储单元与数据存储单元存储位数可以不一致。
哈佛体系结构非常适合流水线作业。
2.2回答下列关于ARM编程模式的问题
(1)在该模式下有多少通用寄存器
(2)CPSR的作用是什么
(3)Z位的作用是什么
(4)程序计数器保存在何处
答
(1)31个通用寄存器
(2)为状态寄存器
●条件标志位:
保存指令执行的状态
N=0结果正数
=1结果负数
C借位进位标志
Z=0结果非0
=1结果0
O=0结果未溢出
=1结果溢出
●控制标志位:
控制程序的执行
T=0ARM状态
=1Thumb状态
I=0允许普通中断
=1不允许普通中断
Q=0允许快速中断
=1不允许快速中断
M4..M0:
工作模式
(3)Z=1运算结果为0
Z=0运算结果不为0
(4)R15(PC)
2.3下列的arm条件码的含义是什么
(1)EQ
(2)NE
(3)MI
(4)VS
(5)GE
(6)LT
答
(1)z=1相等
(2)z=0不相等
(3)n=1负数
(4)v=1溢出
(5)n=v带符号数大于或等于
(6)n<>v带符号数小于
2.4arm处理器有几种工作模式?
各种工作模式有什么特点?
答
有七种工作模式,
用户模式(usr)正常的程序执行状态
快速中断模式(fiq)用于高速数据处理或通道处理
外部中断模式(irq)用于通用的中断处理
管理模式(svc)操作系统的保护模式
中止模式(abt)用于虚拟存储及存储保护
未定义模式(und)用于支持硬件协处理器的软件仿真
系统模式(sys)运行特权级的操作系统任务
2.5arm处理器共有多少个寄存器?
这些寄存器按其在用户编程中的功能如何进行划分?
这些寄存器在使用中有什么特殊之处?
答
37个寄存器,其中有31个通用寄存器,其中包括程序计数器pc,6个状态寄存器
寄存器均为32位
在七种模式中R0~R7不分组,R8~R14按模式分组,R15为程序计数器,CPSR为状态寄存器,SPSR为保存程序状态寄存器。
R13为堆栈指针寄存器,R14为链接寄存器。
CPSR在各种模式下多可以访问,而在用户模式及系统模式下SPSR不可以被访问。
2.6若寄存器R1=0x01020304,分别按照大端模式和小端模式存储在0x30000字单元中,试分别写出两种模式下内存存储内容,并标出内存地址
答
大端模式
[0x30000]=0x01
[0x30001]=0x02
[0x30002]=0x03
[0x30003]=0x04
小端模式
[0x30000]=0x04
[0x30001]=0x03
[0x30002]=0x02
[0x30003]=0x01
2.7ARM存储器的存储周期有几种类型?
对应于Cache访问和存储器访问是何存储周期?
答:
ARM存储器有4种存储周期:
空闲周期,非顺序周期,顺序周期,协处理器寄存器传送周期。
一般地,对应于Cache访问的存储周期是:
非顺序周期。
对应于存储器访问的存储周期是:
顺序周期和非顺序周期。
2.8何谓Cache?
简述Cache的工作原理。
答:
高速缓存器:
弥补主存速度,在CPU与主存之间设置的高速,小容量存储器,构成Cache-主存存储层次,速度是Cache的,容量是主存的。
工作原理:
当CPU要访问Cache时,CPU送来主存地址,放到主存地址寄存器中。
然后通过地址变换部件把主存地址中的块号M变成Cache的块号m,并放到Cache地址寄存器中;同时将主存地址中的块内地址N直接作为Cache的块内地址n装入到Cache地址寄存器中。
如果地址变换成功,就用得到的Cache地址去访问Cache,从Cache中取出数据送到CPU中。
如果地址变换不成功,则产生Cache失效信息,接着使用主存地址直接去访问主存储器,从主存储器中读出一个字送到CPU,同时将从主存储器中读出来的数据装入到Cache中去。
此时如果Cache已经满了,则需要采用某种Cache替换策略把不常用的块先调出到主存储器中相应的块中,以便腾出空间来存放新调入的块。
教材:
图2-12Cache工作原理图
2.9何谓写通Cache和写回Cache?
两者有何区别?
答:
写通法:
write-throught,指CPU在执行写操作时,必须把数据同时写入Cache和主存。
写回法:
write-back,指CPU在执行写操作时,被写的数据只写入Cache,不写入主存。
仅当需要替换时,才把已经修改的Cache块写回到主存中。
区别在于写通法在Cache中的内容发生改变时,相应的存储器中的内容会立即被修改,而写回法则是等到替换时才会使存储器中的内容发生改变。
2.10ARM的MMU主要实现什么功能?
答:
ARM的MMU主要实现的功能:
(1)虚拟存储空间到物理存储空间的映射。
(2)存储器访问权限的控制。
(3)设置虚拟存储空间的缓冲特性。
2.11简述MMU使能时存储访问过程。
答:
当ARM处理器请求存储访问时,对于允许缓存的存储访问,如果Cache命中,直接操作数据即可。
对于允许缓存且Cache不命中或不允许缓存的存储访问,首先在TLB中查找虚拟地址。
如果该虚拟地址对应的地址变换条目不在TLB中,CPU将从位于内存中的页表中查询对应于该虚拟地址的地址变换条目,并把相应的结果添加到TLB中。
如果TLB已经满了,则需要根据一定的替换算法进行替换。
当得到了需要的地址变换条目后,将进行以下操作。
(1)得到该虚拟地址对应的物理地址。
(2)根据条目中C控制位和B控制位决定是否缓存该内存访问的结果。
(3)根据存储权限控制位和域访问控制位确定该内存访问是否被允许。
如果该内存访问不被允许,CP15将向ARM处理器报告存储访问中止。
(4)对于不允许缓存的存储访问,使用步骤
(1)中得到的物理地址访问内存。
对于允许缓存的存储访问,如果Cache命中,则忽略物理地址;如果Cache没有命中,则使用步骤
(1)中得到的物理地址访问内存,并将该块数据读取到Cache中。
2.12ARM支持的物理页有几种类型?
其容量为何值?
答:
ARM支持的物理页通常有4种类型,其容量值如下:
段:
大小为1MB的存储块。
大页:
大小为64KB的存储块。
小页:
大小为4KB的存储块。
极小页:
大小为1KB的存储块。
2.13简述基于段的地址变换过程。
答:
ARM基于段的地址变换过程如图所示。
(教材:
图2-19基于段地址的地址变换)
第3章ARM寻址方式与指令系统
1.试述ARM处理器对异常中断的响应过程。
答:
异常处理过程:
当异常发生时,
(1)将返回地址存入对应异常模式下寄存器R14。
(2)当前寄存器CPSR存入对应异常模式下的SPSR.
(3)自动修改CPSR[4:
0],进入相应的异常模式
(4)如果异常模式为复位或快速中断(FIQ),则
设置CPSRF=1禁止所有FIQ中断
设置CPSRI=1禁止所有IRQ中断
(5)转到中断服务程序去执行
2.如何从异常中断处理程序中返回?
需要注意哪些问题?
答:
(1)中断处理完成后返回指令:
LDMFDSP!
{,RPC}
(2)注意的问题
●进入中断时,如果屏蔽了所有FIQ或IRQ中断,中断返回前要开放所有FIQ或IRQ中断
●进入异常时,如果断点保护的是PCLR,依据3流水线技术,恢复时LR-#4=〉PC
●状态保持寄存器SPSRCPSR
3.ARM指令的寻址方式有几种?
试分别叙述其各自的特点并举例说明。
答:
9种寻址方式。
(1)立即数寻址:
操作数本身直接在指令中给出,取出指令也就获得了操作数,这个操作数也称为立即数。
例:
ADDR0,R1,#5;R0=R1+5
(2)寄存器寻址:
所有操作数都为寄存器
例:
ADDR0,R1,R2;R0=R1+R2
(3)寄存器移位寻址:
操作数由寄存器的数值做相应移位而得到,移位的方式在指令中以助记符的形式给出,而移位的位数可用立即数或寄存器寻址方式表示。
例:
MOVR0,R1,LSLR3;R0=R1逻辑左移R3位
(4)寄存器间接寻址:
寄存器中的值为存储器地址,存储单元的内容为实际的操作数
例如:
LDRR0,[R1]
(5)基址加变址寻址:
将寄存器(称为基址寄存器)的值与指令中给出的偏移地址量相加,所得结果作为操作数的存储器地址
例如:
LDRR0,[R1,#5];//存储器地址=R1+#5
(6)相对寻址:
PC作为基址寄存器,操作数地址=PC+偏移量
例如:
BEQprocess1
……
process1
(7)多寄存器寻址:
在多寄存器寻址方式中,一条指令可实现一组寄存器值的传送。
例如:
LDMIAR0,{R1-R5}
;R1=[R0]
;R2=[R0+4]
;R3=[R0+8]
;R4=[R0+12]
;R5=[R0+16]
(8)块拷贝寻址块:
可实现连续地址数据从存储器的某一位置拷贝到另一位置
例:
LDRR0,=0x40003000
LDRR1,=0x40003200
LDMIAR0,{R2-R6};
STMIAR1,{R2-R6};
(9)堆栈寻址:
按照“后进先出”(“先进后出”)的原则进行数据存储的寻址方式
例如:
STMFDR13!
,{R0,R1,R2,R3,R4};//进栈指令
LDMFDR13!
,{R0,R1,R2,R3,R4};//出栈指令
4.假设R0的内容为0x8000,寄存器R1,R2的内容分别为0x01与0x10,存储器内容为0.连续执行下述指令后,说明每条指令执行后PC如何变化?
存储器及寄存器的内容如何变化?
STMIBR0!
{R1,R2}
LDMIAR0!
{R1,R2}
解:
执行STMIBR0!
{R1,R2}
●PC=PC+4
●[0x8004]=0x01
●[0x8008]=0x10
●R1,R2内容不变
●R0=R0+8=8008
注意:
黑色为指令执行前,蓝色
为指令执行后
执行LDMIAR0!
{R1,R2}
●PC=PC+4
●R1=[0x8008]=0x00000010
●R2=[0x800C]=未知
●R0=R0+8=0x8010
5.在ADS环境下,利用全局变量和局部变量声明伪操作及其赋值伪操作,分别举例来定义算术变量,逻辑变量和串变量。
解:
(1)局部变量:
LCLAnum1;定义一个局部的数字变量,变量名为num1
LCLLl2;定义一个局部的逻辑变量,变量名为l2
LCLSstr3;定义一个局部的字符串变量,变量名为str3
num1SETA0xabcd;将该变量赋值为0xabcd
l2SETL{FALSE};将该变量赋值为真
str3SETS“Hello!
”;将该变量赋值为“Hello!
”
(2)全局变量
GBLAnum1;定义一个全局的数字变量,变量名为num1
num1SETA0xabcd;将该变量赋值为0xabcd
GBLLl2;定义一个全局的逻辑变量,变量名为l2
l2SETL{FALSE};将该变量赋值为假
GBLSstr3;定义一个全局的字符串变量,变量名为str3
str3SETS“Hello!
”;将该变量赋值为“Hello!
”
(3)变量赋值
LCLAnum1;定义一个局部的数字变量,变量名为num1
num1SETA0x1234;将该变量赋值为0x1234
LCLSstr3;定义一个局部的字符串变量,变量名为str3
str3SETS“Hello!
”;将该变量赋值为“Hello!
”
LCLLl2;定义一个局部的逻辑变量,变量名为l2
l2SETL{FALSE};将该变量赋值为真
6.写出下述内存变量x,y,z的地址
beginequ0x2000
mapbegin
xfield4
yfield8
zfield16
解:
x,y,z的地址分别为0x20000,0x20004,0x2000c
7.写出执行以下计算的指令序列,其中X,Y,Z,R,W均为32位无符号数,两数乘积不超过32位数范围。
(1)Z←W-(X+6)-(R+9)
(2)Z←(W*X)/16
解:
(1)LDRR4,=X
LDRR2,[R4];R2<-[X]
ADDR2,R2,#6;R2=X+6
LDRR5,=R
LDRR3,[R5];R3←R
ADDR3,R3,#9
LDRR6,=W
LDRR1,[R6];R1←W
SUBR1,R1,R2;W-(X+6)
SUBR1,R1,R3;W-(X+6)-(R-9)
LDRR0,=Z
STRR1,[R0];存Z
(2)LDRR4,=X
LDRR2,[R4];R2←X
LDRR6,=W
LDRR1,[R6];R1←W
MULR1,R1,R2
MOVR1,R1,LSR#4
LDRR0,=Z
STRR1,[R0];存Z
8.假定R0,R1中的内容为带符号数,R2,R3中的内容为无符号数,写出指令实现以下判断。
(1)若R3的内容超过R2的内容,则转去执行EXCEED
(2)若R1的内容超过R0的内容,则转去执行EXCEED
(3)若R2的内容等于0,则转去执行ZERO
(4)若R0的内容和R1的内容相等,则转去执行EQU
解:
(1)CMPR3,R2
BHIEXCEED
(2)CMPR1,R0
BGTEXCEED
(3)CMPR2,#0
BEQZERO
(4)CMPR0,R1
BEQEQU
9.已知数据段中的整数数组x和y,试将x中的数按从大至小的顺序排序,并存入y数组。
解:
思路:
1.采用冒泡排序对数组X排序,N-1次循环,每次比较个数比上次减一;
2.采用多字数据拷贝方法,将数组X中排好序的数据存入数组Y。
AREASort,CODE,READONLY
NumEQU10
ENTRY
start
MOVr3,#0x0;临时变量
MOVr4,#0x0;临时变量
MOVr1,#num;字数,相当于外层循环变量
A1
LDRr0,=X;相当于X数组指针
MOVr2,r1;r2为内层循环变量
A2
LDRr3,[r0],#4;取以r0为地址的数据
LDRr4,[r0],#-4取以原r0+4为地址的数据,并恢复r0
CMPr3,r4
BGTA3;若r3>r4,则不需交换
STRr4,[r0],#4;交换原r3与r3+4中的内容
STRr3,[r0],#-4恢复原r0
A3
ADDr0,r0,#4;形成下一个比较地址
SUBr2,r2,#1;内层循环计数减1
CMPr2,#0
BNEA2
SUBr1,r1,#1;外层循环计数减1
CMPr1,#0
BNEA1
;至此完成X数组中的数据排序,以下是将数组X中已排好序的数据存入数组Y
LDRr0,=x;即源数据地址
LDRr1,=y;即目的数据地址
MOVr2,#num;传送个数
MOVsp,0x400;设置堆栈指针
Blockcopy
MOVr3,r2,LSR,#3;字数/8
BEQcopywords;少于8,转
STMFDsp!
{r4-r11};入栈保护
octcopy
LDMIAr0!
{r4-r11};加载8个字
STMIAr1!
{r4-r11};存入目的地址
SUBSr3,r3,#1
BNEoctcopy
LDMFDsp!
{r4-r11};恢复
copywords
ANDSr2,r2,#7
BEQstop
wordcopy
LDRr3,[r0],#4;;加载1个字
STRr3,[r1],#4;
SUBSr2,r2,#1
BNEwordcopy
stop
MOVr0,#0x18
LDRr1,=0x20026
SWI0x123456
AREAArrayData,DATA,READWRITE
xDCD32,8F,74,1B,39,0D8,06,0A1,78,23
yDCD0,0,0,0,0,0,0,0,0,0
END
10、有100个有符号的字数据,存放在内存BUFF中,试编写完整的程序(包括代码段、数据段),从中找出最大值、最小值,并分别放入内存单元MAX、MIN中。
答:
AREASearch,CODE,READONLY;代码段
CODE32
BUFFDCD23,54,34,64,35,34,……,98,0F5,39;定义100个有符号字数据
NUMEQU100;定义数据个数
ENTRY
start
LDRR3,=BUFF;设置初始地址
LDRR4,NUM;取数据个数
LDRR0,[R3];R0存放最大数
LDRR1,[R3];R1存放最小数
loop
LDRR2,[R3],#4;取比较数据
CMPR2,R0
MOVGTR0,R2;若取出的数大于R0中数据,则更新R0
CMPR2,R1
CMPLTR1,R2;若取出的数小于R1中数据,则更新R1
SUBSR4,#0x01;计数减1
BNEloop;计数未完,继续
LDRR3,=MAX
STRR0,[R3]
LDRR3,=MIN
STRR1,[R3]
stop
MOVR0,#0x18;返回系统
LDRR1,0x20026
SWI0x123456
AREADefineData,DATA,READWRITE;数据段
MAXDCD0;最大值单元
MINDCD0;最小值单元
END
11、编写1+2+3+…+100的汇编程序。
答:
/*R0中为最后之和*/
AREAGetSum,CODE,READONLY
CODE32
ENTRY
startMOVR0,#0x0;R0为累加和
MOVR1,#0x01;初始值为1,以后逐次加1
loopADDR0,R0,R1
ADDR1,R1,#1
CMPR1,#100
BLSloop;计数未完,继续
stopMOVR0,#0x18;返回系统
LDRR1,0x20026
SWI0x123456
END
12、如何实现128位数的减法?
举例说明。
答:
例如:
R3R2R1R0←R3R2R1R0-R7R6R5R4
SUBSR0,R0,R4;加“S”会影响状态位,使后面的SBC有意义
SBCSR1,R1,R5
SBCSR2,R2,R6
SBCR3,R3,R7
13、将存储器中起始地址M1处的4个字数据移动到地址M2处。
答:
M1DCD321,5345,7454,32;源,4个字
M2DCD0,0,0,0;目的
LDRR0,=M1
LDRR1,=M2
LDMIAR0!
{R2-R5}
STMIAR1!
{R2-R5}
14、参考CPSR寄存器中各标志位的含义,使处理器工作在系统模式下。
答:
当处理器处于用户模式时,不能进入系统模式;
当处理器处于特权模式时,用指令MSRCPSR_c,#0XDF,能使处理器进入系统模式。
15、用跳转指令实现两段程序间的切换。
答:
B跳转指令可附加条件域,实现-32M~+32M范围的跳转;
BL带返回的跳转指令保存返回地址,多用于子程序调用,实现程序切换;
BX带状态切换的跳转指令程序切换时,带有ARM和Thumb的状态切换;
BLX带返回和状态切换的跳转指令保存返回地址,并带有状态切换。
举例:
LDRR0,=5;R0初值为5
func1SUBR0,R0,#1
CMPR0,#2
BEQfunc2;R0减为2则切换至func2
BNEfunc1
func2ADDR0,R0,#1
CMPR0,#5
BEQfunc1;R0增至5时切换至func1
BNEfu