99网
您的当前位置:首页ARM嵌入式系统习题

ARM嵌入式系统习题

来源:99网
ARM嵌⼊式系统习题

ARM嵌⼊式系统习题第⼀章

1.什么是嵌⼊式系统?

以应⽤为中⼼、以计算机技术为基础、软件硬件可裁剪、适应应⽤系统对功能、可靠性、成本、体积、功耗严格要求的专⽤计算机系统。

2.与通⽤计算机相⽐,嵌⼊式系统有哪些特点?1).专⽤性强

2).功耗低、体积⼩、集成度⾼、成本低3).具有较强的⽣命周期4).具有固化的代码5).需专门开发⼯具和环境

6).嵌⼊式系统软件需要RTOS开发平台7).嵌⼊式系统开发⼈员以应⽤专家为主8).嵌⼊式系统是知识集成系统

3.根据嵌⼊式系统的复杂程度,嵌⼊式系统可分为哪4类?单个微处理器:

由单⽚嵌⼊式处理器组成,嵌⼊式处理器上集成了存储器I/O设备、接⼝设备(如A/D 转换器)等,再加上简单的元件如电源、时钟元件等就可以⼯作。

通常⽤于⼩型设备中,由供应商根据设备的⽤途设计。嵌⼊式处理器可扩展的系统:

这类嵌⼊式系统使⽤的处理器根据需要可以扩展存储器,也可以使⽤⽚上存储器,处理器⼀般容量在KB左右,字长为8位或16位。在处理器上扩充少量的存储器和外部接⼝,便构成嵌⼊式系统,通常⽤于过程控制、信号放⼤器、位置传感器以及阀门传动器等。复杂嵌⼊式系统:

处理器⼀般是16位、32位等,⽤于⼤规模的应⽤。软件量⼤,因此需要扩展存储器。扩展存储器⼀般在1MB以上,外部接⼝⼀般仍然集成在处理器上。

在制造或过程控制中使⽤的计算机系统

计算机与仪器、机械以及设备相连来控制装置的⼯作。计算机⽤于总体控制和监视,不是对单个设备直接控制。4.嵌⼊式微处理器有哪⼏类?试举例说明。

5.从硬件系统来看,嵌⼊式系统由哪⼏部分组成?画出简图。

6.嵌⼊式微处理器和嵌⼊式微控制器分别由哪些部件组成?两者有何区别?

嵌⼊式微处理器的基础是通⽤计算机中的CPU,即由通⽤计算机中的CPU演变⽽来。与通⽤计算机处理器不同的是,在实际嵌⼊式应⽤中,将微处理器装配在专门设计的电路板上,只保留和嵌⼊式应⽤紧密相关的母板功能,去除了其他冗余的功能部分,这样可以⼤幅度减⼩系统体积和功耗。

嵌⼊式微控制器⼜称单⽚机,顾名思义,就是将整个计算机系统集成到⼀块芯⽚中

和嵌⼊式微处理器相⽐,嵌⼊式微控制器的最⼤特点是单⽚化,体积⼤⼤减⼩,从⽽使功耗和成本下降、可靠性提⾼。第⼆章

1.哈佛体系结构和冯·诺依曼体系结构有何不同?

冯·诺依曼机:将数据和指令都存储在存储器中的计算机。

计算系统由⼀个处理单元(CPU)和⼀个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进⾏读或写。

哈佛机:为数据和程序提供了各⾃独⽴的存储器。程序计数器只指向程序存储器⽽不指向数据存储器2(1)在该模式中有多少通⽤寄存器?31个通⽤寄存器

(2)CPRS作⽤是什么?

寄存器CPSR为当前程序状态寄存器,可以在任何⼯作模式下被访问。状态标志:5个,N符号位,Z零标志,C进位,V溢出位,Q DSP运算溢出位。控制标志:4个,I中断允许,F快速中断允许,T状态选择,M[4:0] 处理器⼯作模式(3)Z位的作⽤是什么?

Z=1 表⽰运算的结果为零;Z=0表⽰运算的结果不为零;(4)程序计数器保存在何处?

寄存器R15为程序计数器(PC),它指向正在取指的地址。3.下列ARM条件码的含义的是什么?(1)EQ 相等(2)NE不相等

(3)MI负数(4)VS溢出

(5)GE带符号数⼤于或等于(6)LT带符号数⼩于

5.ARM处理器共有多少个寄存器?这些寄存器按其在⽤户编程中的功能如何进⾏划分?这些寄存器在使⽤中各有何特殊之处?

37个寄存器:31个通⽤寄存器,包括程序计数器PC;6个状态寄存器。

寄存器均为32位,分成7组,各⼯作模式拥有⾃⼰的寄存器组,只能访问⾃⼰的寄存器组。有些寄存器是重叠的,有些是⼯作模式特有的。

在不同的⼯作模式和处理器状态下,程序员可以访问的寄存器不尽相同。6.7

总线周期使⽤nMREQ和SEQ信号编码。4种不同类型的总线周期。

N周期:⾮顺序周期,最简单的总线周期;存储控制器必须启动存储器访问来满⾜这个请求;该⽅式存储系统常需要长的访问时间。(存储器访问周期)

S周期:顺序周期,实现总线上的突发传送;第⼀个周期,地址可与前⼀个内部周期相同;与⾮顺序访问相⽐响应更快,访问时间更短。(cache访问周期)

I周期:内部周期,不要求存储器访问;可⼴播下⼀次访问的地址以便开始译码,但存储控制器不允许进⾏存储器访问。(cache访问周期)

C周期:协处理器寄存器传递周期,通过数据总线向或从协处理器传送数据;不需存储周期,存储控制器不启动事务;传送期间,存储系统不允许驱动数据总线。8.

在Cache存储系统当中,把主存储器和Cache都划分成相同⼤⼩的块。主存地址可以由块号M和块内地址N两部分组成。同样,Cache的地址也由块号m和块内地址n组成。

9

写通法:write-throught,指CPU在执⾏写操作时,必须把数据同时写⼊Cache和主存。?写回法:write-back,指CPU在执⾏写操作时,被写的数据只写⼊Cache,不写⼊主存。仅当需要替换时,才把已经修改的Cache块写回到主存中。在ARM系统中,存储管理单元MMU主要⼯作:

(1)虚拟存储空间到物理存储空间的映射。在ARM中采⽤了页式虚拟存储管理。(2)存储器访问权限的控制。

(3)设置虚拟存储空间的缓冲的特性。11.12

ARM⽀持的存储块⼤⼩有4种:

(1)段(Section):⼤⼩为1MB的存储块。(2)⼤页(Large Pages):⼤⼩为KB的存储块。(3)⼩页(Small Pages):⼤⼩为4KB的存储块。(4)极⼩页(Tiny Pages):⼤⼩为1KB的存储块。13.14 1

将CPSR的内容保存到将要执⾏的异常中断对应的SPSR中,以实现对处理器当前状态、中断屏蔽位及各标志位的保存。各中断模式都有⾃⼰的SPSR寄存器。设置当前状态寄存器CPSR的相应位。

–设置CPSR模式控制位CPSR[4:0],使处理器进⼊相应的执⾏模式;–设置中断标志位(CPSR[6]=1),禁⽌IRQ中断;

–当进⼊Reset或者FIQ模式时,还要设置中断标志位(CPSR[7]=1),禁⽌FIQ中断。?将引起异常指令的下⼀条指令的地址保存到新的异常⼯作模式的R14即R14_mode中,使异常处理程序执⾏完后能正确返回原程序。给程序计数器(PC)强制赋值,使程序从相应的异常向量地址开始执⾏中断处理程序。

⼀般来说,异常向量地址处是⼀条指向相应程序的转移指令,从⽽可以跳转到相应的异常中断处理程序中。 2.

所有修改过的⽤户寄存器必须从处理程序的保护堆栈中恢复(即出栈)。

将SPSR_mode寄存器内容复制到CPSR中,使得CPSR从相应的SPSR中恢复,即恢复中断的程序⼯作状态。

根据异常类型将PC变回到⽤户指令流中的相应指令处。?清除CPSR中的中断禁⽌标志位I/F。 3. 9种:⽴即数寻址寄存器寻址寄存器移位寻址寄存器间接寻址基址变址寻址

相对寻址多寄存器寻址块拷贝寻址堆栈寻址 5.

LCLA num1 ;定义⼀个局部的数字变量,变量名为;num1

LCLL l2 ;定义⼀个局部的逻辑变量,变量名为l2 ?LCLS str3 ;定义⼀个局部的字符串变量,变量名;为str3

num1 SETA 0xabcd ;将该变量赋值为0xabcd

l2 SETL {FALSE} ;将该变量赋值为真?str3 SETS \"Hello!\" ;将该变量赋值为“Hello!”? 4. 6.

X的地址为0x20000-0x20003Y的地址为0x20004-0x2000BZ的地址为0x2000C-0x2001B7.(1)LDR R0,=XLDR R1,[R0]ADD R1,R1,6LDR R2,=WLDR R3,[R2]SUB R3,R3,R1LDR R4,=RLDR R4,[R4]ADD R4,R4,9SUB R3,R3,R4LDR R2,=ZSTR R3,[R2](2)

LDR R0,=WLDR R0,[R0]LDR R1,=XLDR R1,[R1]MUL R1,R1,R0MOV R1,R1,LSR #4

LDR R2,=ZSTR R1,[R2]

第三章?9. //利⽤冒泡排序实现X数组排序A REA Sort,CODE,READONLYENTRYstartMOV r4,#0

LDR r6,=x ;len是x数组的长度MOV r2,#len

ADD r6,r6,r2,lsl,#2 ;r6=x+#len*4outer ;外层循环控制LDR r1,=X

inner //内层循环控制LDR r2,[r1]LDR r3,[r1,#4]CMP r2,r3STRGT r3,[r1]STRGT r2,[r1,#4]ADD r1,r1,#4

CMP r1,r6 ; 如果没执⾏到结尾继续BLT inner8(1)CMP R2,R3BCC EXCEED(2)CMP R0,R1BLT EXCEED(3)TEQ R2,0BEQ ZERO(4)TEQ R0,R1BEQ EQU10

AREA MAXMIN, CODE, READONLY ENTRY startLDR r1,=BUFFMOV r0,#100

LDR r3,[r1] ;r3中存放max

LDR r4,[r1];r4中存放minsetvalueLDR r2,[r1],#4CMP r2,r3MOVGT r3,r2CMP r2,r4MOVLT r4,r2SUB r0,r0,1BPLldr r0,=MAX;str r3,[r0]ldr r0,=MIN;str r4,[r0]stop

MOV r0, #0x18 ;LDR r1, =0x20026 ;SWI 0x123456 ;

AREA BlockData, DATA, READWRITEBUFF DCD 0x00,0x01,0x03,……MAX DCD 0MIN DCD 0END11

AREA sum, CODE, READONLY ENTRY startMOV r0,0MOV r1,#1MOV r2,#100DoaddADD r0,r0,r1ADD r1,r1,1CMP r1,r2BLS Doaddstop

MOV r0, #0x18 ;LDR r1, =0x20026 ;

SWI 0x123456假设:

第⼀个128位数由⾼到低位于R7~R4中第⼆个128位数由⾼到低位于R11~R8中SUBS R0,R4,R8SBCS R1,R5,R9SBCS R2,R6,R10SBC R3,R7,R11M1=→M2(4个字)LDR R0,=M1LDR R1,=M2

LDMIA R0!,{R2,R3,R4,R5}STDIA R1!, {R2,R3,R4,R5}

CPSR 低5位 M4M3M2M1M0=11111MRS R0,CPSR ; r0←cpsrAND R0, R0,#0xFFFFFFE0ORR R0, R0,#0x1FMSR CPSR_fsxc, R0

举例:在⼀个ARM代码段和Thumb代码段之间切换的指令代码CODE32 ;以下是ARM代码…

ADRL R0,ThumbFun+1 ;将Thumb程序的⼊⼝地址加1存⼊R0BX R0 ;跳转到R0指定的地址并切换状态…CODE16ThumbFun…

UART (Universal Asynchronous Receiver/Transmitter )通⽤异步收发器,⽤于控制计算机和串⾏设备的接⼝。JTAG,它是Joint Test Action Group缩写,是IEEE的标准规范,ARM7TDMI内部提供了3个JTAG型的扫描链,可以进⾏调试和配置嵌⼊式的ICE-RT逻辑。

JTAG仿真器也称为JTAG调试器,是通过ARM芯⽚上的JTAG边界扫描⼝进⾏调试的设备。

JTAG仿真器⽐较便宜,连接⽐较⽅便。它可以通过现有的JTAG边界扫描与ARM CPU核进⾏通信,属于完全⾮插⼊式调试。它⽆需⽬标存储器,不占⽤⽬标系统的任何端⼝。?PLL 是Phase-Locked Loop(锁相环)的缩写。什么是锁相环?锁相环是指⼀种电路或者

模块,它⽤于在通信的接收机中,其作⽤是对接收到的信号进⾏处理,并从其中提取某个时钟的相位信息。或者说,对于接收到的信号,仿制⼀个时钟信号,使得这两个信号从某种⾓度来看是同步的(或者说,相⼲的)。课堂作业(⼆)

简述指令SWI、STM、MOV、MVN的含义

SWI:⽤于产⽣软件中断,以使⽤户程序调⽤操作系统的系统例程。STM:将各个寄存器的值存⼊⼀⽚连续的内存单元中MOV:数据传送指令MVN:数据取反传送指令

2.假设R0的内容为0x8000,寄存器R1,R2内容分别为0x10和0x20,存储器内容为空。执⾏下述指令以后,说明存储器及寄存器的内容如何变化?STMIB R0! ,{R1,R2}LDMIA R0!,{R1,R2}课堂作业(⼆)课堂作业(⼆)

如何定义⼀个宏,宏和⼦程序的区别是什么?使⽤宏定义伪指令:MACRO和MEND

宏指令可以重复使⽤,与⼦程序有些类似,⼦程序可以节省存储空间,提供模块化的程序设计。但是使⽤⼦程序结构时需要保存/恢复现场,从⽽增加了系统的开销。

ADR和ADRL伪指令都是将基于PC的地址值或基于寄存器的地址值读取到寄存器中,⼆者的区别是什么?LDR伪指令的作⽤是什么?其主要⽤途是什么?ADR ⼩范围地址读取

ADRL 中等范围地址读取,类似于ADR,但⽐ADR读取更⼤范围的地址。LDR ⼤范围地址读取,加载32位的⽴即数或⼀个地址值到⽬标寄存器Rd。课堂作业(⼆)

C语⾔调⽤汇编程序时,使⽤哪些寄存器⽤来传递参数?

如果函数有4个参数,则将分别⽤r0 、r1、r2和r3来传递,如果参数多于4个,则多余的参数将被压⼊堆栈。请回答下述缩写的中英⽂含义:MIPS IrDA UART JTAG PLL

MIPS:Million Instructions Per Second的缩写,每秒处理的百万级的机器语⾔指令数。IrDA:Infrared Data Association红外数据协会

UART:Universal Asynchronous Receiver/Transmitter )通⽤异步收发器JTAG:Joint Test Action Group缩写,是IEEE的标准规范PLL:Phase-Locked Loop(锁相环)的缩写实现阶乘的函数

分别编写⼀个函数和⼀个宏,实现字符串的复制7、

AREA StrCopy, CODE, READONLYENTRY ; 程序⼊⼝start

LDR r1, =srcstr ; 初始串的指针

LDR r0, =dststr ; 结果串的指针BL strcopy ; 调⽤⼦程序执⾏复制?stopMOV r0, #0x18 ; 执⾏中⽌LDR r1, =0x20026 ;SWI 0x123456 ;strcopy

LDRB r2, [r1],#1 ; 加载并且更新源串指针?STRB r2, [r0],#1 ; 存储且更新⽬的串指针; ?CMP r2, #0 ; 是否为0BNE strcopy ;MOV pc,lr ;

AREA Strings, DATA, READWRITEsrcstr DCB \"First string - source\dststr DCB \"Second string - destination\END

AREA StrCopy, CODE, READONLYMACRO

copystring $scsstr, $dststrSTMFD sp!, {r0,r1 }

LDR r1, =$scsstr ; 初始串的指针LDR r0, =$dststr ; 结果串的指针strcopy

LDRB r2, [r1],#1 ; 加载并且更新源串指针?STRB r2, [r0],#1 ; 存储且更新⽬的串指针; ?CMP r2, #0 ; 是否为0BNE strcopy ;LDMFD sp!, {r0,r1 }MEND ;宏定义结束\"

ENTRY ; 程序⼊⼝Start

copystring srcstring,dststring; 宏调⽤AREA Strings, DATA, READWRITEsrcstring DCB \"First string\dststring DCB \"Second string \END

S3C44B0X具有多少通⽤I/O⼝?它们具有哪些功能?简述矩阵式键盘⾏扫描检测法的⼯作原理。

3.电阻型触摸屏检测坐标值的原理是什么?

5.S3C44B0X内部LCD控制器是否⽀持RGB像素点字节的数据格式?

6.S3C44B0X的UART接⼝具有哪些功能特性?232串⾏通信的数据格式是什么??7.假设要将S3C44B0X的UART1设置为波特率9600b/s、7位数据位、2个停⽌位、1位奇偶校验位,并采⽤流控制⼯作,该如何设置?给出完成该设置功能的代码段。

芯⽚S3C44B0X具有71个通⽤多功能输⼊/输出引脚,这些I/O⼝的应⽤是S3C44B0X微处理器的基础应⽤,分别包含在如下7组端⼝中

1个10位输出端⼝(端⼝A)。1个11位输出端⼝(端⼝B)。1个16位输⼊/输出端⼝(端⼝C)。2个8位输⼊/输出端⼝(端⼝D和G)。2个9位输⼊/输出端⼝(端⼝E和F)。简述矩阵式键盘⾏扫描检测法的⼯作原理。

(1)识别键盘哪⼀⾏的键被按下。让所有⾏线均为低电平,检查各列线电平是否为低,如果有列线为低,则说明该列有键被按下,否则说明⽆键被按下。

(2)如果某列有键被按下,识别键盘哪⼀⾏的键被按下。逐⾏置低电平,并置其余各⾏为⾼电平,检查各列线电平的变化,如果列电平变为低电平,则可确定此⾏此列交叉点处按键被按下。电阻型触摸屏检测坐标值的原理是什么?

触摸屏⼯作时,上下导体层相当于电阻⽹络。当某⼀层电极加上电压时,会在该⽹络上形成电压梯度。如有外⼒使得上、下两层在某⼀点接触,则在另⼀层未加电压的电极上可测得接触点处的电压,从⽽知道接触点处的坐标。例如,在顶层的电极(X+,X-)上加上电压,则在顶层导体层上形成电压梯度;当有外⼒使得上、下两层在某⼀点接触时,在底层(Y+,Y-)电极上就可以测得接触点处的电压;再根据该电压与电极(X+)之间的距离关系,即可知道该处的X坐标;然后,将电压切换到底层电极(Y+,Y-)上,并在顶层(X+,X-)电极上测量接触点处的电压,从⽽确定Y坐标。5.S3C44B0X内部LCD控制器是否⽀持RGB像素点字节的数据格式?是

6.S3C44B0X的UART接⼝具有哪些功能特性?232串⾏通信的数据格式是什么?

S3C44B0X UART单元提供了两个异步串⼝(SIO),每个SIO都可以在中断模式或DMA模式下⼯作,⽀持波特率最⼤为115.2kb/s,每个SIO通道都有⼀个16字节的接收与发送FIFO 缓冲区。1个开始位,1个或2个停⽌位,5、6、7、8位数据位和奇偶校验功能。static int UartNum=0;

void Uart_Init(int whichuart,int baud)//对UART进⾏初始化{

if(whichuart==0){

UartNum=0;

rUFCON0=0x0; //不使⽤FIFOrUMCON0=0x10; //不使⽤⾃动流控制

rULCON0=0x27; //正常传输模式,⽆奇偶校验位,1个停⽌位,8个数据位?rUCON0=0x045; //禁⽌超时中断、回送模式、发中⽌信号,允许产⽣错误状态中断,

//发送、接收中断都为边沿⽅式,传送、接收模式都为中断请求模式rUBRDIV0 =((int)MCLK/16/baud+0.5)-1);//根据波特率计算rUBRDIV0的值

}

else if(whichuart==1){

UartNum=1;rUFCON1=0x0;rUMCON1=0x0;rULCON1=0x3;rUCON1=0x045;

rUBRDIV1=((int)MCLK/16/baud+0.5)-1);}}

因篇幅问题不能全部显示,请点此查看更多更全内容