2.1 嵌入式软件开发介绍
嵌入式软件包括嵌入式操作系统及用户的应用程序,是嵌入式系统一个重要的部分。
随着对嵌入式系统应用需求的无限增大,其软件系统开发的工作量剧增,而且由于嵌入式系统的使用周期长,潜在地使软件的复杂度非常之高。
因其小型化,对功能、可靠性、成本及功耗的更严格要求及对嵌入式系统智能化趋势的追求,变得非常重要。如何使软件开发跟上硬件的发展,适应嵌入式系统的要求,是一个很重要的研究。
2.1.1 嵌入式软件开发的特殊性
嵌入式软件开发的特殊性主要有以下5点。
(1)规模小,开发难度大
嵌入式软件的规模一般比较小,多数在几MB以内,但开发的难度却很大,在桌面机上开发,在目标机上运行。例如,嵌入到手机中,就要在手机上运行,这需要开发的软件可能包括板级初始化程序、驱动程序、应用程序和测试程序等,一般都要涉及底层软件的开发,这需要在开发过程中灵活运用不同的开发手段和工具。
(2)快速启动,直接运行
上电后在几十秒内就要进入正常工作状态。因此,多数嵌入式软件事先已被固化在NorFlash等快速启动的主存中,上电后直接启动运行;或从NorFlash调入内存后直接运行;或被存储在电子盘中,上电后快速调入到RAM中运行。
(3)实时性和可靠性要求高
嵌入式实时软件需要对外部事件做出反应的时间短,不管当时系统内部状态如何;需要有处理异步并发事件的能力;需要有出错处理和自动复位功能,采用特殊的容错、出错处理措施,在运行出错或死机时能自动恢复先前的运行状态。
(4)程序一体化
嵌入式软件是应用程序和操作系统两种软件紧密结合在一起的一体化程序。
(5)两个平台是指开发平台和运行平台
嵌入式软件的这两个平台是不相同的,在宿主机上开发,而在目标机上运行。
2.1.2 嵌入式软件的分类
嵌入式软件可以分为系统软件、应用软件和支撑软件三大类。
(1)系统软件
系统软件主要控制和管理嵌入式系统资源,为嵌入式应用提供支持的各种软件,如嵌入式中间件、嵌入式操作系统和设备驱动程序等。
(2)应用软件
应用软件是嵌入式系统中的上层软件,它定义了嵌入式设备的主要功能和用途,并负责和用户进行交互。应用软件是嵌入式系统功能的体现,如手机软件、电子地图软件和飞行控制软件等,一般面向特定的应用领域。
(3)支撑软件
支撑软件是指辅助软件开发的工具软件,如在线仿真工具、交叉编译器系统、分析设计工具和配置管理工具等。
在嵌入式系统中,系统软件和应用软件运行在嵌入式设备上。
2.1.3 嵌入式软件的开发流程
嵌入式软件的开发流程与通用软件的开发流程大同小异,但开发所使用的设计方法具有嵌入式开发的特点。整个开发流程可分为5部分:
■ 需求分析及规格说明。
■ 选择开发方案。
■ 设计与调试。
■ 设计阶段。
■ 测试与集成。
软件开发流程如图2-1所示。
图2-1 嵌入式软件的开发流程
(1)需求分析及规格说明
嵌入式系统应用需求中最为突出的是注重应用的时效性,需求分析的主要任务如下:
1)对问题的识别和分析
对用户提出的问题进行抽象识别用于产生以下的需求:功能需求、性能需求、环境需求、可靠性需求、安全需求、用户界面需求、资源使用需求、软件成本与开发进度需求。
2)需求评审
需求评审作为系统进入下一阶段前最后的需求分析复查手段,在需求分析的最后阶段对各项需求进行评估,以保证软件需求的质量。需求评审的内容包括正确性、无歧义性、安全性、可验证性、一致性、可理解性、可修改性、可追踪性等多个方面。
规格说明主要通过制订规格说明文档实现。通过对问题的识别,产生了系统各方面的需求。通过对规格的说明,文档得以清晰、准确地描述。这些说明文档包括需求规格说明书和初级的用户手册等。
(2)选择开发方案
选择开发方案主要包括选择主要芯片、选择开发环境、确定编程语言、测试工具与其他辅助设备及对于RTOS的使用。
(3)设计与调试
嵌入式系统的设计与调试如图2-2所示。
图2-2 嵌入式系统的设计与调试
系统的设计阶段包括系统设计、任务设计和任务的详细设计。由于嵌入式系统中任务的并发性,嵌入式软件开发中引入了DARTS的设计方法。
DARTS设计方法的设计步骤如下:
1)数据流分析。
2)划分任务。调试主要采用交叉调试。交叉调试又称远程调试,并具有以下特点:
■ 调试器和被调试的程序运行在不同的机器上。调试器运行在PC或工作站上,而被调试程序运行在各式的专用目标机上。
■ 调试器通过某种通信方式与目标机建立联系,如串口、并口、网络、JTAG或者专用的通信方式。
■ 在目标机上一般具有某种调试代理,这种代理能与调试器一起配合完成对目标机上运行程序的调试。这种代理可以是某种能支持调试的硬件,也可以是某种软件。
■ 目标机可以是一种仿真机。通过在宿主机上运行目标机的仿真软件,仿真一台目标机,使整个调试工作只在一台计算机上进行。
3)测试与固化。嵌入式系统开发的测试与通用软件的测试相似,分为单元测试和系统集成测试。
嵌入式系统的应用软件是针对特定的实际专业领域的,基于相应的嵌入式硬件平台,并能完成用户预期任务的计算机软件。
嵌入式软件的特点如下:
■ 系统软件的高实时性是基本要求。
■ 软件代码要求高质量、高可靠性。
■ 软件要求固态化存储。
■ 多任务实时操作系统成为嵌入式应用软件的必须。
2.1.4 嵌入式软件开发工具的发展趋势
随着嵌入式系统的发展,嵌入式软件开发环境越来越重要。它直接影响嵌入式软件的开发效率和质量,这对现有的技术和产品提出了更苛刻的要求,特别是嵌入式系统开发商要明确其发展趋势,以开发具有更高的满意度和市场竞争力的产品。
1)为了向着开放的、集成化的方向发展及缩短开发时间和控制开发成本,开发环境需要最大限度地承担重复性的工作。因此,需集成各种类型和功能强大的工具,构成统一的集成开发环境,并且要以客户服务器的系统结构为基础。具有运行系统的无关性、连接的无关性、开放的软件接口和环境的一致性等特点。
2)具有系统设计、可视化建模、仿真和验证功能,开发人员可通过功能强大的、可视化的软件开发工具对所开发的项目进行描述。建立整套系统的模型,并进行系统功能的模拟仿真和性能的分析验证,在设计阶段就能规避项目开发的很多风险,保证进度和质量。
3)开发工具可根据系统模型提供完善的、标准化的软件说明文档,有效节省了开发工作量。提高了软件质量及软件团队的工程化能力和管理水平。
4)具有更高的灵活性。嵌入式应用需求的个性化、多样化提升了嵌入式软件开发平台的灵活性。开发平台是否具有很强的灵活性以适应产品的不断复杂化,将直接影响到客户的满意程度和产品的市场竞争力。