1第6章嵌入式软件系统2嵌入式系统原理--嵌入式软件系统教学目的掌握嵌入式软件层次结构和嵌入式软件组成;掌握硬件抽象层相关知识;掌握嵌入式软件设计方法;了解软件移植技术;了解嵌入式软件发展趋势;3嵌入式系统原理--嵌入式软件系统主要内容6.1嵌入式软件体系结构6.2硬件抽象层6.3嵌入式软件设计方法概述6.4软件移植概述6.5嵌入式软件发展趋势4嵌入式系统原理--嵌入式软件系统6.1嵌入式软件体系结构通用软件无须考虑程序如何运行和操作系统嵌入式系统的软件必须考虑嵌入式操作系统、操作系统与应用软件的集成和软件的结构硬件因素操作系统因素引导程序因素5嵌入式系统原理--嵌入式软件系统6.1.1嵌入式软件层次结构按照层次体系结构进行划分,嵌入式系统的软件通常包括:(1)初始化引导代码;(2)硬件抽象(板级支持包);(3)嵌入式操作系统;(4)网络协议栈;(5)图形用户界面;(6)应用软件。6嵌入式系统原理--嵌入式软件系统用户应用程序高层用户应用程序低层GUI协议设备驱动文件系统嵌入式操作系统硬件抽象层图6-1嵌入式软件层次结构模型7嵌入式系统原理--嵌入式软件系统6.1.2嵌入式软件组成初始化引导代码硬件抽象嵌入式操作系统网络协议栈应用软件图形用户接口GUI8嵌入式系统原理--嵌入式软件系统1、初始化引导代码初始化引导代码(就相当于通用计算机的BIOS一样)是任何嵌入式系统上电复位后第一个执行的代码系统复位后,首先进入复位向量——一般为0地址处系统复位时,执行复位向量处的第一条指令,系统的其他代码必须在复位后执行9嵌入式系统原理--嵌入式软件系统2、硬件抽象通常把操作系统的共性部分利用标准的C语言实现,把依赖于硬件的部分(使用的存储器的种类和参数,外部设备的配置,地址分配等)提供给用户进行编写代码,操作系统规定了一个标准的规范用户编写的这些代码为用户的定制硬件和操作系统之间提供一个接口和支持平台,这一部分代码称为硬件抽象(也称板级支持包)10嵌入式系统原理--嵌入式软件系统硬件抽象进行初始化硬件系统,如硬件配置寄存器、存储器配置、操作系统需要的I/O参数配置,如提供分时调度功能的操作系统需要一个硬件定时器,然后进入操作系统代码区11嵌入式系统原理--嵌入式软件系统3、嵌入式操作系统操作系统处于硬件抽象和应用软件之间,应用软件的开发调用操作系统的功能,操作系统的功能以应用程序接口(ApplicationProgramInterface,APl)的形式提供嵌入式操作系统通常是可裁减结构,基于嵌入式操作系统的开发通常有两种模式:基于嵌入式操作系统的内核基于完整的嵌入式操作系统12嵌入式系统原理--嵌入式软件系统4、网络协议栈嵌入式协议栈的提供有两种方式:独立的第三方协议栈产品(如LWIP、μCTCP/IP)嵌入式操作系统的提供商提供协议栈产品协议栈的运行必须基于嵌入式操作系统的平台支持,但是并不意味着协议栈必须依赖于嵌入式操作系统的API——具有一定的独立性13嵌入式系统原理--嵌入式软件系统5、应用软件不同的嵌入式系统的应用软件具有不同特色和功能不存在通用的嵌入式应用软件14嵌入式系统原理--嵌入式软件系统6、图形用户接口GUI图形用户接口是必要的GUI运行在嵌入式操作系统之上,用户开发与用户交互的应用软件通过GUI的功能调用来实现GUI模块实例——MiniGUI15嵌入式系统原理--嵌入式软件系统6.2硬件抽象层硬件抽象层介于硬件和软件之间,为软件提供硬件特性,为硬件进行驱动硬件抽象层——板级支持包(BSP)BSP主要完成系统的初始化并进入嵌入式操作系统的运行16嵌入式系统原理--嵌入式软件系统6.2.1嵌入式操作系统运行的必要条件设计嵌入式操作系统时,需要保证大部分代码与硬件的无关性;操作系统只对硬件的某一部分参数进行规定嵌入式操作系统运行的条件如下:ROM空间——Flash:在运行阶段是必须的,需要在调试阶段进行配置,用于存放程序RAM空间:运行期间存放中间变量,堆栈也建立在RAM空间中,用于运行程序17嵌入式系统原理--嵌入式软件系统定时器嵌入式实时多任务操作系统的调度采用基于优先级的调度算法,不同任务的优先级不同相同的优先级通常采用时间片的方法需要嵌入式处理器提供一个定时器用于产生时间片中断——嵌入式系统中有两种方法由用户编写中断服务例程,中断服务程序通过操作系统提供的API与任务进行通信和同步把中断和任务进行了关联堆栈18嵌入式系统原理--嵌入式软件系统6.2.2硬件抽象层的运行流程嵌入式系统的软件运行通常从引导程序入口开始,然后经过下面的一系列过程:(1)复位向量入口,此时中断是禁止的;(2)设置处理器的工作模式,通常使用复位时的默认模式;(3)设置RAM和ROM的工作参数,包括DRAM的刷新参数、地址空间分配等,至此嵌入式系统的处理器和存储器子系统达到运行状态;(4)设置操作系统运行所需要的数据段、堆栈空间等;(5)设置中断向量,中断向量的设置根据需要进行,也可以在其他的时间设置,但是一定要在中断允许之前完成;(6)操作系统的初始化;(7)进入用户的应用。到这里开始执行用户的应用程序代码。19嵌入式系统原理--嵌入式软件系统6.2.3硬件抽象层体系结构硬件抽象层通常是根据硬件设备,寻找其驱动然后进行移植工作如果没有驱动程序,需重写驱动程序新的硬件抽象层开发模型基于现有模型基础之上定义相应驱动程序开发接口硬件抽象层的移植被集中在这些接口的实现和适配上提高移植性20嵌入式系统原理--嵌入式软件系统1、模型嵌入式系统软件中的3大基本模块:操作系统用户程序硬件抽象层两大框架模型:直接模型间接模型21嵌入式系统原理--嵌入式软件系统直接模型硬件抽象层和用户程序、操作系统以及硬件设备直接交互只用于驱动的早期开发并不适合用于构建可移植的驱动应用程序硬件抽象层硬件层EmbeddedOSa.直接模型22嵌入式系统原理--嵌入式软件系统间接模型用户程序不再直接与驱动程序交互,而是通过操作系统提供的接口来访问驱动程序该模型将用户、驱动和操作系统3者之间的接口标准化具有良好的移植性应用程序硬件抽象层硬件层EmbeddedOS23嵌入式系统原理--嵌入式软件系统2、硬件抽象层体系结构只要能够实现硬件抽象层体系结构的接口,硬件抽象层的移植将变得非常简单体系结构综合了两种模型涵盖了可移植驱动的开发和具体的移植工作24嵌入式系统原理--嵌入式软件系统图6-3可移植的硬件抽象层体系结构虚框模块为接口,即可移植驱动编写中用于移植而定义的接口函数等25嵌入式系统原理--嵌入式软件系统6.3嵌入式软件系统的设计方法概述简单嵌入式系统的设计复杂的嵌入式系统设计26嵌入式系统原理--嵌入式软件系统6.3.1简单嵌入式系统的设计前后台系统中断(事件)驱动系统巡回服务系统基于定时器的巡回服务方式27嵌入式系统原理--嵌入式软件系统1、前后台系统后台:应用程序是一个无限循环,巡回地执行多个事件,完成相应的操作,通常在主程序main()中被调用——任务级前台:中断服务程序处理异步事件——中断级强实时性的关键操作一定要用中断来实现瓶颈——数据从前台传到后台的时间在最坏情况下,任务的响应时间取决于整个循环的执行时间适用于低端的基于嵌入式微控制器的嵌入式产品28嵌入式系统原理--嵌入式软件系统Action_1()Action_2()…………Action_n()Isr_1()Isr_2()Isr_3()时间后台程序执行代码中断服务子程序图6-4嵌入式软件的前/后台系统29嵌入式系统原理--嵌入式软件系统程序框架main(){/*硬件初始化*/while(1)/*后台程序*/{action_l();action_2();…action_n();}}action_1(){/*执行动作1*/…}action_2(){/*执行动作2*/…}…30嵌入式系统原理--嵌入式软件系统action_n(){/*执行动作n*/…}Isr_1(){/*中断1的中断服务程序*/…}Isr_2(){/*中断2的中断服务程序*/…}Isr_3(){/*中断3的中断服务程序*/…}31嵌入式系统原理--嵌入式软件系统2、中断(事件)驱动系统出发点:对功耗有严格的要求对于省电系统的设计中断驱动的程序设计方式中,整个软件系统完全由中断服务程序实现,或者完全由事件进行驱动出现事件,处理器进入运行,一旦处理时间结束,立刻进入低功耗状态32嵌入式系统原理--嵌入式软件系统中断(事件)驱动系统包括主程序和中断服务程序两部分主程序只完成系统的初始化初始化完成后,执行低功耗指令进入低功耗方式外部事件发生,相应的中断服务程序激活,执行相关的处理处理完成后,进入低功耗状态如果没有外部事件的发生,系统一直处于低功耗状态33嵌入式系统原理--嵌入式软件系统程序框架main()/*完成系统的硬件初始化和数据结构的初始化(如果必要的话)*/{/*todo:系统的初始化*/while(1)enter_low_power();}Isr_1()/*其中的一个中断服务程序*/{/*todo:处理中断事件*/}34嵌入式系统原理--嵌入式软件系统3、巡回服务系统系统中的中断源不多,可选的解决方案:使用中断控制器之类的扩展中断源的芯片,进行中断扩展——系统复杂、成本高、浪费资源采用软件的方法,设计巡回服务系统巡回服务系统——把对外部事件的处理由主循环完成35嵌入式系统原理--嵌入式软件系统软件接口框架main(){/*todo:系统初始化*/while(1){action_1();/*巡回检测事件l并处理事件*/action_2();/*巡回检测事件2并处理事件*/…action_n();/*巡回检测事件n并处理事件*/}}36嵌入式系统原理--嵌入式软件系统4、基于定时器的巡回服务方式适应范围:如果系统的外部事件发生的不是很频繁,则可以降低处理器服务事件的频率,这样不会降低响应时间,节省了处理器的资源消耗采用基于定时器驱动的巡回服务方法根据外部事件发生的频度,来设置合适的定时器中断的频率在定时器的中断服务程序中检测外部事件是否发生,如果发生就进行处理37嵌入式系统原理--嵌入式软件系统程序框架Main(){/*todo:系统初始化*/…/*todo:设置定时器*/while(1){enter_low_power();}}Isr_timer()/*定时器的中断服务程序*/{action_1();/*执行事件l的处理*/action_2();/*执行事件2的处理*/…action_3();/*执行事件n的处理*/}38嵌入式系统原理--嵌入式软件系统6.3.2复杂的嵌入式系统设计依据所使用的操作系统的不同,可分为:分时系统实时系统抢占式实时系统非抢占式实时系统39嵌入式系统原理--嵌入式软件系统1、分时系统分时系统组成:分时操作系统:使用定时器来调度任务的执行多个任务组成的应用软件从宏观上看,系统中的多个任务并行执行;从微观上看,由于系统只有一个处理器,任务是串行执行的操作系统根据定时器的运行,把时间片均匀地分配给每个任务(10sm)每一个任务的代码不需要显式地占用处理器和放弃处理器40嵌入式系统原理--嵌入式软件系统任务1任务1任务1任务1任务调度器定时器图6-5基于分时操作系统的嵌入式软件结构41嵌入式系统原理--嵌入式软件系统2、实时系统嵌入式系统中处理的事务大多都是具有优先级的实时系统把系统处理的事件根据轻重缓急进行分类,并赋予不同的优先级优先级高的任务优先得到处理器的处理,只有优先级高的任务处理完了以后,才轮到优先级低的任务进行处理42嵌入式系统原理--嵌入式软件系统任务1任务2…………任务n任务调度器任务调度器高任务优先级低图6-6基于RTOS的嵌入式软