一、填空题:
1.
ARM 处理器有两种工作状态,它们是 ARM 状态和 Thumb 状态。
2.
ARM 处理器有 7 种工作模式:用户模式 USR(user mode)、 快速中断模式(FIQ)、中断模
式(IRQ)、管理模式 SVC、中断模式 IRQ(interrupt mode)、系统模式 SYS(system mode)、
未定义模式 UND(undefined mode) 。
3. 嵌入性、 专用性 和 计算机系统 是嵌入式系统的三要素。
4.
ARM7 有 3 级流水线,ARM9 有 5 级流水线。
5. 目前业界有关嵌入式处理器的分类主要有:嵌入式微处理器、MCU、嵌入式片上系统(SOC)
和嵌入式 DSP。
6.
XSBASE270 实验箱上电时,ARM 微处理器会工作在 ARM 状态、用户 模式、 复位 异常。
二、简答题:
1. 阅读程序回答下列问题
num EQU 30
AREA
StrCopy, CODE, READONLY
ENTRY
start
ldr
ldr
mov
mov
r0, =src
r1, =dst
r2, #num
sp, #0x400
blockcopy
movs
r3,r2, LSR #3
stmfd
sp!, {r4-r11}
octcopy
ldmia
r0!, {r4-r11}
stmia
r1!, {r4-r11}
subs
bne
r3, r3, #1
octcopy
ldmfd
sp!, {r4-r11}
copywords
ands
beq
r2, r2, #7
stop
;
《嵌入式系统》试卷(A 卷),第 1页,共 8 页
wordcopy
ldr
str
subs
bne
r3, [r0], #4
r3, [r1], #4
r2, r2, #1
wordcopy
stop
b
stop
AREA
Strings, DATA, READWRITE
ltorg
src
dst
DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8, 1,2,3,4,5,6,7,8,1,2,3,4,5,6
DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
End
问题:
(1)octcopy ………bne
octcopy 循环能进行几次?
答:3 次。
(2)wordcopy………bne
wordcopy 循环能进行几次?
答:6 次。
(3)指令 movs r3,r2, LSR #3 和指令 ands r2, r2, #7 的功能和意义是什么?
答:由于 r2 中存储的是源地址单元块的字的个数,而逻辑右移 3 位相当于除以 8,因此 movs
r3,r2,LSR #3 能够计算出需要每次移动 8 个字数据的总次数,并将其存储在 r3 寄存器中,r2 寄
存器则是存放 num 除以 8 后的余数;
ands r2,r2,#7 将 r2 与 7(二进制数的末四位为 0111)相与后,能够得出不足 8 个字时,还剩
余多少个字需要单个字传输。
(4)伪指令 DCD 的功能是什么?
答:定义字数据。
(5)该程序完成什么功能?
答:通过多寄存器数据传输指令,完成将内存自 SRC 开始的 30 个字数据传送到目标区 DST。
《嵌入式系统》试卷(A 卷),第 2页,共 8 页
2. 下列是汇编调 C 的程序,阅读程序回答下列问题
EXPORT
CALLSUM
AREA
Example,CODE,READONLY
IMPORT sum
ENTRY
CALLSUM
STMFD
SP!,{LR}
mov R0,#2
ADD
ADD
ADD
STR
ADD
R1, R0, R0
R2, R1, R0
R3, R1, R2
R3,[SP,#-4]!
R3,R1,R1
BL
sum
ADD
SP,SP,#4
LDMFD SP!,{PC}
END
int sum (int
a,int
b,int
c,int
d,int
e)
{
}
return(a+b+c+d+e);
问题:
1) 汇编程序传递给 C 程序的变量 a,b,c,d,e 的值分别是多少?
答:分别为 2,4,6,10,8。
2) 指令 ADD SP,SP,#4 的功能和意义是什么?
答:恢复堆栈指针的值。
3) 调用 sum 返回的结果是多少?结果存放在哪里?
答:返回的结果是 30,结果存放到 r0 寄存器。
3.如图示是基于 wince 的嵌入式系统开发模式
《嵌入式系统》试卷(A 卷),第 3页,共 8 页
说明图中各个部分(宿主机、目标机、USB、以太网、串口、仿真器)的作用。
答:
(1)宿主机:一般是通用计算机,宿主机上丰富的资源和良好的开发环境来开发、编译、仿真调
试需要嵌入到目标机上的程序(软件)。
(2)目标机:运行嵌入式软件的平台。
(3)USB:下载程序到目标机。
(4)以太网口:主要用于将 NK.bin 下载到实验箱的 RAM 中,再通过 bootloader 将 os 镜像加载
到 Flash 中。
(5)串口:主要用于将启动信息等通过超级终端显示在宿主机上。
(6)仿真器:处于宿主机和目标机之间,实现调试通信。
5、在嵌入式教学实验平台亿道 EELiodPxa270 上,调试不带操作系统的应用程序时,请说明文件:
ARMulate.dll;H-JTAG.dll;PXA270.ini;pxa270.hfc 的作用和使用方法。
答:
(1)ARMulator.dll
作用:
ARMulator 是一个在 ARM 公司推出的集成开发环境 ADS (ARM Developer Suite)中提供的指
令集模拟器。它与运行在通用计算机(通常是 x86 体系结构)上的调试器相连接,模拟 ARM 微处
理器体系结构和指令集,用于在仿真环境下开发和调试 ARM 程序。
使用方法:
《嵌入式系统》试卷(A 卷),第 4页,共 8 页
运行 AXD,在调试界面的菜单栏中的 options 选项里打开 configure target 一项,选择模拟器调
试平台【ARMulate.dll】;选择选择模拟器调试平台 ARMulate.dll,加入后,如下所示,点击 OK;
重新启动调试程序即可。
(2)H-JTAG.dll:
作用:
H-JTAG 是一款简单易用的仿真调试软件,用于在真实环境下调试 ARM 程序,不需要硬件仿真器,
可以支持大部分的仿真调试功能。
使用方法:
运行 AXD,打开调试界面,进行调试设置:在调试界面的 options 菜单里打开 configure target
一项,加载 H-JTAG.dll 运行平台;重新启动调试程序即可。
(3)PXA270.ini:
作用:是用于初始化 RAM 的脚本。
使用方法:
运行 AXD,在调试界面的 options 菜单里打开 configure interface 一项,选择 SessionFiles 选
项卡,加载自己工程下面的 PXA270.ini 文件,注意一定要是自己工程文件夹内的。
(4)pxa270.hfc:
作用:是一个在真实环境(ROM)中调试 ARM 程序时需要用到的配置文件。
使用方法:
打开 H-JTAG 的界面后,点击菜单栏 Load 加载 pxa270.hfc 即可。
三、程序分析和设计
附资料:
* CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。
;* 它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位
;*-----------------------------------------------------------------------------
;*
30
31
29
28
8
7
6
5
27
4
3
2
26
1
0
《嵌入式系统》试卷(A 卷),第 5页,共 8 页
---------------------------------------------------------------------
;*
;* | N | Z | C | V | Q | - | ......
;*
;* 运行模式位 M[4:0]:这几位是模式位,这些位决定了处理器的运行模式
---------------------------------------------------------------------
。。 | I | F | T | M4 | M3 | M2 | M1 | M0 |
题目:
如下清单是基于 XSBASE270 实验箱的启动程序(汇编部分)和跑马灯程序(C 程序部分)
;汇编程序部分
StackSvc
StackIrq
EQU
EQU
IMPORT
main
0xa0600000
0xa0605000
AREA init ,CODE ,READONLY
ENTRY
BL
BL
BL
B
InitMem(InitMem 子程序略)
InitStack
InitGPIO
main ;
;**************************************
;Init GPIO
;**************************************
ALIGN
InitGPIO
LDR
R1, =0x40e00000
MOV
STR
LDR
STR
LDR
STR
LDR
R0, #0x10000
R0, [R1,#0x20]
R0, =0xa0000000
R0, [R1,#0x64]
R0, =0x01c000
;GPIO64-95 direction
configuration
R0, [R1,#0x14]
R0, =0x402
《嵌入式系统》试卷(A 卷),第 6页,共 8 页
STR
R0, [R1,#0x68]
MOV PC,
LR
;**************************************
ALIGN
InitStack
;Set IRQ mode(IRQ)
MSR
LDR
CPSR_c, #0xd2
SP, =StackIrq
;Set Supervisor mode(SVC)
MSR
LDR
CPSR_c, #0xd3
SP,
=StackSvc
MOV PC, LR
END
;C 语言程序部分
#define LED_CS4
(*((volatile unsigned char *)(0x10500000)))
#define LED_VALUE
(0xff)
int i;
void Delay(unsigned int x)
{
}
unsigned int n, j, k;
for (n =0; n <=x; n++)
for (j = 0; j <0xff; j++)
for (k = 0; k <0xff; k++);
int main(void)
{
while (1)
{
}
LED_CS4 = 0xff;
for (i = 0; i < 8; i++)
{
}
LED_CS4 = (LED_VALUE << i) -1;
Delay(200);
《嵌入式系统》试卷(A 卷),第 7页,共 8 页
return 0;
}
1、 是否可以将 BL InitGPIO 改为 B
InitGPIO,为什么?(选作)
答:不能。BL 是一个子程序调用指令,BL InitGPIO 作用是调用 InitGPIO 子程序进行 GPIO 口
的初始化,初始化完成后返回主程序继续执行下面的 B main 程序。 而 B 是一个无条件转移指令,
B InitGPIO 的作用是将指令跳转到 InitGPIO 处执行,但并没有返回。
2、该程序将 GPIO77、78、79、80、81 口分别初始化成什么方向(输入或输出)?(选作)
答:77 口初始化输入(IN);78,79,80 初始化为输出(OUT);81 初始化为输入(IN)。
3、在子程序 InitStack 中增加语句设置 Irq 模式的堆栈指针
;Set IRQ mode(IRQ)
MSR
LDR
CPSR_c, #0xd2
SP, =StackIrq
4、C 程序 main 中 i=3 循环做完时,LED_VALUE=0x[ff],LED_CS4=0x[f7],发光二极管[L4]亮
(发光二极管编号 L8---L1)
5、写 C 表达式,使发光二极管高四位亮、低四位灭。
#define LED_CS4
(*((volatile unsigned char *)(0x10500000)))
LED_CS4 = 0x0f
四、程序设计和调试题
1.在 ARM 中用汇编语言编写程序,计算 2+4+6+8+…+2N 的值。并把结果显示到发光二极管或者数
码管上。
LED_CS4 EQU 0x10500000
Add,CODE,READONLY
AREA
ENTRY
start
MOV
MOV
MOV
R1, #1
R2, #2
R3, #0
;作为计数器和递增的乘数
;作为值保持不变的乘数
《嵌入式系统》试卷(A 卷),第 8页,共 8 页