2019/8/161现代汽车电子技术信号与信息处理研究所丁山第5章汽车嵌入式系统软件的基础5.1基本概念5.1.1嵌入式系统的软件软件系统通常包括两部分,其一是系统软件,包括嵌入式操作系统及在它之下的各种应用软件;其二是用户的应用程序。嵌入式系统应具有很高的可靠性,在恶劣的环境中依然正常工作,具有很高的实时性要求质量和可靠性更高。面向嵌入式系统的操作系统有以下特点:要求代码量少,可进行裁剪和移植;实时性强;可靠性高。嵌入式系统的存储器一般包括程序空间(Rom或Flash)、数据空间(Ram)和I/O空间。在嵌入式系统中,程序空间一般采用的是非易失性存储器。目前大多数嵌入式系统采用Flash来存放代码和一些常数。数据空间用于存放所有数据,系统堆栈也处于此空间,一般采用易失性存储器。有片内数据空间与片外数据空间。I/O空间;采用统一编址的处理器。I/O空间与内存空间无关。5.1.2嵌入式系统的存储器结构4.1.3嵌入式系统软件的功能及其特点(1)系统启动:一旦复位信号有效,处理器先需运行初始化程序。(2)控制硬件:设备可能是端口映射的(I/O与存储器独立编址),也有可能是内存映射的(I/O与存储器统一编址)。(3)按位操作:需要操作硬件寄存器内某个二进制位。(4)软件要求固态化存储:嵌入式软件一般都固化在存储器芯片或处理器中,而不是在磁盘中。(5)软件的高实时性(6)代码执行速度和代码效率:•如果ISR或其他例程有严格的时序要求,应考虑使用汇编编写;•通过指针而不是变量的引用执行操作,编译器就能产生占用空间更少并且运行速度更快的代码。•如果某个函数操作同样的变量好几次,通过指针来进行访问通常会产生更有效率的代码。(7)中断与中断服务程序:中断切换机制是相同的,但不同的处理器在实现细节上还有不同。(8)可嵌套的中断与可重入性:如果允许中断嵌套,要确认所有在中断服务例程运行期间被调用的函数不是可重入的。。可重入是指函数在不必关心同步或相互访问的情况下能被来自不同任务的程序异步调用。(9)需要了解程序执行时间80和20原则,80%的速度问题存在于20%的代码中。(10)发布嵌入式系统程序的方法a.编写的代码作为硬件的一部分b.运行加载c.IPOEM(OriginalEquipmentManufacture)方式(11)应用中可编程(InApplicationProgram,IAP)功能a.引导装载程序b.Flash编程算法c.最新软件映像的下载程序5.2传统嵌入式系统软件的开发方法及其特点操作系统及嵌入式操作系统的选择如果系统复杂,需要选用操作系统。1.前后台系统。能够处理关键实时事件及中断服务程序(ISR)的简单循环代码,该过程简单,但相当实用。2.无优先级别的操作系统:可以将后台工作转化为可预先处理的工作。3.有优先级别的操作系统:在外部事件(比如中断等)发生时和操作系统内部调用时切换任务。MISRAC:1994年英国成立了一个汽车工业软件可靠性联合会(theMotorIndustrySoftwareReliabilityAssociation,MISRA),该组织于1998年发布了针对汽车软件安全性的C语言编程规范。基于任务的设计方法在系统设计阶段,嵌入式系统的设计通常采用DARTS(DesignApproachforRealtimesystem)设计方法进行任务设计。DARTS给出系统任务划分的方法和定义任务间接口的机制。对传统的软件结构化设计方法的扩展。除使用程序结构图与程序流程图外,采用并发图与信息隐藏模块,其主要功能是将实时系统分解为并发任务并定义并发接口。5.3嵌入式操作系统5.3.1嵌入式操作系统的基本概念嵌入式操作系统的特点嵌入式系统引入操作系统的原因5.3.2嵌入式操作系统的内核分类及基本结构单一内核;微内核层次划分:硬件接口层,核心层,系统层和应用服务接口层。应用服务接口层:提供基于系统功能的、面向应用的系统功能调用服务接口。系统层:提供面向对象的系统资源管理功能,如内存管理、文件管理、设备管理、网络协议管理等。核心层:包括运行系统所需要的最基本的功能模块,核心层针对应用提供几种最基本的服务,如系统时钟、电源管理、程序装载于运行、进程调度、内存管理等。硬件接口层:提供与嵌入式硬件系统交互的接口。5.3.3嵌入式操作系统内核的基本功能模块进程管理:操作系统需要为进程分配资源,实现进程间共享和交换信息,保护进程资源,以及实现进程间同步。在嵌入式开发中,往往用任务的概念表述内核可以独立调度的单元。任务状态一般分为:运行状态、就绪状态、等待状态等。三种状态通过操作系统进程调度程序来调度。任务调度方法大致分为三种:优先级调度、轮转调度和时间片调度;内存管理:一般通用操作系统的存储管理非常复杂,虚拟管理技术被广泛地使用。嵌入式操作系统的存储管理通常比较简单,在具体的嵌入式应用中,进程的数量和可能用到的内存容量是可预测的,因此,多采用静态内存管理。在内存分配策略上往往提供几种分配策略。存储管理的内存保护,在一般的操作系统中,每个应用程序都有自己的地址空间,不能任意访问其他应用程序的地址空间。某些嵌入式系统应用对内存保护有非常严格的要求。内存被分成操作系统的驻留程序,另外给用户进程。中断管理:计算机系统处理外部事件有两种方式:中断和查询。在操作系统中,中断与中断处理程序联系在一起的。多数嵌入式操作系统都是事件驱动的。中断处理函数引起任务切换如下:执行到任务A-响应中断执行并执行中断处理程序,切换到任务B-任务B运行退出后,切换到任务A-任务A继续运行。在中断处理上,一般操作系统与嵌入式操作系统的不同之处在于现场保护。一般操作系统的现场保护由操作系统来完成,在嵌入式操作系统中,由中断处理器程序来完成。在中断处理程序的入口要保护中断处理程序中要用到的寄存器,在中断处理完成后恢复。这样,以损失系统安全性为代价,同时增加了调试难度。如果系统面临多个中断信号同时发生的情况。则存在ISR响应先后的问题。操作系统与应用程序的接口-API从操作系统的角度来看,提供用户有两类接口:一是人机界面。另一类接口是操作系统提供给用户的应用程序的API函数,也就是系统调用。5.3.5嵌入式操作系统环境下的任务前/后台系统中,任务间的切换很简单,不必为每个任务安排堆栈,也不必保存每个任务所使用的cpu寄存器。5.3.6嵌入式操作系统的任务调度方式•不可抢占式调度(如图5-6所示)•可抢占式调度(如图5-7所示)•时间片轮转调度5.3.7嵌入式操作系统下任务间通信中断与任务间的通信即消息传递,是由嵌入式操作系统的内核完成的,通信方式有两个途径即全局变量或消息。通过全局消息进行通信•控制中断•控制任务切换•采用TAS操作,即处理允许标志控制法•利用信号量通过消息邮箱或消息队列,消息邮箱的示意图如图5-8所示,消息队列的示意图如图5-9所示。嵌入式操作系统实时性要求利用操作系统不仅可以极大地减少系统开发的工作总量,而且可以提高嵌入式系统软件的可移植性。系统的响应时间与信号的动态特性有关。这些不同的嵌入式应用系统的不同响应要求,体现了嵌入式对象对时间响应要求的多样性。根据嵌入式应用系统的激励-运行-响应特性,表现了嵌入式实时能力的可变更性。响应时间的多样性要求与响应时间可调整性,是嵌入式实时性分析的基本出发点。5.4嵌入式实时操作系统5.4.1实时系统在控制系统中,为控制器控制功能的执行满足和被控对象基于时间交互的要求,所以称为实时系统。实时性需求首先,准确合理地描述任务的时间要求,必须给出以下定义:•任务激活点或使能瞬间点•任务截止期•响应时间是激活点和任务执行结束这一段时间•最大允许响应时间也称为相对期限,任务期限也称为绝对期限,在时间线上可以通过激活点和相对期限来计算绝对期限;•任务周期:相连两个激活点的时间间隔称为激活周期,两任务执行时间间隔称为执行周期;硬实时需求和软实时需求如果要求任务必须在指定的时间间隔内完成,该任务就称为硬实时需求,这种情况下获得的确认信息既要准确又要可靠。如果没有在指定的时间间隔内必须要完成的要求,而仅仅是希望任务尽快完成,将被认为软的实时要求。嵌入式实时操作系统实时多任务操作系统(Real-timemulti-taskoperatingsystem)是嵌入式应用软件的基础和开发平台。RTOS是针对不同的处理器优化设计的高效率实时多任务内核。RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、消息管理、队列管理等等。嵌入式实时系统的特点:实时操作系统一般具有以下特点:•实时操作系统的内核必须非常小,即微内核设计•可重入,因为不可重入的内核比然带来慢速的中断响应和不可预测的操作时间•系统能够快速进行任务切换,保证任务抢先和deadline的完成•尽量减少中断的时间•提供固定或者可变的内存管理机制•提供一个能够满足应用要求的实时时钟•必须提供合适的进程任务调度的方法5.4.2嵌入式实时操作系统的内核(1)任务优先级如果应用程序在执行过程中各个任务的优先级是不变的,称为静态优先级;如果在执行过程中优先级是可以改变的,称为动态优先级。在嵌入式开发中存在一个流行的任务优先级分配算法-单调执行频率调度法(RateMonotonicScheduling,RMS)--基于任务执行的次数(执行频率)来分配的,执行频率越高,任务的优先级越高。CPU利用率:CPU利用率达到100%并不好,作为系统设计的一条原则:CPU利用率应小于60%-70%。(2)死锁是指两个任务无限期地相互等待对方控制着的资源。所以系统中应尽量避免发生死锁现象。如图5-11所示。一般而言,可以先让所有的任务得到全部所需要的资源再做下一步工作以避免死锁:•各任务用同样的顺序申请多个资源;•释放资源时使用相反的顺序。死锁一般发生在大型多任务系统中,在小型的嵌入式系统中不易出现。(3)时钟节拍操作系统跳动的心脏,当任务等待事件发生时,它可以提供系统等待超时的依据。时钟节拍越快,系统的额外开销越大。(4)中断是一种运行机制可分为硬件中断和软件中断。大多数微处理器都提供关中断和开中断的方法,在实时内核中对中断处理用以下三个时间指标来评价:中断延迟时间、中断响应时间、中断恢复时间中断延迟时间:在实时内核中,经常要遇到关中断和开中断的情况,关中断时间越长,中断延迟就越长。中断延迟时间=关中断的最长时间+中断服务例程开始执行时间中断响应时间从中断发生到开始执行用户的中断服务程序的时间。中断响应时间包括开始处理这个中断前的全部开销。对于可剥夺型内核,则可剥夺型内核由下面的表达式给出:中断响应时间=中断延迟时间+保存CPU内部寄存器的时间+内核的进入中断服务函数的执行时间中断响应时间是系统在最坏情况下的响应中断的时间。中断恢复时间对于可剥夺型内核,中断恢复时间(InterruptRecoveryTime)定义为:微处理器返回到被中断了的程序代码或更高优先级任务代码所需要的时间。下面是可剥夺型内核的中断恢复时间公式:中断恢复时间=判定是否有优先级更高的任务进入就绪态的时间+恢复此优先级更高的CPU内部寄存器的时间+执行中断返回指令的时间虽然中断服务的处理时间应该尽量短,但是对处理时间并没有绝对的限制。另外,要考虑是否中断服务子程序中开中断,以允许优先级更高的中断进入并优先得到服务。动态实时调度算法实时系统的任务调度算法主要有以下三种•速率单调算法(RateMonotonicAlgorithm)该算法事先为每个任务分配一个与事件发生概率成正比的优先级,调度程序总是调度优先级最高的就绪任务,必要时将剥夺当前任务的CPU使用权,让高优先级的任务运行。•最早截止时间优先算法(EarliestDeadlineFirst)当检测到一个事件时,对应的处理进程任务就加入就绪进程表中,该表以截止时间排序,调度程序总是使最早截止时间的那个进程任务运行。5.4.3几种典型嵌入式实时操作系统(1)VxWorks(2)uc/OS-II(3)uclin