嵌入式系统的软件组成

嵌入式系统软件的重要组成部分

1.1:嵌入式软件的特色

嵌入式软件除了具备计算机软件的通常特性外,还具备一些与嵌入式系统特性密切相关的特色。所以,嵌入式系统与通用计算机软件有所不一样:ios

  • 1:软件与硬件一体化,软件固化存储。

在嵌入式系统中,操做系统和应用系统集成与计算机硬件系统中,系统软件、应用软件和系统的硬件一体化,咱们为了提升系统的启动、执行速度和系统的可靠性,嵌入式系统通常都固化与半导体存储器中,也大能够认为是压缩后存储在内存之中,而不会存储与磁盘等外存储器之中。web

  • 2:软件代码时空效率要求高,实时性要求高

当咱们在设计嵌入式的应用时,特别须要考虑的是成本的因素,嵌入式软件的时间和空间上都受到了严格的限制。嵌入式系统每每有较高的实时性要求,软件对于外部作出反应的时间要快,在某些状况下还要求响应时间是肯定的和可预测性的。数据库

  • 3:软件的应用环境复杂,开发的难度大

在咱们生活的环境之中,是有许许多多的天然因素是咱们没法预测和控制的,这也就使得咱们的嵌入式系统的工做环境也是同样。于此所以,在嵌入式软件开发中通常都是须要涉及到底层软件,这就要求开发人员要有扎实的软件和硬件基础,可以灵活的运用不一样的开发手段和工具。编程

  • 4:软件具备较长的生命周期

这个就比较简单的理解了,这些之中有许可能是好久之前20世纪就以研发出来而且配套产品一同进入咱们的市场。并发

1.2:嵌入式系统的软件结构

通常来讲,嵌入式系统能够根据所运行的环境不一样和要求不一样将嵌入式系统的软件划分位多种不一样的结构。svg

  • 1:简单的轮询(Round-Robin)结构

在一些低端的嵌入式系统中,处理器的处理能力比较低,存储的容量也比较小,因此通常来讲系统的功能都是相对的比较简单,一般也只须要一写简单的控制操做。函数

而最简单的软件结构就是轮询结构,其工做原理就能够类比高级语言中C语言的for循环,重复循环检查每一个外部输入条件,一旦有须要或者说是达到标准的任务时,就进行相关的处理。工具

//初始化
while(TRUE)
{
if(I/O设备1须要服务);//执行设备1服务函数
if(I/O设备2须要服务);//执行设备2服务函数
if(I/O设备3须要服务);//执行设备3服务函数
if(I/O设备4须要服务);//执行设备4服务函数
... ...
if(I/O设备n须要服务);//执行设备n服务函数
}

电子相关专业的同窗应该用过一个仪器就是“数字万用表”,而这个仪器就是根据这个简单的结构进行的测量操做
该结构的优势在于结构简单,便于编程。可是由于缺乏了中断机制,因此存在着程序随机切换时的一些潜在问题。spa

  • 2:带中断的轮询结构

这种结构在简单的轮询结构的“主循环”基础上增长中断服务程序(ISR操作系统

中断服务程序处理特别紧急的服务请求,设置状态标志;循环主程序轮询这些状态标志,并进行后续的处理。

这种结构也被称为中断驱动结构或先后台结构。

BOOL SA=FALSE; //A状态标志初值
BOOL SB=FALSE; //B状态标志初值
... ...
//事件A中断服务程序
{
	事件A紧急操做;
	SA=TRUE;
}
//事件B中断服务程序
{
 	事件B紧急操做;
	SB=TRUE;
}
... ...
void main(void)
{
	while(TRUE)
	{
		if(SA)
		{
			SA=FALSE;
			事件A非紧急操做;
		}
		if(SB)
 		{
   			SB=FALSE;
   			事件B非紧急操做;
  		}
  		.... ...
  	}
  }

咱们生活中的一个简单洗衣机的控制程序就是采用带中断的轮询结构

  • 3:监控式操做系统+应用软件结构

复杂的嵌入式系统要求嵌入式软件必须以多任务方式运行。为了合理地调度多任务和利用系统资源,一般须要选配嵌入式操做系统(Embedded Operating System,EOS

对与一些中端的嵌入式系统,小型的监控式操做系统就能够知足需求。这类操做系统一般只包含内核(kernel),以多个并发的任务(task)取代“主循环”。而操做系统的内核负责多任务处理,执行任务建立与初始化、任务调度、存储管理、时钟与中断管理等。

事件B中断服务程序
{	
	事件B紧急操做;
	发送信号T;
}
......
void task1( void)
while(TRUE){
	等待信号S;
	事件A非紧急操做;
	}
}

手机和汽车上的导航设备就是基于这个中监控式操做系统设计。

  • 4:通用嵌入式操做系统+应用软件的结构

这种结构的操做系统能够认为是一种高端嵌入式系统(能够相似于Andriod或者ios的智能手机系统)。其中,嵌入式系统软件控制和管理系统中的资源,为嵌入式应用提供支持,一般又可分为硬件抽象层/驱动层(HAL操做系统层中间件层

应用软件层: 应用任务1 应用任务2 应用任务n
中间件层 : Java中间件 消息中间件 数据库访问中间件
操做系统层: 通讯协议 文件系统 操做系统内核 嵌入式GUI
硬件抽象层 引导加载程序 存储器驱动 定时器驱动 I/O驱动
硬件层:若干硬件设备

1.3:硬件抽象层、板级支持包与中间件

1.3.1:

中间件:除了操做系统内核、设备驱动程序和应用软件以外的系统软件。是具备标准程序接口和协议的通用服务。
硬件抽象层(Hardware Abstract LayerHAL:是操做系统层与硬件之间设置的独立接口软件层,是具备直接依赖硬件的软件。引入HAL的目的就是对硬件进行抽象化,即将控制全部硬件电路的软件代码封装起来,使上层软件开发人员无须关心底层硬件的具体细节和差别。
板级支持包(Board Support Package,BSP:是由用户或硬件制造商编写的依赖与硬件的代码。

BSP在系统复位后负责系统硬软件的初始化,其功能能够分为三部分:

1):系统复位时的硬件初始化,包括处理器芯片的初始化和电路板的初始化
2):为操做系统提升硬件相关的驱动程序支持
3):引导加载操做系统,对硬件初始化后的对系统级的初始化

1.4:引导加载程序

1.4.1:引导加载程序的概念和功能
引导加载程序(引导程序)bootloader是底层软件的一部分。嵌入式系统上电复位后首先运行引导加载程序,它负责系统的上电自检、硬件初始化、创建存储空间映射、配置系统参数、创建上层软件的运行环境,并加载和启动操做系统。

1.4.2:嵌入式操做系统的加载方式 1):在Rom中直接运行操做系统代码 2):在Ram中运行操做系统代码 3):从外存储器加载操做系统代码运行 4):从通讯端口加载操做系统代码(下载)