您的当前位置:首页正文

嵌入式系统原理与应用习题答案

2024-02-18 来源:我们爱旅游
如果您需要使用本文档,请点击下载按钮下载!

版 权 说 明

本文件中出现的任何文字叙述、文件格式、插图、照片、方法、过程等内容,除另有特别注明,版权均属本人所有。

----WangYiwei

由于我正在学习 “嵌入式系统原理与应用——基于ARM微处理器和Linux操作系统”这门课程,网络上找不到课后习题答案。因此本人通过认真地做习题,不懂百度,查阅相关书籍等途径,整理了一份答案,可供各位参考。

注意:答案并不一定完全正确,有异议的答案欢迎提出来大家一起探讨。

1.8 练习题 P14

1.选择题 (1)A

说明:嵌入式系统的发展趋势表现在以下几方面: 1.产品种类不断丰富,应用范围不断普及 2.产品性能不断提高

3.产品功耗不断降低,体积不断缩小 4.网络化、智能化程度不断提高 5.软件成为影响价格的主要因素

(2)D

说明:常见的嵌入式操作系统: VxWorks,Windows CE、uC/OS-II和嵌入式Linux。

(3)A

如果您需要使用本文档,请点击下载按钮下载!

说明:VxWorks是美国WindRiver公司于1983年开发的一种32位嵌入式实时操作系统。

2.填空题 (1) 嵌入式计算机

(2) 微处理器 外围电路 外部设备

(3) 板级支持包 实时操作系统 应用编程接口 应用程序 (4) 嵌入式处理器 微控制器 数字信号处理器 3.简答题

(1)简述嵌入式系统的定义和特点

答:定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。

特点:专用性强、实时性好、可裁剪性好、可靠性高和功耗低等。

(2)简述计算机系统的发展历程

第一阶段大致在20世纪70年代前后,可以看成是嵌入式系统的萌芽阶段; 第二阶段是以嵌入式微处理器为基础,以简单操作系统为核心的嵌入式系统; 第三阶段是以嵌入式操作系统为标志的嵌入式系统,也是嵌入式应用开始普及的阶段; 第四阶段是以基于Internet为标志的嵌入式系统,这是一个正在迅速发展的阶段。

(3)简述MCU和DSP的区别

MCU是微控制器,DSP是数字信号处理器。

MCU相当于小型的电脑,内部集成的CPU、ROM、RAM、I/O总线,所以集成度高是它的特点。

DSP是专用的信息处理器,内部的程序是对不同的机器和环境进行特别优化,所以处理速度是最快的。

2.4 练习题 1. 填空题

(1) ARM7 ARM9 ARM9E ARM10E ARM11 (2) 精简指令集计算机

(3) Samsung ARM920T IIC总线 (4) BGA 显卡布线 (5) 1.8V 3.3V (6) 8 128 1

(7) S3C2410 64MB 64MB 2. 选择题

(1) D (2)C (3)A (4)B (5)B (6)C (7)D (8)C (9)C (10)B

如果您需要使用本文档,请点击下载按钮下载!

3. 简答题

(1)ARM和S3C2410X有什么关系?

S3C2410是韩国三星公司生产的嵌入式处理器,它采用了ARM公司的ARM920T(即ARM9)内核

(2)ARM7是32位RISC处理器,使用3级流水线,采用冯

•诺依曼体系结构,不支持MMU。

(3)ARM8是32位RISC处理器,使用5级流水线,采用哈佛体系结构,支持MMU。 (4)S3C2410X芯片有27根地址线,8根片选线(nGCS),32根数据线。

(5)S3C2410X芯片内部集成了一个LCD控制器,SDRAM控制器,3个通道UART,4个通道DMA,4个具有PWM

功能的计时器和一个内部时钟,8通道的10位ADC。

(6)ARM体系结构有哪几种工作状态?又有哪几种运行模式?其中哪些为特权模式?哪些为异常

模式?并指出处理器在什么情况下进入相应模式?

工作状态:

第1种:ARM状态。处理器执行32位的字对齐的ARM指令。 第2种:Thumb状态。处理器执行16位的半字对齐的Thumb指令。 运行模式:

用户模式(usr) 快速中断模式(fiq) 外部中断模式(irq) 管理模式(svc) 数据访问中止模式(abt) 系统模式(sys) 未定义指令中止模式(und)

在这7种运行模式,除了用户模式外,其他6种处理器模式都为特权模式。 在这6种特权模式中,除了系统模式外的其他5种特权模式又称为异常模式。

用户模式:非特权模式,也就是正常程序执行的模式,大部分任务在这种模式下执行。在用户模式下, 如果没异常发生,不允许应用程序自行切换果没异常发生,不允许应用程序自行改变处理器的工作模式,如果有异常发生,处理器会自动切换工作模式。

快速中断模式:支持高速数据传输和通道处理,当一个高优(fast)中断产生时将会进入这种模式。

外部中断模式:也称为普通中断模式,当一个低优先级中断产生时将会进入这种模式。在这模式下按中断的处理器方式又分为向量中断和非向量中断两种。通常的中断处理都在IRQ模式下进行。 管理模式:是一种操作系统保护模式,当复位或软中断指令执行时处理器将进入这种模式。

数据访问中止模式:当存取异常时将会进入这种模式,用来处理存储器故障、实现虚拟存储或存储保护。 系统模式:使用和user模式相同寄存器组的特权模式,用来运行特权级的操作系统任务。

未定义指令中止模式:当执行未定义指令时会进入这种模式,主要是用来处理未定义的指令陷阱,支持硬件协处理器的软件仿真,因为未定义指令多发生在对协处理器的操作上。

(7)ARM体系结构支持的数据类型?有多少寄存器?如何组织?

支持的数据类型:

如果您需要使用本文档,请点击下载按钮下载!

1.字节(byte),各种处理器体系结构中,字节的长度均为8位。 2.半字(half-word),在ARM体系结构中,半字的长度为16位。 3.字(word),在ARM体系结构中,字的长度为32位。

ARM处理器共有37个寄存器,其中31个通用寄存器,6个状态寄存器。

(8)S3C2410的存储控制器如何对内存空间进行管理?

S3C2410X存储控制器为片外存储器提供控制信号。它将系统的存储空间分成8组(Bank),每组的大小为128MB,共1GB。

(9)分析程序状态寄存器各位的功能描述,并说明C、Z、N、V在什么情况下进行置1和清0

状态寄存器(PSR)的具体格式为

V—溢出标志位

对于加/减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号位溢出,其它指令通常不影响V位。例如:两个正数(最高位为0)相加,运算结果为一个负数(最高位为1),则符号位溢出,相应V=1.

C--进位或借位标志位

对于加法指令(包括比较指令CMN),结果产生进位,则C=1,表示无符号数运算发生上溢出,其他情况下C=0;

在减法指令中(包括比较指令CMP),结果产生借位,则C=0,表示无符号数运算发生下溢出,其他情况下C=1;

对于包含移位操作的非加/减法运算指令,C中包含最后一次溢出位的数值; 对于其他非加/减法运算指令,C位的值通常不受影响。

Z--结果为0标志位 Z=1表示运算结果是0,Z=0表示运算结果不是零; 对于CMP指令,Z=1表示进行比较的两个数大小相等。 N--符号标志位

本位设置成当前指令运算结果的bit[31]的值。当两个补码表示有符号整数运算时,N=1表示运算的结果为负数,N=0 表示结果为正数或零。

(10)ARM指令可分为哪几类?说出哪几条指令是无条件执行的。

ARM指令可分为: 数据处理指令,跳转指令,程序状态寄存器处理指令,加载/存储指令,协处理器指令 ,异常产生指令。

无条件执行指令:BLX指令,BKPT指令(产生软件断点中断)

(11)如何实现两个64位数的加法操作,如何实现两个64位的减法操作,如何求一个64位数的负数?

如果您需要使用本文档,请点击下载按钮下载!

实现 64 位数据加法运算:

假设 R0和R1存放了一个64位数据(作为被加数),R0存放数据的低32位;R2和R3中存放了另一个64位数据(作为加数),R2中存放低 32 位数据。运算结果送回到[R1:R0]中(R0中存放低 32 位)。 ADDS R0,R0,R2 ;低32位相加并影响标志位

ADC R1,R1,R3 ;高32位相加再加上 C 标志位 (进位值) 实现64位数据减法运算:

如果寄存器R0和R1中放置一个64位的被减数,其中R0中放置低32位数值;寄存器R2和R3中放置一个64位的减数,其中R2 中放置低 32 位数值。运算结果送回到[R1:R0]中(R0中存放低32位)。 SUBS R0,R0,R2 ;低32位相减并影响标志位 SBC R1,R1,R3 ;高32位相减再减去C标志位的反码 求一个64位数的负数:

如果寄存器R0和R1中放置一个 64 位数,其中 R0 中放置低 32 位数值;寄存器R4和R5中放置其负数,其中R4中放置低32位数值。

RSBS R4,R0,#0 0减去低32位并影响标志位 RSC R5,R1,#0 0减去高32位再减去C标志位的反码

4.程序题

(1) 分析下列每条语句,并说明程序实现的功能。 CMP R0, #0 //判断R0是否等于0 MOVEQ R1, #0 //当R0等于0,则R1等于0 MOVGT R1,#1 //当R0为正数时,则R1等于1 此功能码段可以判别R0中的值为正数还是0。 (2) 写一条ARM指令,分别完成下列操作。 R0 = 16 MOV RO, #16 R0 = R1 / 16 MOV RO,R1,LSR#4 R1 = R2 * 4 ADD R1,R2.R2.LSL#1 R0 = - R0 RSB RO,RO,#0 (3) 写出实现下列操作的ARM指令。

当Z=1时,将存储器地址为R1的字数据读入寄存器R0。 MOVEQ R0, [R1]

当Z=1时,将存储器地址为R1+R2的字数据读入寄存器R0。 LDREQ R0, [R1,R2]

将存储器地址为R1-4的字数据读入寄存器R0。 LDR R0,[R1,#-4]

如果您需要使用本文档,请点击下载按钮下载!

将存储器地址为R1+R6的字数据读入寄存器R0,并将新地址R1+R6 写入R1。 LDR R0,[R1,R6]!

(4) 写出下列指令所实现的操作。 LDR R2 ,[R3,#-2]!

将存储器地址为R3-2的字数据读入R2,并将地址R3-2写入R3

LDR R0 ,[R0],R1

将存储器地址为R0的字数据读入R0,并将地址R0+R1写入R0

LDR R1 ,[R0,R2,LSL #2]!

将存储器地址为R0+R2*4的字数据读入R1,并将地址R0+R2*4写入R0

STRB R1 ,[R2,#0xB0]

R0的低8位存入存储器地址为 R2+0xB0字节中

LDMIA R0 ,{R1,R2,R8}

将内存单元R0所指向的地址单元以字为单位递减方式读取到R1,R2,R8 中,低地址编号的字数据内存单元对应低编号寄存器

STMDB R0!, {R1~R5,R8,R9}

R1~R5,R8,R9存储到以R0为起始地址的递减内存中,最终R0 指向存放 R9的地址单元

5.计算题

某设备的接口电路如图所示,请计算出该设备的地址。

3.5 练习题 1.选择题

(1) B (2) A (3) C (4) D (5) A 2.填空题

(1) .so .a 程序运行过程中 编译过程中 (2) L I o (3) $

(4) $@ $^ $< (CC、CFLAGS等)

(5) 目标文件的完整名称 所有不重复的依赖文件,以空格隔开 第一个依赖文件的名称、 3. 简答题

(1) make和Makefile之间的关系?

答:make是一种命令,是根据Makefile文件的规则决定如何编译和连接程序或其他的动作。

(2)Makefile的普通变量与预定义变量有什么不同?预定义变量有哪些?它们分别表示什么意思?

答:普通变量:引用变量时,只需在变量前面加上$符;预定义变量:已经定义好,直接引用即可。

如果您需要使用本文档,请点击下载按钮下载!

预定义变量有:$@、$^、$<。

$@:表示完整的目标文件名;$^:表示所有的依赖文件;$<:表示依赖文件列表中的第一个文件。

(3)GCC编译器的常用参数有哪些?它们的功能分别是什么?

答:gcc编译器的常用参数:-o,-I,-L,-E,-S,-c

功能:-o表示编译成一个可执行程序;-I表示指定头文件目录;-L表示指定库文件目录选项;-E表示对源代码进行预编译;-S表示编译成汇编代码;-c表示把.c文件转换为以.o为扩展名的目标文件。

4. 编程及调试题

(1)根据要求编写Makefile文件。有5个文件分别是main.c、visit.h、study.h、visit.c、study.c,具体代码如下。 //main.c文件

//visit.h文件

//study.h文件

//visit.c文件

//study.c

1)如果上述文件在同一目录,请编写Makefile文件,用于生成可执行程序zhs。 //Makefile 文件

如果您需要使用本文档,请点击下载按钮下载!

2) 如果按照下面的目录结构存放文件,请改写Makefile文件。 bin:存放生成的可执行文件 obj:存放.o文件

include:存放visit.h、study.h

src:存放main.c、visit.c、study.c和Makefile.

3) 如果按照下面的目录结构存放文件,请改写Makefile文件。 bin:存放生成的可执行文件 obj:存放.o文件

include:存放visit.h、study.h src:存放main.c和Makefile src/src1:存放visit.c src/src2:存放study.c

说明:这可能只是其中一种方法,方法不唯一。我这种做法有一个缺点就是需要修改visit.c和study.c文

如果您需要使用本文档,请点击下载按钮下载!

件的内容,如修改#include

如果您需要使用本文档,请点击下载按钮下载!

“../include/visit.h”。

(2) 按要求完成以下操作。

① vi编辑test.c文件,其内容如下。

② 用gcc –o test.o test.c编译,生成test.o

③ 用gcc –g –o test1.o test.c编译,生成test1.o

④ 比较test.o和test1.o文件的大小,思考为什么?

带调试选项-g的目标文件test1.o比较大。因为在gcc编译源代码时指定-g选项可以产生带有调试信息的目标代码。

(3) 使用GDB调试上面的程序 ①调试参数-g进行编译 #gcc –g test.c –o test

②启动GDB调试,开始调试 #gdb Gtest

如果您需要使用本文档,请点击下载按钮下载!

③使用gdb命令进行调试。 略。

(4)编写一个程序,将系统时间以year-month-day hour:minute:second格式显示在屏幕上,并将它保存在time.txt文件。

4.4 练习题 1.填空题

(1) 串口

(2) 115200 8 1 无 无 (3) 编程器 串口 网络接口 (4) Bootloader

(5) 程序仿真调试 程序的烧写 (6) zImage root.cramfs (7)启动加载模式 下载模式 (8) 汇编语言 C语言

(9) U-Boot Blob ARMBoot (或者RedBoot vivi) (10) BusyBox (11)启动加载模式

说明:按回车进入启动加载模式;按回车外的任意键进入vivi的下载模式。

2. 选择题

(1) A (2) C (3) A (4) A (5) A 3. 简答题

如果您需要使用本文档,请点击下载按钮下载!

(1)简述嵌入式开发环境的搭建过程

答:1、交叉编译工具链的安装;2、安装配置TFTP服务;3、安装配置NFS服务;4、C-Kermit的安装配置;5、minicom的安装配置;6、windows下超级终端的配置。

(2) BootLoader的结构分两部分,简述各部分的功能?

答:两部分:Stage1:用汇编语言编写,主要进行设备的初始化;Stage2:用C语言编写,增强程序的移植性和可读性。

(2) ARM常用的Bootloader程序有哪些? 答:U-Boot,Blob,RedBoot,vivi

(3) 简述生成内核映像文件zImage的步骤。

答:1、make config 进入命令行;

2、make menuconfig 内核裁剪;

3、make clean 清理以前已生成的目标文件; 4、make dep 编译变量的依赖关系; 5、make zImage 生成内核镜像文件zImage。

(4) BusyBox工具的功能是什么?

答:BusyBox工具用来精简基本用户命令和程序,它将数以百计的常用UNIX/Linux命令集成到一个可执行文

件中。

(5)简述根文件系统的创建过程。

答:1、建立基本的目录结构;

2、交叉编译BusyBox; 3、创建配置文件;

4、利用cramfs工具创建根文件系统映像文件。

5.4 练习题 1.选择题

(1)B (2)D (3)C (4)A (5)C (6)D

2.填空题

(1) 内核态

(2) 字符设备 块设备 (3) 主设备号 次设备号 (4) 静态编译 动态编译 (5) insmod

说明:用于加载模块化驱动程序的命令是insmod;用于卸载已安装模块化驱动程序的命令是rmmod;用于查

如果您需要使用本文档,请点击下载按钮下载!

看已安装的模块化驱动程序的命令是lsmod。

如果您需要使用本文档,请点击下载按钮下载!

3.简答题

(1) 简述驱动程序的主要功能。

答:1、对设备初始化和释放;2、数据传送;3、检测和处理设备出现的错误。

(2) 简述驱动程序的组成。

答:1、自动配置和初始化子程序;2、服务于I/O请求的子程序;3、中断服务子程序。

(3) 简述设备驱动程序与应用程序的区别。

答:1、设备驱动程序工作在内核态下,而应用程序工作在用户态下;2、设备驱动程序从module_init()开始,将初始化函数加入内核初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止工作,等待应用程序的调用;而应用程序从main()函数开始执行。

3、应用程序可以和GLIBC库连接,因此可以包含标准的头文件;驱动程序不能使用标准的C库,因此不能调用所有的C库函数。

(4)简述设备文件、驱动文件、主设备号和次设备号之间的关系。

答:驱动程序加载到内核后有一个主设备号。在Linux内核中,主设备号标识设备对应的驱动程序,告诉Linux内核使用哪一个驱动程序为该设备(也就是/dev下的设备文件)服务,而次设备号则用来标识具体且唯一的某个设备。

(5)简述字符设备驱动程序提供的常用入口点及各自的功能。

答:open入口点:对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。如果设备是独占的,即同一时刻只能有一个程序访问此设备,则open子程序必须设置一些标志以表示设备处于忙状态。

close入口点:当设备操作结束时,需要调用close子程序关闭设备。独占设备必须标记设备可再次使用。 read入口点:当从设备上读取数据时,需要调用read子程序。 write入口点:向设备上写数据时,需要调用write子程序。

ioctl入口点:主要用于对设备进行读写之外的其他操作,比如配置设备、进入或退出某种操作模式等,这些操作一般无法通过read或write子函数完成操作。

(6) 简述逐次逼近型ADC的结构及工作原理。

答:逐次逼近型ADC通常由比较器,数模转换器(DAC),寄存器和控制逻辑电路组成。

工作原理:初始化时,先将寄存器各位清空。转换时,先将寄存器的最高位置1,再将寄存器的数值送入DAC,经D/A转换后生成模拟量送入比较器中与输入的模拟量进行比较,若Vs5. 编程题

S3C2410X通过GPG3端口来控制LED的亮和灭,具体电路如图,请为该字符设备设计一个驱动程序和应用程序,应用程序能够根据用户需要来控制LED的

如果您需要使用本文档,请点击下载按钮下载!

//驱动程序

如果您需要使用本文档,请点击下载按钮下载!

//应用程序

如果您需要使用本文档,请点击下载按钮下载!

6.7 练习题 1.选择题

(1)C (2)D

说明:TinyOS是UC Berkeley(加州大学伯克利分校)开发的开放源代码操作系统

(3)C

2.填空题

(1)X Windows,Micro Windows,MiniGUI (或者Qtopia Core,Qt/Embedded,OpenGUI) (2)X Window Server,Xlib,帧缓存 3.问答题

(1)简述嵌入式GUI的特点。

答:1、轻型,占用资源少。嵌入式GUI要求是轻量型的,这主要是受限于嵌入式硬件资源。

2、可配置。由于嵌入式设备的可定制性,要求相应的GUI系统也是可以定制的,所以嵌入式GUI一般都具有可裁剪性。

3、高性能。耗用系统资源较少,能在硬件性能受限的情况下、尤其是CPU资源较少的情况下达到相对较快的系统响应速度,同时减少能源消耗。

4、高可靠性。系统独立,能适用于不同的硬件,在高性能的同时保证高可靠性。

(2)简述Qt/X11和Qtopia Core的异同点。

答:相同点:都是嵌入式GUI,也就是在嵌入式系统中为特定的硬件设备或环境而设计的图形用户界面系统。 Qt/X11与Qtopia Core最大的区别在于Qt/X11依赖于X Window Server或Xlib,而Qtopia Core是直接访问帧缓存。它们所依赖的底层显示基础是不同的,从而导致了体系结构上的差异。

(3)简述信号与槽的作用。

答:信号:当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有定义过这个信号的类及其派生类能够发射这个信号,当一个信号被发射时,与其相关联的槽将会被立刻执行。

槽:槽是普通的C++成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其相关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。

4.编程题

编写Qtopia Core程序:在窗口建立两个按钮,单击Show Text按钮时在单行文本框中显示Hello World!!!;单击Quit按钮时关闭窗口。

如果您需要使用本文档,请点击下载按钮下载!

7.4 练习题 1.选择题

(1)A (2)B (3)A 2.填空题

(1)可定制性好 支持SQL查询语句 提供接口函数,供高级语言调用 实时性好 (2)自包含 跨平台 无数据类型 3.问答题

(1)常见的嵌入式数据库有哪些?嵌入式数据库和其他数据库的主要区别是什么?

答:常见的嵌入式数据库有mSQL,Berkeley DB,SQLite。

数据处理方式的不同,嵌入式数据库属于程序驱动式,其他数据库属于引擎响应式。

逻辑模式的不同,其他数据库基本上采用关系模型,而嵌入式数据库除采用关系模型外,还会采用网状模型或两者的结合体。

优化重点不同,其他数据库由于面向通用的应用,优化的重点是:高吞吐量、高效的索引机制、详尽的查询优化策略。而嵌入式数据库是面向特定应用的,并且资源有限,优化的重点是:实时性、开销大小、系统性能、可靠性、可预知性和底层控制能力。

关键技术不同,嵌入式数据库的很多关键技术与其他数据库不同,如备份恢复、复制与同步、事务和安全性等。

(2)简述SQLite数据库的特点。

答:SQLite的特点包括:无需安装和管理配置,存储在单一磁盘文件中的一个完整的数据库;数据库文件可以再不同字节顺序的机器间自由地共享,支持数据库大小最大为2TB;包括TCL绑定,同时通过Wrapper支持其他语言的绑定;独立,没有额外依赖;支持多种开发语言,支持事件,不需要配置、安装。

(4) 在SQLite中有哪些数据类型?

答:SQLite支持NULL,INTERGER,REAL,TEXT和BLOB数据类型。

4.编程题 略

如果您需要使用本文档,请点击下载按钮下载!

2014年01月05日

(注:可编辑下载,若有不当之处,请指正,谢谢!)

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