嵌入式系统原理复习题.docx
- 文档编号:23514283
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:18
- 大小:134.88KB
嵌入式系统原理复习题.docx
《嵌入式系统原理复习题.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理复习题.docx(18页珍藏版)》请在冰豆网上搜索。
嵌入式系统原理复习题
嵌入式系统原理复习题
1、嵌入式系统的概念
◆嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
2、嵌入式系统的特点
◆系统内核小
◆专用性强
◆运行环境差异大
◆可靠性要求高
◆系统精简和高实时性操作系统
◆具有固化在非易失性存储器中的代码
◆无自举开发能力
3、嵌入式系统的硬件平台由哪些部分组成
硬件以微处理器为核心集成存储器和系统专用输入输出设备
1>处理器核(核心处理器、时钟分频器、定时器、DMA、中断控制、I/O端口、A/D转换)
2>外围电路电源、晶振、复位、端口、DRAM、Flash、ROM、网口、调试接口]和外设与扩展(USB、LCD、手写笔、键盘、红外等)。
4、嵌入式系统的分类
◆按嵌入式微处理器的位数分类:
4位;8位;16位;32位;64位;
◆按软件实时性需求分类:
非实时系统;软实时系统;硬实时系统;
◆按嵌入系统的复杂程度分类:
小型嵌入式系统;中型嵌入式系统;复杂嵌入式系统。
6、ARM9处理器的工作状态有哪些
ARM处理器的工作状态有2种:
1)ARM状态:
32位,ARM状态下执行字对准的32位ARM指令;
2)Thumb状态:
16位,Thumb状态下执行半字对准的16位Thumb指令。
在Thumb状态下,程序计数器PC使用位1选择另一个半字。
在程序执行的过程中,处理器可以在两种状态下切换,状态的切换不影响处理器的模式或寄存器的内容,ARM指令集和Thumb指令集都有相应的状态切换命令,但在ARM处理器在开始执行代码时,只能处于ARM状态。
7、ARM9处理器的内部寄存器结构
8、ARM9处理器的工作模式有哪些
ARM9微处理器核共支持7种工作模式:
◆系统模式:
正常执行程序时的处理器模式
◆用户模式:
运行特权操作系统任务时的模式
◆管理模式:
操作系统的保护模式
◆中止模式:
指令或数据预取操作中止时的模式,该模式下实现虚拟存储器或存储器保护
◆未定义模式:
当执行未定义的指令时进入该模式
◆IRQ模式:
响应普通中断时的处理模式
◆FIQ模式:
响应快速中断时的处理模式
9、CPRS寄存器各数据位的作用
◆4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) );
◆2个中断禁止位,分别控制一种类型的中断;
◆5个对当前处理器模式进行编码的位(M[4:
0]):
10000用户,10001快速中断,10010中断,10011管理,10111中止,11011未定义,11111系统;
◆1个用于指示当前执行指令(ARM还是Thumb)。
10、如何实现ARM状态和Thumb状态的切换
ARM处理器在两种工作状态之间切换方法:
◆进入Thumb状态:
当操作数寄存器Rm的状态位bit[0]为1时,执行BXRm指令进入Thumb状态。
如果处理器在Thumb状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort和SWI)返回时,自动切换到Thumb状态。
◆进入ARM状态:
当操作数寄存器Rm的状态位bit[0]为0时,执行BXRm指令进入ARM状态。
如果处理器进行异常处理(IRQ,FIQ,Undef,Abort和SWI),在此情况下,把PC放入异常模式链接寄存器LR中,从异常向量地址开始执行也可以进入ARM状态。
11、ARM为何集成了32位的ARM指令集和16位的Thumb指令集
12、ARM指令寻址方式与ARM指令集中各类常用指令的用法
◆ARM指令寻址方式:
1)立即寻址(立即数寻址)
操作数本身就在指令中给出。
例如以下指令:
ADDR0,R0,#1/*R0←R0+1*/
ADDR0,R0,#0x3f/*R0←R0+0x3f*/
在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”。
2)寄存器寻址
利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。
例如以下指令:
ADDR0,R1,R2/*R0←R1+R2*/
该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
3)寄存器间接寻址
以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。
例如以下指令:
LDRR0,[R1]/*R0←[R1]*/
STRR0,[R1]/*[R1]←R0*/
第一条指令将以R1的值为地址的存储器中的数据传送到R0中。
第二条指令将R0的值传送到以R1的值为地址的存储器中。
4)基址加偏址寻址(基址变址寻址)
操作数地址=基址寄存器+指令中给出的地址偏移。
将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。
变址寻址方式常用于访问某基地址附近的地址单元。
采用变址寻址方式的指令又可以分为以下几种形式:
前变址模式:
LDRR0,[R1,#4];R0←[R1+4]
自动变址模式:
LDRR0,[R1,#4]!
;R0←[R1+4]、R1←R1+4
后变址模式:
LDRR0,[R1],#4;R0←[R1]、R1←R1+4
5)堆栈寻址
堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
6)块拷贝寻址
块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式。
LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。
寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。
LDM/STM指令依据其后缀名的不同其寻址的方式也有很大不同。
7)相对寻址
与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。
以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
BLNEXT;跳转到子程序NEXT处执行
……
NEXT
……
MOVPC,LR;从子程序返回
◆ARM指令集中常用指令:
1)数据处理指令:
主要完成寄存器中数据的算术和逻辑运算操作。
数据处理指令根据指令实现处理功能可分为以下六类:
数据传送指令;算术运算指令;逻辑运算指令;比较指令;测试指令;乘法指令。
操作码[24:
21]
助记符
意义
效果
0000
AND
逻辑位与
Rd=RnANDOp2
0001
EOR
逻辑位异或
Rd=RnEOROp2
0010
SUB
减
Rd=Rn-Op2
0011
RSB
反向减
Rd=Op2–Rn
0100
ADD
加
Rd=Rn+Op2
0101
ADC
带进位加
Rd=Rn+Op2+C
0110
SBC
带进位减
Rd=Rn-Op2+C-1
0111
RSC
反向带进位减
Rd=Op2-Rn+C-1
1000
TST
测试
根据RnANDOp2设置条件码
1001
TEQ
测试相等
根据RnEOROp2设置条件
1010
CMP
比较
根据Rn-Op2设置条件码
1011
CMN
负数比较
根据Rn+Op2设置条件码
1100
ORR
逻辑位或
Rd=RnOROp2
1101
MOV
传送
Rd=Op2
1110
BIC
位清零
Rd=RnANDNOTOp2
1111
MVN
求反
Rd=NOTOp2
2)Load/Store指令
3)程序状态寄存器与通用寄存器之间的传送指令
4)转移指令
5)异常中断指令
6)协处理器指令
13、什么是交叉编译,为什么要进行交叉编译
交叉编译:
简单地说,就是在一个平台上生成另一个平台上的可执行代码。
原因:
1>在项目的起始阶段,目的平台尚未建立,因需要做交叉编译,以生成我们所需要的bootloader(启动引导代码)以及操作系统核心;
2>当目的平能启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。
14、简述构建交叉编译链的主要步骤
15、简述嵌入式系统的开发流程
1>系统定义与需求分析;
2>系统设计方案的初步确立;
3>初步设计方案性价比评估与方案评审论证;
4>完善初步方案、初步方案实施;
5>软硬件集成测试;
6>系统功能性能测试及可靠性测试。
16、嵌入式系统与通用计算机的区别
嵌入式系统(简称“嵌”)和通用计算机(简称“通”)的主要区别包括以下几点:
1>形式与类型
“通”:
实实在在的计算机。
按其体系结构、运算速度和规模可分为大型机、中型机、小型机和微机
“嵌”:
“看不见”的计算机,形式多样,应用领域广泛,按应用进行分类
2>组成
“通”:
通用处理器、标准总线和外设、软硬件相对独立
“嵌”:
面向特定应用的微处理器,总线和外设一般集成在处理器内部,软硬件紧密结合
3>系统资源
“通”:
系统资源充足,有丰富的编译器、集成开发环境、调试器等
“嵌”:
系统资源紧缺,没有编译器等相关开发工具
4>开发方式
“通”:
开发平台和运行平台都是通用计算机
“嵌”:
采用交叉编译方式,开发平台一般是通用计算机,运行平台是嵌入式系统
5>二次开发性
“通”:
应用程序可重新编程
“嵌”:
一般不能重新编程开发
6>发展目标
“通”:
编程功能电脑,普遍进入社会
“嵌”:
变为专用电脑,实现“普及计算”
17、常见的嵌入式操作系统有哪些,各自有什么特点
常见的嵌入式操作系统有:
VxWorks;WindowsCE;PalmOS;嵌入式Linux,ucOS...
PlamOS特点:
1)操作系统的节能功能。
在PalmOS的应用程序中,如果没有事件运行,则系统设备进入半休眠(doze)的状态;如果应用程序停止活动一段时间,则系统自动进入休眠(sleep)状态。
2)合理的内存管理。
Palm的存储器全部是可读写的快速RAM,动态RAM(DynamicRAM)类似于PC机上的RAM,它为全局变量和其它不需永久保存的数据提供临时的存储空间;存储RAM(StorageRAM)类似于PC机上的硬盘,可以永久保存应用程序和数据。
3)PalmOS的数据是以数据库(database)的格式来存储的。
嵌入式Linux的特点:
1)开放源码,丰富的软件资源,广泛的软件开发者的支持,价格低廉,结构灵活,适用面广。
2)精简的内核,性能高、稳定,多任务。
3)适用于不同的CPU,支持多种体系结构,如X86、ARM、MIPS、ALPHA、SPARC等。
4)能够提供完善的嵌入式GUI以及嵌入式X-Windows。
5)提供嵌入式浏览器、邮件程序、MP3播放器、MPEG播放器、记事本等应用程序。
6)提供完整的开发工具和SDK,同时提供PC上的开发版本。
7)用户可定制,可提供图形化的定制和配置工具。
8)常用嵌入式芯片的驱动集,支持大量的周边硬件设备,驱动丰富。
9)针对嵌入式的存储方案,提供实时版本和完善的嵌入式解决方案。
10)完善的中文支持,强大的技术支持,完整的文档。
18、什么是BootLoader,ARM系统中BootLoader的主要作用是什么?
BootLoader的基本概念:
BootLoader就是在操作系统内核运行之前运行的一段小程序。
BootLoader的主要作用:
通过这段小程序,我们能初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,以正确地调用内核来执行。
19、简述BootLoader的启动过程
→BootLoader的阶段1(stage1)
1)硬件设备初始化
Ø屏蔽所有的中断
Ø设置CPU的速度和时钟频率
ØRAM初始化
Ø初始化LED
Ø关闭CPU内部指令/数据cache
2)为加载BootLoader的stage2准备RAM空间
Ø分配的空间大小最好是memorypage大小(通常是4KB)的倍数。
Ø确保所安排的地址范围是可读写的RAM空间
Ø将所安排的RAM空间范围进行清零操作
3)拷贝BootLoader的stage2到RAM空间中
Østage2的可执行映象在固态存储设备的存放起始地址和终止地址
ØRAM空间的起始地址
4)设置好堆栈
Ø设置堆栈指针是为了执行C语言代码作好准备,通常把sp的值设置为state2_end-4
5)跳转到stage2的C入口点
Ø在ARM系统中,可以通过修改PC寄存器为合适的地址来实现
→BootLoader的阶段2(stage2)
1)初始化本阶段要使用到的硬件设备
Ø初始化至少一个串口
Ø初始化计时器等
2)检测系统内存映射(memorymap)
Ø所谓内存映射就是指在整个4GB物理地址空间中有哪些地址范围被分配用来寻址系统的RAM单元
Ø内存映射描述:
Ø内存映射检测:
3)将kernel映像和根文件系统映像从Flash上读到RAM空间中
Ø规划内存占用的布局
(1)内核映像所占用的内存范围
(2)根文件系统所占用的内存范围
Ø从Flash上拷贝
4)为内核设置启动参数
Ø在嵌入式Linux系统中,通常需要由BootLoader设置的常见启动参数有:
ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD等
5)调用内核
ØBootLoader调用Linux内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到MEM_START+0x8000地址处。
20、Linux内核源码是如何组织的,主要的目录文件有哪些?
顶层目录中另一个比较重要的文件是Makefile,它是整个内核配置编译的核心文件,负责组织目录树中的子目录的配置编译管理,还决定了体系结构和内核版本号等。
Øarch:
包含和硬件体系结构相关的代码,每种平台占一个相应的目录。
如arm、avr32、blackfin、mips等。
Øblock:
块设备驱动程序的IO调度。
Øcrypto:
常用的加密和离散算法,还有一些压缩和CRC校验算法
ØDocumentation:
内核的说明文档。
Ødrivers:
设备驱动程序,其下细分为不同种类的设备。
如block、char、mtd、net、usb、video等等。
Øfs:
内核支持的文件系统的实现,如ext2、ext3、cramfs、jffs2、nfs等
Øinclude:
头文件。
与系统相关的头文件放在include/linux下,与ARM体系结构相关的头文件放在include/asm-arm下。
Øinit:
内核初始化代码。
Øipc:
进程间通信代码
Økernel:
内核的核心代码,包括进程调度、定时器等。
和arm平台相关的核心代码在arch/arm/kernel目录下。
Ølib:
库文件代码
Ømm:
内存管理代码,和arm平台相关的内核管理代码在arch/arm/mm目录下。
Ønet:
网络相关的代码,实现了各种常见的网络协议。
Øscripts:
包含用于配置内核的各种脚本文件。
只在配置时是有意义的。
Øsound:
音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。
21、内核移植的一般步骤
→内核修改
Ø解压内核源码
使用如下命令进行加压:
tarjxvflinux-2.6.32.4.tar.bz2
Ø修改Makefile
整个Linux内核工程是以Makefile为核心完成编译和连接的。
进入内核源码目录,使用编辑工具打开一级目录下的Makefile文件,找到相关变量进行修改:
ARCH?
=arm
CROSS_COMPILE?
=arm-linux-
Ø修改目标板输入时钟
使用编辑工具打开内核源码目录中arch/arm/mach-s3c2440/mach-smdk2440.c文件,找到函数mini2440_map_io(void)的实现代码,如下:
……
s3c24xx_init_clocks(12000000);
……
Ø修改MTD分区
Linux下的MTD驱动程序接口被划分为两类模块:
用户模块和硬件模块。
内核MTD分区必须与Bootloader分区相一致。
最后去掉ECC校验:
将driver/mtd/nand/s3c2410.c文件中的“NAND_ECC_SOFT,”语句将其改为“NAND_ECC_NONE;”。
Ø配置yaffs2文件系统的补丁
YAFFS意义为'yetanotherflashfilesystem',也是一个开源的文件系统。
YAFFS文件系统则是专门针对NANDflash的,源代码可以到
http:
//www.aleph1.co.uk/yaffs/index.html上下载。
使用如下命令解压补丁包:
tar-zxvfroot.tar.gz
进入补丁所在目录,使用如下命令打补丁:
./patch-ker.shc
其中
上面命令执行过程中相当于完成以下三项操作:
(1)修改内核fs/Kconfig:
增加了一行:
source"fs/yaffs2/Kconfig"
(2)修改内核fs/Kconfig
增加一行:
ojb-$(CONFIG_YAFFS_FS)+=yaffs2/
(3)在内核fs/目录下创建yaffs2目录
→内核配置
Ø内核配置,生成.config文件。
Ø保存内核版本信息到include/linux/version.h。
Ø创建链接符号include/asm,链接include/asm-$(ARCH)源目录。
Ø升级所有依赖的前提文件,在arch/$(ARCH)/Makefile中指定附加依赖条件。
Ø递归地遍历各级子目录并且编译所有的目标。
init-*、core*、drivers-*、net-*、libs-*的目录变量值在arch/$(ARCH)/Makefile文件中有些扩展。
Ø链接所有的目标文件,生成顶层目录的vmlinux。
链接的第一个目标文件在head-y列表中,是在arch/$(ARCH)/Makefile中定义的。
Ø最后,体系结构相关的部分作必须的后期处理,编译生成最终的引导映像。
这可以包括编译引导记录;准备initrd映像等类似工作。
→内核编译
Ø编译的步骤就是执行一些相对固定的命令目标序列。
ØKbuild还提供了许多可选的配置编译目标和规则。
可以使用makehelp命令把所有的配置编译目标和说明信息打印到屏幕。
Ø其中常用的配置编译目标有(其执行格式为:
make<下列目标名之一>):
(1)清理目标(Cleantargets):
(2)内核配置的目标(Configurationtargets)
(3)其他通用目标(Othergenerictargets)
(4)静态解析器目标(Staticanalysers)
(5)内核打包目标(Kernelpackaging)
(6)文档目标(Documentationtargets)
(7)ARM体系结构相关的目标(Architecturespecifictargets(arm))
(8)缺省目标
22、嵌入式系统中根文件系统架构是如何组织的
在一个基本的Linux根文件系统中,应包括如下的文件:
∙链接库
∙设备文件
∙系统应用程序
∙系统初始化文件
基本目录结构:
∙bin必要的用户命令(二进制文件)
∙*boot引导加载程序使用的静态文件
∙dev设备文件及其他特殊文件
∙etc系统配置文件
∙*home用户主目录
∙lib必要的链接库,例如:
C链接库、内核模块
∙mnt临时挂载的文件系统的挂载点
∙“*”目录在嵌入式Linux上为可选的。
∙*opt附加软件的安装目录
∙proc提供内核和进程信息的proc文件系统
∙*rootroot用户主目录
∙sbin必要的系统管理员命令
∙tmp临时文件目录
∙usr大多数用户使用的应用程序和文件目录
∙var监控程序和工具程序存放的可变数据
23、设备驱动程序的功能,设备驱动程序的分类
驱动程序功能:
∙设备驱动程序将复杂的硬件抽象成一个结构良好的设备,并通过提供统一的程序接口为系统的其它部分提供使用设备的能力和方法。
∙设备驱动程序(应该只是)为系统的其它部分提供各种使用设备的能力,使用设备的方法应该由应用程序决定。
设备驱动程序的分类:
∙字符设备驱动程序各种串行接口,并行接口等。
∙块设备驱动程序磁盘设备等
∙网络设备驱动程序网卡等。
∙杂项设备驱动程序不属于上述三种设备之外的一些设备,如SCSI,时钟等。
24、简述字符设备驱动程序的主要组成部分
在Linux系统中,字符设备驱动由如下几个部分组成:
∙字符设备驱动模块加载与卸载函数
在字符设备驱动模块中应该实现设备号的申请和cdev的注册,而在卸载函数中应实现设备号的释放和cdev的注销。
∙字符设备驱动的file_operations结构体中成员函数
file_operations结构体中成员函数是字符设备驱动与内核的接口,是用户空间对Linux进行系统调用最终的落实者。
大多数字符设备驱动会实现read()、write()和ioctol()。
25、驱动程序与应用程序的区别
∙应用程序以main函数开始,驱动程序则没用main函数。
它以特殊的模块初始化函数为入口。
∙应用程序从头至尾执行一个任务,驱动程序在完成初始化后,等待系统调用。
∙应用程序可以使用GLIBC等标准C函数库,驱动程序不能使用标准C函数库。
ARM9处理器有__5__级流水线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 复习题