目录
一、概述
软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据和文档。程序是按照事先设计的功能和性能要求执行的指令序列。数据是程序能正常操纵信息的数据结构;文档是与程序开发维护和使用有关的各种图文资料;
软件产品的特点是一种逻辑实体,具有抽象性。软件没有明显的制造过程。使用过程中没有磨损老化;软件对硬件和环境有着不同程度的依赖性,导致了软件移植问题。软件开发大部分需要手写生产效率低。成本昂贵,涉及到诸多因素影响。
嵌入式软件规模小,但开发难度不一定小;快速启动,直接运行;实时性和可靠性要求高;应用程序和操作系统一体化;开发平台和运行平台不同。支持出错处理,容错机制。
二、分类
系统软件可以看做是一个平台,在平台上开发特定的应用程序,使用支撑软件来调试分析应用程序,如上位机测试工具,配置管理工具,仿真工具,调试工具,编译工具。
从运行平台划分,嵌入式软件可以分为
- 运行在开发平台上的软件:设计、开发、测试工具等
- 运行在嵌入式系统上的软件:嵌入式操作系统、应用程序、驱动程序及部分开发工具
三、嵌入式软件的体系结构
嵌入式软件架构通用的可以分为四层:硬件驱动层(抽象层)、操作系统层、中间件层、应用层。一般硬件驱动层在第三方给的SDK中会有一些demo供我们参考,但是不符合客户应用需求的还需要进一步修改。操作系统层包括操作系统内核,文件系统、GUI等。应用层是顶层的面对特定应用功能的软件。
中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统(拆分+连接)中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。
中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
3.1 驱动层
驱动层是直接与硬件打交道的一层,对操作系统和应用提供所需的驱动支持。
板级初始化程序:这些程序在嵌入式系统上电后初始化系统的硬件环境,包括嵌入式微处理器、存储器、中断控制器、DMA、定时器等的初始化。
与系统软件相关的驱动:这类驱动是操作系统和中间件等系统软件所需的驱动程序,它们的开发通常是有一定的要求。目前操作系统内核所需的硬件支持一般都集成在嵌入式微处理器中,因此操作系统厂商提供的内核驱动一般不用修改。
与应用软件相关的驱动:这类驱动不一定需要与操作系统连接,不需要操作系统管理,这些驱动的设计和开发由应用决定。
3.2 OS ML APPL
OS操作系统层:包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理部分。其中嵌入式内核是基础和必备的部分,其他部分要根据嵌入式系统的需求确定。
ML中间件层(应用平台):目前一些复杂的嵌入式系统中也开始采用中间件技术,也叫应用系统管理体系,主要包括嵌入式CORBA、嵌入式Java和面向应用领域的中间软件。
APPL应用层:主要由多个相对独立的应用任务组成。每个应用任务完成特定工作,如I/O任务、计算任务、通信任务等,由操作系统调度各个任务的运行。
四、嵌入式软件运行流程
4.1 复位及板级初始化
嵌入式系统上电复位后完成板级初始化工作。板级初始化程序具有完全的硬件特性,一般采用汇编语言实现。不同的嵌入式系统板级初始化时要完成的工作具有一定的特殊性,一般必须完成的有
- CPU中堆栈指针寄存器的初始化
- BSS段(Block Storage Space 表示未被初始化的数据)的初始化
- CPU芯片级的初始化:中断控制器、内存等的初始化
4.2 系统引导/升级
根据需要分别进入系统软件引导阶段或系统升级阶段(可通过测试通信端口数据或者判断特定开关的方式做判断)。
系统引导有几种情况:
- 将系统软件从Nor Flash中读取出来加载到RAM中运行:这种方式可以解决成本及Flash速度比RAM慢的问题。软件可压缩存储。
- 不需要将软件引导到RAM中而是让其直接在NorFlash上运行(XIP),RAM中只存放需要不断变化的数据部分
- 将软件从外存(如NandFlash、CF卡、MMC等)中读取出来加载到RAM中运行。这种方式的成本更低。
系统升级阶段:
进入系统升级阶段后,系统可以通过网络进行远程升级或者通过串口、USB接口等进行本地升级;远程升级一般支持TFTP、FTP、HTTP等方式;本地升级可以通过Console口使用超级终端或者特定的升级软件进行。
4.3 系统初始化
在该阶段进行操作系统等系统软件各功能部分必须的初始化工作,如根据系统配置初始化数据空间、初始化系统所需的接口和外设等。
系统初始化阶段需要按照特定的顺序进行,首先完成内核的初始化,然后完成网络、文件系统等的初始化,最后完成中间件等的初始化工作。
4.4 应用初始化及多任务
应用初始化阶段:该阶段进行应用任务的创建,信号量、消息队列的创建和与应用相关的其它初始化工作。
多任务应用阶段: 各种初始化工作完成后,系统进入多任务状态,操作系统按照已确定的算法进行任务的调度,各应用任务分别完成特定的功能。
总体运行流程如下: