1.嵌入式系统软件
1.1 嵌入式软件概述
嵌入式软件是指应用在嵌入式计算机系统中的各种软件。
其特点有:
规模较小;
开发难度大,开发人员对硬件和软件都要了解,且开发环境和运行环境不同;
实时性、可靠性要求比较高;
要求固化存储,如程序写入flash。
注:固化不是说程序永远不变,而是暂时不变。
1.2 嵌入式软件分类
类型 | 功能 | 示例 | 说明 |
系统软件 | 控制、管理系统资源 | 嵌入式操作系统、设备驱动程序、中间件等 | 可能在选择题出现,判断软件类型 |
应用软件 | 定义了嵌入式设备的主要功能和用途,并负责与用户交互。 | 手机软件、路由器软件、交换机软件、飞控软件等 | |
支撑软件 | 辅助软件开发的工具 | 系统分析设计工具、仿真开发工具、交叉编译器、测试工具等。 |
1.3 嵌入式软件的体系结构
1.3.1无操作系统阶段
在无操作系统的嵌入式软件有两种实现方式: 循环轮转 和 前后台系统;
循环轮转:将系统功能分解为若干不同的任务,将他们放在一个无限循环中按照顺序执行。优点是简单、直观、开销较小(系统只有一条执行流程和一个地址空间)、可预测(程序固定,函数调用关系明确);缺点是过于简单,所有的代码顺序执行,无法执行异常事件,缺少并行处理能力;
前后台系统:在循环轮转方式中增加了中断处理功能;前台程序(事件处理级)是中断服务程序,负责处理异步事务;后台程序(任务级)是一个无限循环,负责资源分配、管理和系统调度;系统运行时,后台程序会检测每个任务是否具备运行条件,对实时性要求高的操作通常由中断完成;前后台系统任务所有的任务具有相同的优先级,任务的执行是通过先进先出队列排队;实时性较差;
1.3.2有操作系统阶段
嵌入式设备上开始运行操作系统,应用开始在操作系统基础上编写。提高了系统可靠性;提高了系统的开发效率,降低了开发成本,缩短了开发周期;有利于系统的扩展和移植;
1.4 设备驱动层(★★★)
大多数嵌入式硬件都需要某种类型软件的初始化和管理。这部分工作由设备驱动层来完成,它负责与硬件设备打交道,对硬件进行管理和控制,为上层软件提供所需的驱动支持。
设备驱动层也叫板级支持包BSP(Board Support Package),包含嵌入式系统中所有与硬件相关的代码,把嵌入式操作系统与具体的硬件平台隔离开来;即把硬件相关的代码都封装起来,向上提供一个虚拟的硬件平台,操作系统就运行在这个虚拟的硬件平台上,操作系统使用一组定义好的编程接口来和BSP进行交互,并通过BSP来访问真正的硬件;
BSP一般包括 BootLoader 和 设备驱动程序
Bootloader (引导加载程序)是嵌入式系统上电后运行的第一段软件代码。Bootloader的实现高度依赖于具体的硬件平台,主要的功能是:
- 片级初始化:主要完成微处理器的初始化;把微处理器从上电默认状态设置为系统要求的状态;纯硬件的初始化过程;
- 板级初始化:设置各种硬件寄存器来完成微处理器以外的其他硬件设备的初始化;设备某些软件的数据结构和参数;同时有软件和硬件的初始化过程;
- 加载内核:将操作系统和应用程序的映像从Flash存储器赋值到系统内存中;跳转到系统内核的第一条指令处执行;
设备驱动程序:嵌入式系统中不一定都有操作系统,但是设备驱动程序是必不可少的;设备驱动程序,是一组库函数,用来对硬件进行初始化和管理,并向上层软件提供良好的访问接口;
主要可以实现对硬件的:启动、关闭、停用、启用、读操作、写操作;还有一些特定的功能,一般通过函数的形式来实现。这些函数一般有两种组织结构:
- 分层结构:把设备驱动程序中的所有函数分为两类:硬件接口(直接操作和控制硬件设备)和上层接口(给上层软件提供调用接口);
- 混合结构:上层接口和硬件接口的函数混在一起、相互调用,没有明确的层次关系。
1.5 嵌入式中间件
中间件:在操作系统内核、设备驱动程序和应用软件之外的所有系统软件;
把原本应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件,从而为运行在它上面的那些应用软件提供一个灵活、安全、移植性好、相互通信、协同工作的平台;根据功能分为不同的类型:消息中间件、对象中间件、远程过程调用、数据库访问中间件、安全中间件等;
优点:可以有效的实现软件的可重用,降低应用软件的复杂性,提高系统的开发效率,缩短开发周期,节约开发成本和维护费用,保证了系统的高伸缩性、易升级性
缺点:会带来额外的开销;
1.6 运行流程
基于多任务操作系统的嵌入式系统的软件流程可以分为五个阶段
2 嵌入式操作系统概述
主要出现在选择题中
嵌入式操作系统的基本概念(★★)
嵌入式操作系统的分类(★★★)
常见的嵌入式操作系统(★★)
2.1嵌入式操作系统基本概念(★★)
2.1.1 功能
与通用操作系统类似,也可以从两个方面描述嵌入式操作系统的功能。
通用功能
嵌入式操作系统(embedded Operationg System,EOS):工作在嵌入式环境中的操作系统;
可以从两个方面描述嵌入式操作系统的功能
- 从软件开发的角度,可以把嵌入式操作系统看作一种扩展机或虚拟机;将底层的硬件细节分装起来,为运行在它上面的软件提供了一个抽象的编程接口,即操作系统对外提供的系统调用函数;
- 从系统管理角度,可以把EOS看成系统资源的管理者,负责管理系统当中的各种软硬件资源。
特有功能
嵌入式操作系统一般具有一般操作系统的功能,同时具有嵌入式软件的特点,主要有:
- 非通用型操作系统;
- 在性能和实用性方面可能有严格的限制;
- 能源、成本和可靠性通常是影响设计的重要因素;
- 占用资源少,适合在有限存储空间运行;
- 可裁剪、可配置。
2.1.2 内核
不同的嵌入式操作系统,包含的组件各不相同,但所有的操作系统都会有一个内核。
内核是指操作系统中的一个组件,包含了操作系统的主要功能,即操作系统的各种特性及其相互之间的依赖关系
内核的主要功能:
任务管理:对系统中运行的软件进行描述和管理,并完成处理器资源分配和调度;
存储管理:提高内存的利用率,方便用户使用,提供足够的存储空间;
I/O设备管理:方便设备的使用,提高CPU和IO设备的利用率;
文件管理: 解决文件资源存储、共享、保密和保护等问题;
NOTE:不同嵌入式系统的内核设计各不相同,不一定都包含上述的四个功能;取决于系统的设计和需求;
2.2 嵌入式操作系统的分类
2.2.1 按系统类型分类
商用系统:商业化的嵌入式OS;功能强大、性能稳定、应用范围相对较广、辅助软件工具齐全;价格较贵;如 VxWorks、Windows CE;
专用系统:专业厂家为本公司的产品特别定制的嵌入式OS;
开源系统:开放源代码的嵌入式操作系统;免费、开源、性能优良、资源丰富、技术支持性强;如uC/OS,linux等。
2.2.2 按响应时间分类
硬实时系统:系统对响应时间有严格要求,若响应时间不能满足,会引起系统的崩溃或致命错误;
软实时系统:系统对响应时间有要求,若响应时间不能满足,会带来额外的可接受的代价;
非实时系统:响应时间没有严格要求,如分时操作系统,基于公平性原则,各进程分享处理器,获得大致相同的运行时间。
2.2.3 按软件结构分类
结构 | 说明 | 示例 | 特点 |
单体结构 | 中间件和设备驱动程序都集成在内核中,系统只有一个可执行文件,包含多个功能组件,功能模块之间可以相互调用。 | Linux uc/OS | 优点:性能好,系统各模块可相互调用,通信开销比较小 缺点:体积庞大、集成度太高,修改和调试困难 |
分层结构 | 操作系统划分为若干个层次,各个层次之间单向调用,上层调用下层接口;只有一个可执行文件,包含设备驱动程序和中间件; | MS-DOS | 优点:开发维护简单,模块可单独替换; 缺点:每个层次都要提供接口,带来额外开销; |
微内核结构 (客户/服务结构) | 内核中的大部分功能剥离出去,只保留核心的功能单元 | VxWorks QNX OS-9 C Executive CMX-RTX | 优点:内核非常小,易于扩展、调试方便;功能组件可以动态添加;安全性高;可执行性好; 缺点:通过微内核通信比系统调用更耗时,实时性稍差;客户单元和服务单元内存空间地址独立,切换时有额外开销。 |
2.3 常见嵌入式操作系统
系统 | 特点 |
VxWorks | 实时操作系统,基于微内核结构,嵌入式领域应用最广泛、市场占用率最高的商业系统; |
嵌入式linux | 高性能、可裁剪的内容;完善的网络通信和文件管理机制;优秀的开发工具;免费、开源;广泛的硬件支持;软件资源丰富。 |
Windows CE | 基于优先级的多任务操作系统,用在个人数字助理和智能电话等个人手持终端; |
uC/OS-II | 免费、开源、结构小巧、基于可抢占优先级调度的实时操作系统;面向中小型嵌入式系统。 |
QNX | 实时的,可扩充的操作系统,内核极小,运行速度极快 |
PalmOS | 32的嵌入式操作系统,应用在PDA和手机等手持移动终端上 |
pSOS | 高性能、高可靠性的实时操作系统,实现从简单的单个独立设备到复杂的、网络化的多处理器系统。 |
OS-9 | 提供了很好的安全性和容错性,灵活性和可升级性非常突出,应用在高科技产品中。 |
LynxOS | 分布式、嵌入式、可规模扩展的实时操作系统 |
天脉操作系统 | 根据机载领域需求和特点而研制的嵌入式实时操作系统。 |