嵌入式系统复习

发布 2022-10-21 06:19:28 阅读 5745

问答题、编程题举例:

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系统架构,各层的定义,接口。...