问答题、编程题举例:
1、 嵌入式系统的定义、主要特点。
答案要点:
目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
主要特点:①是专用的计算机系统,用于特定的任务;②资源较少,可以裁减;③功耗低,体积小,集成度高,成本低; ④使用实时操作系统; ⑤可靠性要求更高,具有系统测试和可靠性评估体系;⑥运行环境差异大 ;⑦大部分程序固化在 rom中; ⑧较长的生命周期;⑨ 嵌入式微处理器通常包含专用调试电路
2、 实验箱中的系统软件由那几部分组成?如何给下位机配置(烧写)文件系统?
下位机的软件系统由bootloader 系统内核、根文件系统和应用程序四部分组成。
bootloader相当于pc机上的bios,在下位机加电时自动运行,执行硬件初始化和调用系统内核的功能。bootloader分为u-boot、vivi、blob、armboot、redboot等多种,本实验使用实验箱自带光盘中的vivi。
如何给实验箱烧写文件系统,请参考教材p196~198。
3、 arm处理器中,引起异常的原因有哪些?
原因主要:
a.指令执行引起的异常,如:软件中断、未定义指令(包括所要求的协处理器不存在是的协处理器指令)、 预取址中止(存储器故障)、数据中止。
b.外部产生的中断 ,如:复位、 fiq、 irq。
4、 bootloader的作用是什么?
参考:简答说来,bootloader就是操作系统内核运行的一小段程序。完成初始化系统硬件及设置的任务,包括cpu、sdram、flash和串口等的初始化,以及时钟的设置和存储器的映射。
也可以这样描述:bootloader是系统加电后、操作系统内核或用户应用程序运行之前,首先必须运行的一段程序**。通过这段程序,为最终调用操作系统内核、运行用户应用程序准备好正确的环境。
(对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,但在系统启动时都必须运行bootloader,为系统运行准备好软硬件环境。)
5、 简述网络文件系统nfs,并说明其作用。
nfs即网络文件系统,是主机通过网络进行文件共享的协议。通常用于unix和linux系统中。nfs服务器的共享目录可以被nfs客户端作为文件系统挂载到本地。
nfs通常用于局域网中的文件共享,其特点是不需要将文件**到本地即可访问。
6、 arm的异常有哪几种,各进入何种工作模式?他们退出各采用什么指令?
答:1)复位(reset)异常(管理模式);
2)未定义指令(undefined instruction)异常(未定义模式);
3)软件中断(swi)异常(管理模式);
4)指令预取中止(prefech abort)异常(中止模式);
5)数据访问中止(data abort)(中止模式);
6)快速中断请求(fiq)(fiq模式);
7)外部中断请求(irq)(irq模式)。
异常返回指令:1)swi,未定义的返回:movs pc,r14;2)irq,fiq,预取中止的返回:
subs pc,r14,#4;3)数据中止返回并重新存取:subs pc,r14,#
异常中断的优先级:复位(最高优先级)--数据异常中止---fiq --irq---预取指异常中止---swi---未定义指令(包括缺协处理器)。
7、 假定在目录/home/arm下有一个c程序,该程序由几个单独的文件组成,而这几个文件又分别包含了其他文件,如下表所示:
请完成下列任务:
1) 编写makefile文件,最终的目标文件为hello(交叉编译器为arm-unknown-linux-gcc)
2) 将目标机/home/arm目录通过网络文件系统挂载/mnt到宿主机(其ip为192.168.9.10)的。
解答:(1)makefile文件的编写:①最容易理解的写法。
armv4l-unknown-linux-gcc -o prog #行前按tab键。
armv4l-unknown-linux-gcc -c -o #行前按tab键。
armv4l-unknown-linux-gcc -c -o #\ 行前按tab键。
armv4l-unknown-linux-gcc -c -o #\ 行前按tab键。
armv4l-unknown-linux-gcc -c -o #\ 行前按tab键。
clean:
rm hello *.o #\ 行前按tab键。
更好(高效)的写法是:
cc=armv4l-unknown-linux-gcc指明采用交叉编译器。
exec=hello表示编译后生成的可执行文件名为fact
objs= #给出目标文件列表。
cflags给出编译参数。
ldflags+=-static给出链接参数。
all:$(exec编译主入口。
(exec):$objs)
$(cc) $ldflags) -o $@objs) #注意行前空白由一个tab制表符生成
clean清除编译结果。
-rm -f $(exec) *elf *.gdb *.o #注意行前空白由一个tab制表符生成
2)mount -t nfs -o nolock 192.168.0.10:/home/arm /mnt
8、 什么是交叉编译?嵌入式系统开发中为什么要使用交叉编译?
所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。之所以采用交叉编译,这是因为目标平台上不具备直接运行开发环境的条件。
9、 嵌入式开发的基本过程有哪几步?
答:嵌入式开发的基本过程为:采用相应的编辑工具编写应用程序,然后在上位机编译调试应用程序,然后使用nfs将上位机上编译好的文件**到下位机上运行。
10、 arm 支持哪两种数据存储格式, 简单描述各自特点。
解答: 分为大端格式和小端格式。
大端格式: 被存放字数据的高字节存储在存储系统的低地址中, 而被存放的字数据的低字节则存放在存储系统的高地址中。
小端格式: 与大端存储格式相反, 在小端存储格式中, 存储系统的低地址中存放的是被放字数据中的低字节内容,存储系统的高地址存放的是被存字数据中的高字节内容。
11、 程序、 进程、线程有何区别?
要点: 程序是编译后形成的可执行**, 是静止的。 进程是程序的一次执行, 是活动的。线程是进程的可执行单元,同一进程的不同线程共享进程的资源和地址空间。
12、 如何在c语言程序中内嵌汇编?
答:内嵌的汇编指令包括大部分的arm指令和thumb指令,但是不能直接引用c的变量定义,数据交换必须通过atpcs进行。嵌入式汇编在形式上表现为独立定义的函数体。
(具体请参考教材page183~184 **实例-11)
13、 编写一个打印3000~5000之间素数的程序,将上述程序的源**分散在两个文件中,其中一个文件包含main()函数,另一个文件包含prime()函数。编写makefile文件实现对这两个文件的编译。修改其中一个文件后,再进行编译,观察make的输出信息。
假设上述程序的源**包含两个c语言源文件,和其中main()函数包含在中,如下所示。
#include <>
#include<>
int prime(int);
void main()
int a,k;
for(a=3000;a<=5000;a++)
int prime(int x)
int i,j;
i = x-1);
for(j = 2; j<= i; j++)
if(j < i) return 0;
else return 1;
该工程的makefile文件内容如下。
makefile:
cc=armv4l-unknown-linux-gcc指明采用交叉编译器。
exec=fact表示编译后生成的可执行文件名为fact
objs= 给出目标文件列表。
cflags给出编译参数。
ldflags+=-static给出链接参数。
all:$(exec编译主入口。
(exec):$objs)
$(cc) $ldflags) -o $@objs) #注意行前空白由一个tab制表符生成
clean清除编译结果。
嵌入式系统复习
what why how 一 课程主要内容。1 嵌入式系统概念及基本知识。2 arm体系结构及指令集。3 ucosii内核原理。4 lpc系统芯片结构。5 基于ucosii的arm编程应用。重点 1 arm体系结构及指令集。2 ucosii内核原理。难点 1 基于ucosii的arm编程应用。二 复...
嵌入式系统复习
复习。题型。一 选择题 本题共10小题,每题2分,共20分 考察 基本概念。难度 中低。二 填空题 本题共10小题,每题2分,共20分 考察 基本概念及简单应用。难度 中高。三 简答题 本题共8小题,每题4分,共32分 考察 基本概念。难度 中等。四 程序设计题 本题共4小题,每题7分,共28分 考...
嵌入式系统复习
1 嵌入式系统概念。1 什么是嵌入式系统。2 实时系统。3 评价指标。4 与pc系统的差别。5 开发 host target 6 empu,dsp。soc 7 发展趋势。8 几种嵌入式系统。9 发展。2 wince系统。1 微内核。2 wince架构的意义。3 wince系统架构,各层的定义,接口。...