期末作业考核
《嵌入式系统》
满分100分
一、判断题(每题3分,共30分)
1. 以32位RISC嵌入式处理器加嵌入式操作系统为标志的嵌入式系统为其发展的第三个阶段。
(对)
2. 嵌入式系统的硬件一般包括嵌入式微处理器、外围电路和嵌入式外围设备等组成。
(对)
3. CodeWarrior具有很多功能,但不具备对文本文件进行比较的功能。
(错)
4. 一般情况下,GNU交叉工具链包括若干个工具软件。
(对)
5. Linux内核的主要功能仅包括内存管理、任务调试、进度间通信和网络接口。
(错)
6. Linux采用的是树型目录结构,其中,最上层是根目录,其他的目录都是从根目录出发而生成的。
(对)
7. 当程序状态寄存器CPSR的I位置1时,允许IRQ中断。
(错)
8. 所谓大端序(也称为大端模式)是指字数据的高位字节存储在高地址中,而字数据的低字节则存放在低地址中。
(错)
9. DCW用于分配一段半字对齐的内存单元,DCWU分配的内存单元并不严格半字对齐。
(对)
10.一个程序(可以包含多个源文件)中至少要有一个ENTRY(可以有多个ENTRY),但一个源文件中最多只能有一个ENTRY(可以没有ENTRY)。
(对)
二、简答题(每题10分,50分)
1. 比较Nor Flash和Nand Flash有相同和不同之处
1)相同点:同属于非易失型存储器;可对存储器单元块进行擦写和再编程;写入前必须先执行擦除
操作;在进行写入和擦除操作时都需要MTD。
2)不同点:
a)性能:Nor-Flash的读取速度比Nand-Flash稍快;Nand-Flash的写入速度比Nor-Flash快
很多;Nand-Flash的4ms擦除速度远比Nor-Flash的5s快;Nand-Flash的擦除单元更小,擦除电路更少。
b)接口差别:Nor-Flash带有SRAM接口;Nand-Flash使用复杂的I/O口来串行地存取数据。
c)容量和成本:Nand-Flash的单元尺寸几乎是Nor-Flash器件的一半;Nand-Flash的成本低
于Nor-Flash;Nand-Flash的容量大于Nor-Flash。
d)研发公司:Nand-Flash由日本东芝公司研发,Nor-Flash由Intel公司研发。
e)用途:Nand-Flash相当于硬盘,用于存放数据,使用时要MTD;Nor-Flash存入程序,执行
程序,且不需要任何软件支持。
2.什么是源程序模拟器它有哪些功能
答:源程序模拟器也称为指令集模拟器,它是用来在一台计算机上模拟另一台计算机上目标程序(机器指令)运行过程的软件工具,有时也叫做软仿真器。
它是一个纯软件系统,在内部有一个反映目标处理器硬件的数据结构,它以时序状态机的方式工作,可以根据目标机指令集定义执行目标指令。
指令集模拟器的操作界面与集成开发环境类似。
运行时,它接受目标代码的机器指令输入、模仿目标机的取指、译码和执行操作,并且将中间执行结果或者最终执行结果存入目标机映像数据结构中。
3.通常Linux内核移植有哪些基本过程
答:
1)安装内核。
2)清除从前编译内核时残留的.o文件和不必要的关联。
Make mrproper
3)配置内核,修改相关参数。
make menuconfig或make xconfig
4)正确设置关联文件。
Make dep
5)编译内核。
make bzImage或make zImage
6)编译模块。
Make modules
7)安装模块。
Make moudes_install
4.假设R0的内容为0x8000,寄存器R1、R2内容分别为0x01与0x10,存储器内容为空,执行下述指令后,说明PC如何变化存储器及寄存器的内容如何变化
STMIB R0!, {R1, R2}
LDMIA R0!, {R1, R2}
答:①执行STMIB时,PC最开始的值为LDMIA指令下一条指令的地址,执行完STMIB后PC=PC+4,执行完LDMIA指令后,PC=PC+4。
②执行指令STMIB时,寄存器R0的值变化过程如下:0X8004→0X8008,存储器从地址0X8004开始的连续四个单元存放R1寄存器的值0X01,从地址0X8008开始的连续的四个单元存放R2寄存器的值0X10,R1和R2寄存器的内容保持不变。
执行指令LDMIA时,寄存器R0的值变化过程如下:0X8008→0X800C→0X8010,存储器的内容不变化,寄存器R1的值为0X10,寄存器R2的值为0X800C开始的四个字节的内容。
5.在ARM汇编语言程序编写规范中有哪些规则
答:1.在ARM汇编语言中,指令不能从一行的行头开始。
在一行语句中,指令的前面必须有空格或者符号。
2.在ARM汇编语言中,符号必须从一行的行头开始,并且符号中不能包含空格,符号后面不能跟“:”。
3.ARM汇编器对标识符大小写敏感(即区分大小写字母),书写标号及指令时字母大小写要一致。
4.在ARM汇编程序中,ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。
5.源程序中,语句之间可以插入空行,以使得源代码的可读性更好。
6.在ARM汇编语言中注释以分号“;”开头。
注释的结尾即为一行的结尾。
注释也可以单独占用一行。
7.如果单行代码太长,可以使用字符“\”将其分行。
“\”后不能有任何字符,包括空格和制表符等。
三、问答及应用题(每小题10分,共20分)
1.ARM处理器总共有多少个寄存器,这些寄存器按其在用户编程中的功能是如何划分的这些寄存器在使用中各有何特殊之处
答:ARM处理器总共有37个寄存器。
1、一般的通用寄存器
在汇编语言中,寄存器R0~R13为保存数据或地址值的通用寄存器。
其中:
R0~R7为未分组寄存器。
在所有模式下对应相同的32位物理寄存器。
R8~R14为分组寄存器,它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。
寄存器R8~R12有两个分组的物理寄存器,一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。
寄存器R13和R14分别有6个分组的物理寄存器。
一个用于用户和系统模式,其余5个分别用于5种异常模式。
2、堆栈指针R13
寄存器R13通常作为堆栈指针SP。
在ARM指令集中,由于没有以特殊方式使用R13的指令或其他功能,只是习惯上都这样用。
每个异常模式都有其自身的R13分组版本,它通常指向由异常模式所专用的堆栈。
在入口处,异常处理程序通常将其他要使用的寄存器值保存到这个堆栈。
通过返回时将这些值重新装到寄存器中,异常处理程序可确保异常发生时的程序状态不会被破坏。
3、连接寄存器R14:在每种模式下,模式自身的R14版本用于保存子程序的返回地址。
当使用BL或BLX指令调用子程序时,R14设置为子程序返回地址。
寄存器R14在其他任何时候都可以作为一个通用寄存器。
4、程序计数器R15:寄存器R15保存程序计数器PC总是用于特殊用途。
对其读写都有一定的限制和规则。
在ARM状态,位[1:0]为0,位[31:2]保存PC,在Thumb状态,位[0]为1,[15:1]保存PC。
5、程序状态寄存器CPSR:所有模式共享一个程序状态寄存器。
在异常模式中,另外一个寄存器程序状态保存寄存器SPSR可以被访问。
每种异常具有自己的SPSR,在进入异常时,它保存CPSR的当前值;在异常退出时,可通过它恢复CPSR。
2.假设变量STR1中保存了一个以0 终结的字符串,试编写一个ARM汇编子程序STRCOPY实现将STR1中内容的逆序存入到STR2开始的存储单元中。
STR1和STR2的地址作为参数传递给汇编子程序。
EXPORT STRCOPY
AREA ASMFILE, CODE, READONLY
ENTRY
STRCOPY
LDR R0, =STR1
MOV R3, R0
LDR R1, =STR2
LOOP1
LDRB R2, [R0], #1
CMP R2, #0
BNE LOOP1
SUB R0, R0, #1 LOOP2
CMP R0, R3
LDRHSB R4, [R0], #-1
STRHSB R4, [R1], #1
BHS LOOP2
MOV PC, LR
END。