CODARTS建模方法在嵌入式软件开发中的应用
摘要:嵌入式系统的工作环境基础上都是并发和实时的。随着应用需求的增长,嵌入式系统软件不得不变得越来越复杂,越来越庞大。CODARTS方法融入了COBRA方法和DARTS方法的优点,提出了针对并发和实时系统软件的设计方法,为嵌入式软件开发工作提供了一条捷径。本文结合实时检测系统的具体应用,简要介绍CODARTS的实际开发过程。
关键词:嵌入式系统 CODARTS 并发性 实时性
随着半导体制造行业的迅速发展,微处理器的价格在实际性能大幅度提升的同时却在大幅度降低,使得基于嵌入式处理器和微型计算机系统的实时多任务系统成为解决诸多应用问题的一种高效率、低成本的有效方案。目前,囊括工业、消费电子、医疗、军事等许多方面的产品都是基于嵌入式系统的。随着应用需求的日益增长,嵌入式系统的功能越来越强大,系统体系结构越来越复杂,对系统软件的要求也很自然的“水涨船高”。由于多数嵌入式系统工作在并发性和实时性要求较高的场合,因此,并发和实时嵌入式系统软件设计面临着巨大的挑战。国内外许多专用人士结合嵌入式软件开发的实践经验,针对嵌入式系统软件开发的特点提出了许多有效的解决办法,本文所介绍的CODARTS建模方法就是其中的一种。
1 CODARTS方法概述
CODARTS(Concurrent Design Approach for Real-Time System)方法源自20世纪80年代初,是在解决工业机器人控制系统问题中产生的。其前身为DARTS(实时系统结构设计方法),后来为了解决分布式实时应用程序的需要,融入了采用状态转换图对系统行为特征建模等方法,逐步演化成为CODARTS建模方法。
CODARTS方法是一种通用的设计方法。它借鉴了COBRA(Concurrent Object Based Real-time Analysis)方法对系统进行分析建模的思想,强调将系统分解为多个子系统,并将子系统定义为一组由若干对象和功能支持的服务。在系统划分完成后,CODARTS使用DARTS方法将任务结构化作为工作重点,提供了任务结构化标准帮助确定并发任务、任务间接口,使用事件序列图对整个系统建模,并支持设计方案的性能分析和软件的增量式开发。javascript:window.open(this.src);" style="cursor:pointer;"/>
CODARTS方法建模的主要步骤如下:
①开发系统的环境模型和行为模型,使用COBRA方法对问题域进行分析和建模。COBRA方法为依据系统环境图开发环境模型提供了系统分解策略。采用COBRA方法将系统分解成为若干子系统,并且确定子系统中对象和功能以及它们在外事件序列场景 下进行交互的方式。
②应用任务结构化标准确定系统(或子系统)中的并发任务,主要内容包括并发任务的确定、任务间通信以及同步接口的确定。
③应用模块结构化标准确定系统中的信息隐藏模块。信息隐藏模块的思想为尽可能地减少或消除全局变量,把有可能发生的变化信息封装在一个模块内容。
④根据任务划分和信息隐藏模块划分构建软件构架。
⑤定义组建接口规范、以增量方式开发软件。
2 CODARTS应用
下面结合实例介绍如何在具体应用中使用CODARTS进行系统分析和建模。
(1)问题域简要描述
某厂自动化产品检测生产线要求具备的功能是,通过对该产品在各种工作状态中的电压、电流、压力、温度等参数的检测来判断该产品的生产合格情况。其中的智能检测模块为主要设计内容。该检测模块具有可配置的多通路检测;能够和上位PC通过RS485进行通信,根据PC的指令或者本地键盘输入的指令进行系统运行控制、配置参数设定、采样结果上传等;能够支持本地LCD界面显示;根据指令完成手动或者实时自动(按照系统设定时钟间隔)参数采样和结果显示;能够自动进行抗干扰软件处理。
(2)处理环境图
CODARTS方法使用COBRA方法开发系统环境模型。系统环境模型描述了系统运行时所处的外部客观环境,包括系统的输入和输出。其关键问题是确定与系统之间存在接口的外部实体——终端。终端通常代表数据源或数字接收者或两者的结合。判断终端的标准通常是观察外部实体是否直接与系统连接。根据问题域的描述,系统外部环境由上位PC、系统时钟、电源监控、各种工作参数传器、本地键盘、本地LCD和工作区解发开关组成。由图1可见,系统环境外部实体均为真实环境中的外部I/O设备。
(3)子系统环境图
通常所开发的系统都是复杂的,所以COBRA要求将系统分解成为子系统,各个子系统之间应该是相对独立的和松散耦合的。子系统内部要求具有较强的内聚性,并且要求合理定义子系统之间的接口,这样子系统可以独立进行设计。子系统划分原则:①子系统可以由一个或多个功能紧密联系的对象构成;②外部实体仅与一个子系统存在接口;③数据存储应该封装在一个子系统中;④一个控制对象应该构成一个子系统。按照上面的标准,结合系统环境图进行分解可以得到子系统环境图,如图2所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
系统分解为系统控制和检测两个子系统。这两个子系统之间的接口有两个,分别是启动检测事件和检测结果。
(4)建立系统行为模型
行为模型是指描述系统在外部环境输入的作用下的响应。通常,系统的响应是基于系统状态的,因此,要用状态/数据转换图作为描述系统行为的方法是十分直观和有效的。图2中“系统控制”子系统通过控制转化图进行行为建模,如图3所示。
从图3中可以看到,“系统控制”子系统的状态转化均是基于外部环境事件和系统内部事件触发而产生的。因此在开发了控制状态转换图之后,设计人员需要考虑来自外部环境的输入,即开发场景。每个场景都是由若干外部事件的序列组成的。采用不同场景作为输入,可以很好地验证系统控制状态转换的正确性。
(5)划分对象、确定相应功能
对象和功能是系统中最小的具有并发性的组成成分。将子系统进一步细化成对象和功能,先要确定问题域中的对象,然后确定与这些对象进行交互的功能。COBRA建模标准规定了以下几个标准的对象:外中设备I/O对象、用户角色对象、控制对象、数据抽象对象和算法对象。按照这个划分标准,实时检测系统具有电源监控I/O对象、时钟对象、4个参数检测I/O对象、LCD显示I/O对象和上位PC对象;同时具有本地键盘角色对象、系统控制对象、检测控制对象、抗干扰滤波算法对象。数据抽象对象则有检测通道配置参数对象和参数检测结构对象。
(6)任务结构化
嵌入式系统多为并发系统,因此将系统划分为多个任务可以使系统结构更加清晰,提高系统的执行效率,提高任务调度灵活性。CODARTS方法的任务结构化标准可以分为4个主要的类:I/O任务结构化标准、内部任务结构化标准、任务内聚标准和任务优先级标准。
I/O任务结构化标准将任务分成:异步I/O设备任务(I/O设备多采用中断通知系统)、定期I/O任务(基于系统时钟)、资源监视任务。由前述分析可以确定:在系统中,手动参数检测任务、PC指令处理任务、数据上传任务和参数设置任务为异步I/O设备任务,自动参数检测任务和LCD显示任务为定期I/O任务。
内部任务结构化标准同样将内部任务划分成为定期任务、异步任务,并增加了控制任务、用户角色任务。其中系统抗干扰数字滤波任务属于定期任务,用户使用键盘进行本地输入控制属于用户角色任务,执行控制子系统控制状态转化任务则属于控制任务。
javascript:window.open(this.src);" style="cursor:pointer;"/>