嵌入式系统思考题
- 0. 名词解释
- 1. 嵌入式系统概述
- 2. ARM处理器体系结构
- 3. ARM指令集
- 4. S5PV210微处理器与接口
- 5. ARM-Linux内核
- 6. 嵌入式Linux文件系统
- 7. 嵌入式Linux系统移植及调试
- 8. 设备驱动程序设计
- 9. QT图形界面应用程序开发基础
- 10. SQLite数据库
- 11. 嵌入式系统的开发设计案例
- 11. 嵌入式系统的开发设计案例
在复习嵌入式系统这门课时,根据老师给予的重点和课后题总结出的思考题合集
如有错误欢迎指出.
0. 名词解释
-
JTAG(Joint Test Action Group):JTAG是一种用于测试和调试集成电路的标准接口。它提供了对芯片内部信号和寄存器的访问,用于硬件调试和故障诊断。
-
BLX(Branch with Link and Exchange):BLX是ARM处理器的指令之一,用于在跳转到目标地址的同时,将当前指令的下一条指令地址保存到寄存器中。
-
MVN(Move Not):MVN是ARM处理器的指令之一,用于对操作数执行位求反操作。
-
LR(Link Register):LR是ARM处理器中的寄存器,用于存储返回地址,即函数调用后将要返回的下一条指令的地址。
-
CPSR(Current Program Status Register):CPSR是ARM处理器中的当前程序状态寄存器,用于存储当前处理器的运行状态和控制标志位。
-
SPSR(Saved Program Status Register):SPSR是ARM处理器中的保存的程序状态寄存器,用于存储在中断或异常发生时的前一个程序状态。
-
BSP(Board Support Package):BSP是指针对特定硬件平台的软件支持包,包含了针对该平台的驱动程序、操作系统适配层和各种工具。
-
SoC(System on a Chip):SoC是一种集成度高的芯片,将处理器核心、内存、外设接口和其他系统组件集成在一块芯片上,常用于嵌入式系统中。
-
LKM(Loadable Kernel Module):LKM是一种可动态加载到操作系统内核的模块,它扩展了操作系统的功能,并在需要时可以加载或卸载。
-
JFFS(Journaling Flash File System):JFFS是一种闪存文件系统,特别设计用于闪存存储器,提供可靠的数据存储和管理。
-
YAFFS(Yet Another Flash File System):YAFFS是一种专为闪存存储器设计的文件系统,具有快速的读写性能和高可靠性。
-
GPIO(General-Purpose Input/Output):GPIO是一种通用输入/输出接口,允许处理器与外部设备进行数字信号的输入和输出。
-
IIC(Inter-Integrated Circuit):IIC是一种串行通信协议,用于在电路板上的芯片之间进行通信。
-
U-Boot(Universal Bootloader):U-Boot是一种常用的开源引导加载程序,用于启动嵌入式系统,并提供各种引导和调试功能。
-
Thumb 状态:Thumb是ARM处理器的一种指令集,其指令长度较短,可以提高代码密度和节省存储空间。
-
ThumbEE 状态:ThumbEE是ARM处理器的一种扩展状态,用于支持更高级别的安全和代码保护功能。
1. 嵌入式系统概述
什么是嵌入式系统?
嵌入式系统是以应用为中心,以计算机技术为基础,软,硬件可裁剪,适用于应用系统对功能,可靠性,成本,体积,功耗等方面有特殊要求的专用计算机系统.
嵌入式系统有哪些基本要素?
嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统。
按嵌入式系统的复杂程度进行分类,可将嵌入式系统分为哪几类?
- 主要由微控制器构成的嵌入式系统,常常用于小型设备中(如温度传感器,烟雾和气体探测器及断路器)
- 不带计时功能的装置,可在过程控制,信号放大器,位置传感器及阀门传动器等中找到.
- 带计时功能的组件,这类系统多见于开关装置,控制器,电话交换机,包装机,数据采集系统,医药监视系统,诊断及实时控制系统等.
- 在制造或过程控制中使用的计算机系统,也是由工控机级组成的嵌入式计算机系统,是这四类中最复杂的一种,也是现代数控设备中经常应用的一种.
请叙述嵌入式系统的特点有哪些?
- 与"嵌入性"相关的特点:由于是嵌入对象系统中,因此必须满足对象系统的环境要求,如物理环境(小型),电气/气氛环境(可靠),成本(价廉)等要求.
- 与"专用性"相关的特点:针对某个特定应用需求或任务设计;软硬件的裁剪性;满足对象要求的最小软硬件配置等.
- 与"计算机系统"相关的特点:嵌入式系统必须是能满足对象系统控制要求的计算机系统(嵌入式微处理器,ROM,RAM.其他外围设备等).与前两个特点相呼应,这样的计算机必须配置有与对象系统相适应的机械,电子等接口电路.
请详细说明嵌入式系统的组成?
- 硬件层
- 硬件抽象层
- 操作系统层
- 应用软件层
嵌入式微处理器的特点有哪些?
- 大量使用寄存器,对实时多任务有很轻的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度.采用RISC结构形式.
- 具有功能很强的存储区保护功能.这是由于嵌入式系统的软件结构已模块化,而为了避免再软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断.
- 可扩展的处理器结构,能最迅速地扩展出满足应用的最高性能的嵌入式微处理器.如ARM微处理器支持ARM(32位)的Thumb(16位)双指令集,兼容8位/16位器件.
请说明常用嵌入式处理器分成哪几类?
- 微控制器
- 嵌入式数字信号处理器
- 嵌入式微处理器
- 嵌入式片上系统
2. ARM处理器体系结构
请说明哈佛体系结构和冯诺依曼体系结构有何不同?
二者的区别就是程序空间和数据空间是否是一体的。 冯·诺依曼结构数据空间和地址空间不分开,哈佛结构数据空间和地址空间是分开的。
什么是 CISC 和 RISC ?
CISC的英文全称为“Complex InstrucTion Set Computer”,即“复杂指令系统计算机”.
RISC的英文全称为“Reduced InstrucTion Set Computer”,即“精简指令集计算机”.
RISC结构的特点:
- 单周期执行.它统一用单周期指令,从根本上克服了CISC指令周期的数目有长有短造成的运行中偶发性不确定,运行失常的问题.
- 采用高效的流水线操作.指令在流水线中并行地操作,提高了处理数据和指令的速度.
- 无微代码的硬连线控制.微代码的使用会增加复杂性和每条指令的执行周期.
- 指令格式的规则化和简单化.为与流水线结构相适应且提高流水线的效率,指令的格式必须趋于简单和固定的规则.此外,尽量减少寻址方式,从而使硬件逻辑部件简化且缩短译码时间,同时也提高了机器的执行效率和可靠性.
- 采用面向寄存器组的指令.RISC结构采用大量的寄存器-寄存器操作指令,使指令系统更为精简.控制部件更为简化,指令执行速度大大提高.
- 采用Load/Store指令结构.
- 注重编译的优化,力求有效地支撑高级语言程序.
ARM体系结构中的v7和v8:
v7:采用了Thumb-2技术,是32位的.首次采用NEON信号处理扩展集.
v8:首次支持64位.支持三个主要指令集A32,T32,A64.
Cortex-A8处理器工作模式:
- 用户模式
- 系统模式
- 管理模式
- 外部中断模式
- 快速中断模式
- 数据访问中止模式
- 未定义指令中止模式
- 安全监控模式
大/小端存储模式
大端模式是被存字数据的高字节存储在存储系统的低地址中,而被存字数据的低字节则存放在存储系统的高地址中.
小端存储格式中,存储系统的低地址中存放的是被存字数据中的低字节内容,存储系统的高地址存放的是被存字数据中的高字节内容.
通常异常响应过程:
- 保护断点,即保存下一个将要执行的指令的地址,就是把这个地址送入堆栈.
- 寻找中断入口,根据不同的中断源所产生的中断,查找不同的入口地址.
- 执行中断处理程序.
- 中断返回,执行完中断指令后,就从中断出返回到主程序,继续执行.
ARM处理器对异常的响应过程:
-
进入与特定的异常响应的运行模式.
-
将CPSR的值保存到将要执行的异常中断相应的SPSR_mode中,以实现对处理器当前运行状态,中断屏蔽和各标志位的保护.
-
将引起异常指令的下一条指令的地址存入相应的链接寄存器,以便程序在异常处理结束返回时能正确返回到原来的程序出继续向下执行.
-
设置CPSR的低5位,使处理器进入相应的工作模式.
-
根据异常类型,将向量地址强制复制给PC,以便执行相应的异常处理程序.
3. ARM指令集
ARM 处理器的指令集主要有哪些?
- ARM指令集,是ARM处理器的原生32位指令集,所有指令长度都是32位,以字对齐(4字节边界对齐)方式存储;该指令集效率高,但是代码密度较低.
- Thumb指令集是16位指令集,2字节边界对齐,是ARM指令集的子集;在具有较高代码密度的同时,任然保持ARM的大多数性能优势.
- Thumb-2指令集是对Thumb指令集的扩展,提供了几乎与ARM指令集完全相同的功能.同时具有16位和32位指令,既继承了Thumb指令集的高代码密度,又能实现ARM指令集的高性能;2字节边界对齐,16位和32位指令可自由混合.
- Thumb-2EE指令集是Thumb-2指令集的一个变体,用于动态产生的代码;不能与ARM指令集和Thumb指令集交织在一起.
什么是寻址方式?
寻址方式是指处理器根据指令中给出的地址信息,找出操作数所存放的物理地址,实现对操作数的访问.
请写出 ARM 指令系统 6 种以上寻址方式?
- 立即寻址
- 寄存器寻址
- 寄存器间接寻址
- 寄存器移位寻址
- 变址寻址
- 多寄存器寻址
- 相对寻址
- 堆栈寻址
- 块复制寻址
4. S5PV210微处理器与接口
请简述 S5PV210 处理器 GPIO 端口操作步骤?
-
确定所使用的GPIO端口的功能,如作为输入/输出引脚使用时,是否需要设置上拉/下拉电阻;作为其他功能使用时,对应S5PV210处理器的芯片手册进行设置.
-
确定GPIO端口的输入/输出方向,通过端口设置寄存器完成端口的输入/输出功能或其他功能设置.
-
对数据寄存器操作.如果设置为输入引脚,读取数据寄存器对应位值,实现引脚状态的读取;如果设置为输出引脚,通过写数据寄存器对应位值,实现引脚状态的设置.
S5PV210启动过程:
上电后首先执行BL0,该段代码主要的工作序列如下所示:
- 关看门狗时钟.
- 初始化指令Cache.
- 初始化栈,堆.
- 初始化块设备复制函数.
- 初始化PLL及设置系统时钟.
- 根据OM引脚设置,从相应启动介质复制BL1到片内SRAM的0xD002_0000地址处,并检查BL1的checksum信息,如果检查失败,IROM将自动尝试第二次启动.
- 检查是否是安全模式启动,如果是则验证BL1完整性.
- 跳转到BL1起始地址处.
BL1:
初始化系统时钟,内存,串口等.然后将BL2代码复制到InternalSRAM的BL2区中并跳转执行.
BL2:
初始化网卡,Flash等.之后BL2读取操作系统镜像到内存中运行.
5. ARM-Linux内核
请简要描述 ARM-Linux 中断处理过程?
-
中断申请并响应:
分配中断线,注册中断服务程序时把设备中断处理程序添加进系统,使在中断发生的时候调用相应的中断处理程序. -
保存现场:
处理中断时要保存现场,然后才能处理中断,处理完之后还要把现场状态恢复后才能返回到被中断的地方继续执行. -
中断处理:
ARM Linux对中断的处理主要分为内核模式下的中断处理模式和用户模式下的中断处理模式. -
中断返回:
在用户模式下产生中断,则在返回时会根据需要进行进场调度,而如果中断发生在管理等内核模式下是不会进行进程调度的.
6. 嵌入式Linux文件系统
JFFS2 的主要不足是什么?
- 挂载时间过长.JFFS2的挂载过程需要对闪存从头到尾扫描,这个过程比较花费时间.
- 磨损平衡具有较大随意性.JFFS2对磨损平衡是用概率的方法来解决的,这很难保证磨损平衡的确定性.在某些情况下,可能造成对擦写块不必要的擦写操作;在某些情况下,又会引起对磨损平衡调整的不及时.
- 扩展性很差.首先,闪存越大,闪存上节点数目越多挂载时间就越长.其次,虽然JFFS2尽可能减少内存的占用,但实际上对内存的占用量是同i节点数和闪存上的节点数成正比的.
7. 嵌入式Linux系统移植及调试
U-Boot的主要特点:
- 源码开放,目前有些版本未开源.
- 支持多种嵌入式操作系统内核和处理器架构.
- 可靠性和稳定性均较好.
- 功能设置高度灵活,适合调试,产品发布等.
- 设备驱动源码十分丰富,支持绝大多数常见硬件外设;并将对于与硬件平台相关的代码定义成宏并保留在配置文件中,开发者往往只需要修改这些宏的值就能成功使用这些硬件资源,简化了移植工作.
什么是主机-目标机交叉开发模式?
是由开发主机和目标机两套计算机系统组成的.开发主机一般指通用计算机,如PC等,目标机指嵌入式开发板.通过交叉开发环境,在主机上使用开发工具,针对目标机设计应用系统进行设计,然后下载到目标机上运行.在此之后的嵌入式系统应用程序的设计,都可以在主机上编辑,通过设置好的交叉编译工具链生成针对目标机运行的嵌入式应用程序,然后下载到目标机上测试运行,并可对该程序进行调试.
主机-目标机的文件传输方式有哪些?
- 串口传输方式: 实现相对简单,但是速度慢,不适合较大文件的传输.
- USB接口传输方式: 将主机设为主设备端,目标机设为从设备端.速度快,配置灵活,易于使用.
简述交叉开发模式一般采用的三个步骤?
-
在主机上编译BootLoader,然后通过JTAG接口烧写到目标板.(如果已经运行起可用BootLoader,并且支持烧写Flash功能,则可利用BootLoader通过网络下载映像文件并烧写)
-
在主机上编译Linux内核,然后通过BootLoader下载到目标板以启动或烧写到Flash.(内核支持NFS可以通过NFS方式挂载根文件系统)
-
在主机上编译各类应用程序,通过NFS或其他方式运行,调试这些程序,验证无误后再将制作好的文件系统映像烧写到目标板.
8. 设备驱动程序设计
作为Linux内核的重要组成部分,设备驱动程序主要完成以下的功能:
-
对设备初始化和释放.
-
把数据从内核传送到硬件和从硬件读取数据.
-
读取应用程序传送给设备文件的数据和回送应用程序请求的数据.
-
检测错误和处理中断.
Linux设备驱动程序分类有哪些?
-
字符设备
-
块设备.如:光盘,硬磁盘,软磁盘,磁带等.
-
网络设备
字符设备驱动程序的初始化流程:
-
定义相关的设备文件结构体.
-
向内核申请主设备号.
-
申请成功后,通过调用MAJOR()函数获取主设备号.
-
初始化cdev的结构体,可以通过调用cdev_init()函数实现.
-
通过调用cdev_add函数注册cdev到内核.
-
注册设备模块,主要使用module_init()函数和module_exit()函数.
Linux设备驱动程序可以分为两个主要组成部分:
-
对子程序进行自动配置和初始化,检测驱动的硬件设备是否正常,能否正常工作.如果该设备正常,则要进一步初始化该设备及相关设备驱动程序需要的软件状态.这部分驱动程序仅在初始化的时候被调用一次.
-
设备服务子程序和中断服务子程序,这两者分别是驱动程序的上下两部分.驱动程序的上半部分即设备服务子程序的执行是系统调用的结果,并且伴随着用户态向核心态的演变,在此过程中还可以调用与进程运行环境有关的函数,比如sleep()函数.驱动程序的下半部分即中断服务子程序,在Linux环境下,系统并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是接受硬件中断,然后再调用中断服务子程序.中断可以产生于任何一个进程运行的过程中.
Linux设备驱动程序是如何加载进内核的?
一种是将驱动程序编译成模块形式进行动态加载,常用命令有insmod(加载)、rmmod(卸载)等;
另一种是静态编译,即将驱动程序直接编辑放进内核。 动态加载模块设计使 Linux 内核功能更容易扩展。而
静态编译方法对于在要求硬件只是完成比较特定、专一的功能的一些嵌入式系统中,具有更高的效率。
字符设备驱动程序编写涉及到的三个重要内核数据结构:
-
file_operations: 为用户态应用程序提供接口,是系统调用和驱动程序关联的重要数据结构.
是一个字符设备把驱动的操作和设备号联系在一起的接口,也是一系列指针的集合. -
file: 表示一个抽象的打开的文件,file_operations结构体就是file结构的一个成员.内核在用open()函数打开设备文件时创建file结构,并传递给在该文件上操作的所有函数,直到最后的close()函数.
-
inode: 表示一个文件,对于单个文件,系统允许有多个表示打开的文件描述符的file结构,但他们都指向同一个inode结构.是Linux管理文件系统的最基本单位,也是文件i同链接任何子目录、文件的桥梁.
9. QT图形界面应用程序开发基础
QT特点(优点):
- 面向对象
- 丰富的API函数和直观的C++类库
- 支持2D/3D图形渲染,支持OpenGL.
- 具有跨平台IDE的集成开发工具.
- 跨桌面和嵌入式操作系统的移植性.
- 大量的开发文档.
- 国际化.
简述 QT5 的信号和插槽机制
信号(Signal):信号是一个特殊的函数,它在对象内部某个事件发生时被触发。信号可以被视为一种通知,表示某个特定的事件已经发生。例如,一个按钮对象可以定义一个名为clicked()
的信号,表示按钮被点击了。
插槽(Slot):插槽是一个普通的成员函数,用于响应信号的发出。插槽可以被视为信号的接收器,当相应的信号被触发时,与之关联的插槽函数将被调用。例如,一个文本框对象可以定义一个名为textChanged()
的插槽,用于在文本内容发生变化时执行一些操作。
信号与插槽的连接:信号和插槽通过连接机制建立关联。当一个信号发出时,与之连接的插槽将被自动调用。连接可以在代码中手动设置,也可以通过Qt的可视化工具进行操作。
使用信号和插槽机制可以实现对象之间的松耦合通信。一个对象可以发出信号,而不需要知道响应的对象是谁或如何处理这个信号。相应的插槽可以在任何时间被连接或断开,使得系统的灵活性得到提高。
10. SQLite数据库
嵌入式数据库特点:
- 嵌入性.嵌入性是嵌入式数据库系统最基本的特征.
- 移植性.
- 安全性.
- 实时性.
- 可靠性.
- 主动性.
SQLite主要特点:
- 支持ACID事务.
- 零配置,即无需安装和管理配置.
- 储存在单一磁盘文件中的一个完整的数据库.
- 数据文件可在不同字节顺序的机器间自由共享.
- 支持数据库容量至2TB.
- 程序体积小,全部C语言代码约3万行,250KB大小.
- 相对于目前其他嵌入式数据库具有更快捷的数据操作.
- 支持事务功能和并发处理.
- 程序完全独立,不具有外部依赖性.
- 支持多种硬件平台,如ARM/Linux,SPARC/Solaris等.
11. 嵌入式系统的开发设计案例
嵌入式数据库特点:
- 嵌入性.嵌入性是嵌入式数据库系统最基本的特征.
- 移植性.
- 安全性.
- 实时性.
- 可靠性.
- 主动性.
SQLite主要特点:
- 支持ACID事务.
- 零配置,即无需安装和管理配置.
- 储存在单一磁盘文件中的一个完整的数据库.
- 数据文件可在不同字节顺序的机器间自由共享.
- 支持数据库容量至2TB.
- 程序体积小,全部C语言代码约3万行,250KB大小.
- 相对于目前其他嵌入式数据库具有更快捷的数据操作.
- 支持事务功能和并发处理.
- 程序完全独立,不具有外部依赖性.
- 支持多种硬件平台,如ARM/Linux,SPARC/Solaris等.
11. 嵌入式系统的开发设计案例
请画出嵌入式系统协同设计流程,并简要说明各阶段内容?
新手上路,有错请指正;