作为嵌入式系统的灵魂,嵌入式软件是指嵌入式系统中用于控制和管理系统功能的软件集合。嵌入式软件通常有两种分类方式,如图1-4所示。
1.按照软件所在层次划分
按照软件在嵌入式系统中的层次来分,嵌入式软件分为系统软件、支撑软件和应用软件,具体说明如下:
·系统软件。系统软件是指嵌入式系统中用于控制、管理计算机系统资源的软件,主要指嵌入式操作系统,主流的嵌入式操作系统有Windows CE、Palm OS、Linux、VxWorks、pSOS、QNX、OS-9、LynxOS等。我国嵌入式操作系统的起步较晚,国内此类产品主要是基于自主版权的Linux操作系统,其中以中软Linux、红旗Linux、东方Linux等为代表。
·支撑软件。支撑软件是指用于辅助软件开发的软件工具集,具体包括嵌入式数据库、系统分析工具、系统仿真工具、交叉开发工具、软件测试工具等。目前主流的嵌入式移动数据库系统有Sybase、Oracle等。我国嵌入式移动数据库系统起步较晚,目前以东软集团研究开发的OpenBASE Mini为代表。
图1-4 嵌入式软件分类
·应用软件。应用软件是嵌入式系统中面向用户体验的应用程序,一般针对特定应用领域且基于某一固定的硬件平台,用来达到用户的预期目标。嵌入式应用软件不仅要求在准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。目前我国市场上已经出现了各式各样的嵌入式应用软件,包括各类移动终端软件、路由器软件、交换机软件、飞控软件、导航系统软件、列车控制系统软件、浏览器、Email软件、文字处理软件等。嵌入式系统中的应用软件是最活跃的力量,每种应用软件均有特定的应用背景,尽管规模较小,但专业性较强,所以嵌入式应用软件不像操作系统和支撑软件那样受制于国外产品的垄断,是我国嵌入式软件的优势领域。
2.按照软件结构划分
按照嵌入式软件结构来分,嵌入式软件可分为单线程程序和事件驱动程序。
·单线程程序。单线程程序是结构最为简单的嵌入式软件,不需要多任务调度及中断服务程序等,也没有主控程序,其又可进一步细分为循环轮询系统和有限状态机系统。单线程程序的优点是结构简单、执行效率高、程序维护方便;缺点是容错能力差,一旦出现软件故障,系统无法恢复和进行容错处理,导致软件安全性较差,一般适合对实时性和安全性要求不高的简单应用。
·事件驱动程序。事件驱动程序是比单线程程序复杂的嵌入式应用,可以解决软件安全容错问题。其一般可分为中断驱动系统和多任务系统,而多任务系统又可分为单机多任务系统和分布式系统。
·中断驱动系统考虑中断优先级以解决程序容错问题。当多个中断服务请求同时发生,且需要考虑各中断优先级或处理程序错误时,主控程序将按照既定策略对各中断请求进行实时处理,以满足系统设计需要。
·多任务系统往往基于嵌入式操作系统进行开发,它是指在多任务处理环境下,只有当其他程序认可时,一个运行程序才可获得处理器时间。每一个应用程序(任务)必须协同地放弃对处理器的控制,以便其他应用程序运行。目前主流的嵌入式操作系统都支持协同多任务处理和抢占式多任务处理。必要时,嵌入式操作系统可以中断当前正在运行的任务以便运行另一个任务。通过上述操作,可实现任务的切换、调度、通信、同步、互斥及复杂时钟管理等,从而大大提高嵌入式系统的容错能力和安全性,使得用户获得最优的使用体验,完成既定的任务或功能。
随着嵌入式系统面临的需求越来越复杂,对嵌入式软件的要求也越来越高。由于软件的应用场景和架构日趋复杂,当前越来越多的嵌入式系统采用分布式架构,通过分布式计算,解决多用户并发、并行处理、节点负载均衡、分布式容错等关键问题。