2.1、嵌入式软件基础
2.1.1 嵌入式软件概述
嵌入式软件特点:
- 规模较小
- 开发难度大
- 硬件资源有限
- 嵌入式软件一般涉及到底层软件的开发,需要软硬件基础
- 开发环境和运行环境不同
- 实时性和可靠性要求高
- 要求固化存储
2.1.2 嵌入式软件的分类
嵌入式软件分类:
- 系统软件:控制和管理嵌入式系统资源,如嵌入式操作系统、驱动程序、中间件等。
- 支撑软件:辅助软件开发的工具软件。
- 应用软件:定义嵌入式设备的主要功能和用途,负责与用户进行交互。
2.1.3 嵌入式软件的体系结构
-
无操作系统阶段:
- 硬件配置较低,系统应用主要集中在控制领域。
- 嵌入式软件的设计是以应用为核心,应用软件直接建立在硬件上。
-
无操作系统的嵌入式软件的两种实现方式:
- 循环轮转
- 前后台系统(在循环轮转的基础上增加了中断处理功能)
-
循环轮转方式:
优点:简单、直观、开销小(系统只有一条执行流程和一个地址空间)、可预测(程序固定、函数调用关系明确)。
缺点:过于简单,所有代码顺序执行,无法处理异步事件缺乏并行处理能力。
-
前后台系统(在循环轮转的基础上增加了中断处理功能):
- 前台程序(事件处理及):中断服务程序,负责处理异步事件。
- 后台程序(任务集):一个无限循环,负责资源分配、管理和调度系统。
-
在系统运行时,后台程序会检查每个任务是否具备运行条件,对实时性要求严格的操作通常由中断完成。
- 前后台系统认为所有的任务具有相同的优先级,任务的执行是通过先进先出队列排队。
- 实时性较差。
-
有操作系统阶段:开发应用程序不再直接面对嵌入式硬件设备,而是在操作系统的基础上编写。优点有:
-
提高系统的可靠性
-
提高了系统的开发效率,降低了开发成本,缩短了开发周期。
- 可以按照软件工程的思想将程序分解为多个任务模块,每个任务模块的调试、修改几乎不影响其他模块。
- 商用软件提供了良好的多任务调试环境。
-
有利于系统的扩展与移植。
-
2.1.4 设备驱动层(也叫板级支持包BSP:包含了嵌入式系统中所有与硬件相关的代码)
-
大多数的嵌入式硬件设备都需要某种类型软件的初始化和管理。
-
这部分工作由设备驱动层来完成的,它负责直接与硬件打交道,对硬件进行管理和控制,为上层软件提供所需的驱动支持,类似PC系统中的BIOS和驱动程序。
-
BSP:
- 包括:引导加载程序BootLoader(BIOS)和设备驱动程序(MBR)。
- 把嵌入式操作系统与具体的硬件平台隔离开来。
- 即在PSP当中,把所有的硬件相关的代码都封装起来,向上提供一个虚拟的硬件平台,操作系统就运行在这个虚拟的硬件平台上。
- 操作系统使用一组定义好的编程接口来与BSP进行交互,并通过BSP访问真正的硬件。
-
Bootloader
引导加载程序boot loader是嵌入式系统上电后运行的第一段软件代码,是在操作系统内核运行之前运行的一小段程序。
-
通过这段程序,可以初始化硬件设备、建立内存空间的映射图。
-
将系统的软硬件环境设置到一个合适的状态,为最终调用操作系统内核做准备。
-
功能:
片级初始化、板级初始化、加载内核。
-
片级初始化:
- 主要完成微处理器的初始化
- 包括设置微处理器的核心寄存器和控制寄存器、微处理器的核心工作模式、局部总线模式等
- 把微处理器从上电的默认状态设置到系统要求的工作状态
- 纯硬件初始化过程
-
板级初始化:
- 设置各种硬件寄存器来完成微处理器以外的其它硬件设备的初始化
- 设置某些软件的数据结构和参数
- 同时有软件和硬件的初始化过程
-
加载内核:
将操作系统和应用程序的映像从flash存储器复制到系统内存中然后跳转到系统内核的第一条指令处开始执行。
-
-
设备驱动程序:
-
在嵌入式系统中,操作系统可能有也可能无,设备驱动程序是必不可少的。
-
设备驱动程序,是一组库函数,用来对硬件进行初始化和管理并向上层软件提供良好的访问接口。
-
大多数设备驱动程序都具备下面的基本功能:启动、关闭、停用、启用、读操作、写操作。
-
设备驱动程序的分层结构
把所有与硬件相关的细节都封装在硬件接口中,在硬件需要升级,需要更新设备驱动程序的时候,只需要改动硬件接口中的函数即可,而上层调用接口中的函数不需要做任何修改。
-
设备驱动程序的混合结构
-
上层接口和硬件接口函数混在一起、相互调用。
-
2.1.5 嵌入式中间件:
在操作系统内核顿号设备驱动程序和应用软件之外的所有系统软件都是嵌入式中间件。
-
基本思路:把原本属于应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件,从而为运行在它上面的那些应用程序提供一个灵活、安全、移植性好、相互通信、协同工作的平台。
-
特点:
- 可以有效的实现软件的可重用,降低应用软件的复杂性,提高系统的开发,缩短开发周期,节约开发成本和维护费用,保证了系统的高伸缩性、易升级性和稳定性。
- 但会带来额外的开销。
-
嵌入式中间件可以分为不同的类型,如消息中间件(RMI)、对象中间件(CORBA)、远程过程调用(RPC)、数据库访问中间件(GDBC)、安全中间件等。
-
嵌入式软件运行流程
2.2 嵌入式操作系统概述
2.2.1嵌入式操作系统基本概念
-
EOS,工作在嵌入式环境中的操作系统。
-
可以从两个方面来描述嵌入式操作系统的功能:
-
从软件开发的角度,可以把EOS看成是一种扩展机或虚拟机。
将底层的硬件细节封装起来,为运行在它上面的软件提供了一个抽象的编程接口,其操作系统对外提供的系统调用函数。
-
从系统管理的角度,可以把EOS看成是一种系统资源的管理者,负责管理系统当中的各种软硬件资源。
-
-
特有功能
- 非通用型操作系统
- 在性能和实时性方面有严格的限制
- 能源、成本和可靠性通常是影响设计的重要因素
- 占用资源少
- 可剪裁、可配置
-
不同的嵌入式操作系统,包含的组件各不相同,但所有操作系统都会有一个内核。
-
内核是指操作系统中的一个组件,它包含了OS的主要功能,及os的各种特性及其相互之间的依赖关系。
-
OS的主要功能
- 任务管理: 对系统中运行的软件进行描述和管理,并完成处理器资源分配和调度。
- 存储管理:提高内存的利用率,方便用户使用,提供足够的存储空间。
- IO设备管理:方便设备的使用,提高CPU和io设备的利用率。
- 文件管理:解决文件资源存储、共享、保密和保护等问题。
-
不同嵌入式操作系统的内核设计各不相同,不一定包含所有的四个功能模块,取决于系统设计和实际需求。
2.2.2嵌入式操作系统分类
-
按系统类型嵌入式操作系统可以分为三类:
-
商用系统:商业化的嵌入式操作系统。
- 功能强大、性能稳定、应用范围相对较广、 辅助软件工具齐全。
- 价格较贵
- 如Vxworks、Windows CE、PalmOS
-
专用系统:专业厂家为本公司产品特制的嵌入式操作系统
-
开源系统:开放源代码的嵌入式操作系统
- 免费、开源、性能优良、资源丰富、技术支持强
- 如uC/OS、Linux系统
-
-
按照系统对响应时间的敏感程度,可以分为:
-
硬实时系统:系统对响应时间有严格要求,若响应时间不能满足,是绝对不允许的, 会引起系统的崩溃或致命的错误。
-
软实时系统:系统对响应时间有要求,若响应时间不能满足,会带来额外可接受的代价。
-
非实时系统旺旺响应时间没有严格要求如分时操作系统,基于公平性原则各进程分享处理器,获得大致相同的运行时间。
-
-
按照软件体系结构,可以分为:
-
单体结构(uC/OS)
- 中间件和设备驱动程序通常集中在系统内核中。
- 系统只有一个可执行文件,包含所有功能组件,功能模块可相互调用。
- 如Linux、JbedRTOS、uC/OS、PDOS
- 优点:性能较好、系统各模块间可相互调用、通常开销较小。
- 缺点:操作系统体积庞大、高度集成、相互关联;系统剪裁、修改和调适都较困难。
-
分层结构(MS-DOS)
-
操作系统被划分为若干个层次,各个层次之间的调用关系是单向的,即某一层上的代码只能调用比它低层的代码。
-
只有一个大的可执行文件,包含有设备驱动程序和中间件。
-
系统的开发和维护较为简单。
-
要替换系统中的某一层时,不会影响到其他的层次。
-
但每个层次都要提供一种API接口函数,带来额外的开销。
-
-
微内核结构(Vxworks)
在内核中,把操作系统的大部分功能都剥离出去,只保留最核心的功能单元(负如进程管理、存储管理)。如:OS-9、C Executive、VxWorks和QNX等。
- 优点:
- 内核非常小
- 易于扩展、调试方便:新的功能组件可以被动态添加
- 安全性更高:大部分的系统功能被放置在内核之外
- 可移植性强
- 缺点:
- 通过微内核构造和发送信息、接受应答并解码所花费的时间比进行一次系统调用的时间多
- 很大程度取决于微内核的大小和功能
- 客户单元和服务器单元的内存地址空间是相互独立,在切换的时候会增加额外开销
- 优点:
这三类操作系统的差异体现在:内核的设计(内核中包含的功能组件)和在系统中集成的其他系统软件两个方面。
-
2.2.3常见嵌入式操作系统
内容来源:希赛网精讲视频