嵌入式系统作业.docx

上传人:b****7 文档编号:24008223 上传时间:2023-05-23 格式:DOCX 页数:25 大小:157.12KB
下载 相关 举报
嵌入式系统作业.docx_第1页
第1页 / 共25页
嵌入式系统作业.docx_第2页
第2页 / 共25页
嵌入式系统作业.docx_第3页
第3页 / 共25页
嵌入式系统作业.docx_第4页
第4页 / 共25页
嵌入式系统作业.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

嵌入式系统作业.docx

《嵌入式系统作业.docx》由会员分享,可在线阅读,更多相关《嵌入式系统作业.docx(25页珍藏版)》请在冰豆网上搜索。

嵌入式系统作业.docx

嵌入式系统作业

嵌入式系统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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1