转自http://tech.it168.com/a2009/0827/669/000000669614.shtml

引言

面向对象的软件设计方法推崇抽象、可重用且易维护的设计模式。其中,一个普遍采用的做法是使用预定义的框架构建复杂的软件系统。在面向对象领域中,框架是指为某一具体应用领域提供解决方案的类集。程序员使用继承、聚合等技术定制框架并将其用于具体的应用程序设计。基于框架的软件开发具有如下优点:

*由于重用了框架提供的代码,目标系统不必从头写起;

*规范的框架结构能够指导目标系统的设计;

*框架的设计是开放的,因此可以通过子类化等技术定制和扩展。

本文介绍Rhapsody的实时代码生成策略。Ilogix公司提供的Rhapsody是一个基于UML支持实时嵌入式系统全过程面向对象开发的CASE工具。Rhapsody基于一个内置的实时系统软件框架—OXF生成C/C++代码。

1 Rhapsody的软件框架

Rhapsody的OXF框架专为实时嵌入式系统而设计,它由一系列UML类组成。这些类相互协作,组成了一个结构严整、跨实时操作系统平台的实时嵌入式软件架构。

(1)活动类

活动对象(Active Object)在UML中被定义为“拥有一个线程并能够发起控制活动的对象”。Rhapsody给这个一般定义赋予了具体含义,如图1所示。

活动类(Active Classes)在框架中以OXFActive表示,它拥有一个执行线程和一个事件队列,并提供事件调度功能。用户活动类从OXFActive继承。

该活动类包装了实时系统中的事件调度器。Execute方法是一个无限循环。在循环中,事件被不断地从队列中提取出来,发往对应的目标对象。QueueEvent和schedTimeout方法向队列注入新的事件。

(2)响应类

响应类(Reactive Classes)是能够对事件做出反应的框架类,即事件消费者。它在Rhapsody的框架中以OXFReactive表示,用户响应类从OXFReactive继承,如图2所示。

图2 响应类及相关框架元素

每个响应类都和一个事件管理器关联(通过调用setEventManager方法),事件管理器由活动类充当。一个事件管理器可以服务于多个响应类。响应类的gen方法向其事件管理器注入一个新的事件(通过调用活动类的queueEvent方法)。事件管理器在收到事件之后会调用相应的响应对象(由事件的属性指出)的takeEvent方法。

用户响应类有主动(active)、被动(passive)和从属(subordinate)响应类之分:

*主动用户响应类利用了多重继承技术,它集事件管理器和响应类双得功能于一身;

*被动用户响应类由框架的缺省事件管理器—OXFDefaultEventManager管理,且所有被动用户响应类都共享该缺省事件管理器;

*从属用户响应类由用户定义的活动类充当事件管理器。从属响应类以聚合方式存在于用户活动类内,或者独立于活动类,而通过调用setEventManager方法与一个用户活动关联。

(3)事件和操作

类可以定义自己的事件和操作(Events and Operations)方法。事件代表一种突发的激励信号,可以影响对象的行为及状态。在Rhapsody中,活动类负责事件调度。事件既可以异步(活动类将事件投递给目标对象之后立即返回,目标对象使用自己的线程完成对事件的响应),也可以是同步的(活动类投递事件之后必须等待目标对象处理完成才能返回)。操作代表类本身提供的服务和功能。操作调用总是同步的,即操作总是运行在调用者线程之内。Rhapsody的框架定义了两种事件:

①信号事件。

信号事件(Signal Events)是最常用的事件,它代表对象之间传递的一种异步激励信号。在Rhapsody的框架中,它以OXFEvent表示,所有的用户事件类都从OXFEvent继承。

信号事件有自己的参数(以其属性表示),并且和一个响应对象关联。事件管理器依据事件的响应对象判断事件的接收者。

②定时事件

定时事件(Timeout Events)在Rhapsody中以OXFTimeOut表示。它在OXF框架中的位置如图3所示。

事件管理器(活动对象)的schedTimeout方法负责定时事件的构造和调度。其执行过程如图4所示。

 
图3 定时事件及相关框架元素

事件管理器创建一个OXFTimeout对象并将其交由一个定时管理器管理。定时管理器可以管理多个定时事件,它运行于自己的独立线程内且聚合了一个定时器对象。定时器对象每卫固定的时间片会向定时管理器发通知信号,这时定时管理器检查它管理的定时事件集合中是否有定时事件到时,并将到时的定时事件添加到事件管理器(活动对象)的事件队列中(通过调用queueEvent),之后事件管理器再将这些定时事件投递给对应的响应对象。定时事件本身是被动的,它不包含定时器。

(4)状态机

Rhapsody支持UML状态机(State Machines),包括层次状态分解、带参事件、定时事件、伪状态、完成转移、入口和出口动作等功能。Rhapsody也包含了UML中定义的异步事件处理模型:带有状态图的类都是响应类,因此都与一个事件管理器(活动类)关联。事件管理器使用一个队列缓冲收到的事件,然后将事件投递给响应对象。响应对象按照状态图处理收到的事件。

OXF框架使用OXFEvent Consumer、OXFState、OXFLeafState等实现UML状态机的语义。限于篇幅,本文对此不作介绍。

(5)并发控制

Rhapsody的OXF框架使用如下两个类实现对实时系统资源的并发控制(Concurrency Control)。

*OXFOSMutex:包装了实时操作系统的互斥量对象,支持lock()和free()操作。互斥量用于管理独占性资源。

*OXFOSSemaphore:包装了实时操作系统的信号量对象,支持wait()和signal()操作。信号量用于管理共享资源。

UML类的方法可以声明为guarded。这时类被称为protected。protected类用于对独占性资源进行建模,在任何时刻只可有一份guarded方法执行,OXF框架以OXFProtected定义UML protected类,它充当所有用户protected类的父类。

(6)模型的调试及分析

Rhapsody允许用户单步执行状态图和顺序图以验证系统的功能和逻辑。系统执行过程中,对象的方法调用和状态改变都可以在模型图上以动画的形式表现出来。

除了功能和逻辑上的正确性之外,实时系统还对系统的响应时间有严格的要求。对实时系统响应时间的测试称为调度性分析,主要使用两种方法。

①经验法:给系统注入实时测试数据,然后测量系统的相应性能。

②理论分析:为系统模块设定足够的时间信息,然后用数学方法计算系统的整体相应性能。此方法通常需借助专用的软件工具完成。

图4 定时事件的调度和投递

Rhapsody支持基于经验的调度性分析。用户需要为对象方法设定估计的执行时间,并编写一个驱动脚本或状态图以模拟系统的触发事件。驱动脚本和状态图启动之后,Rhapsody会按照设定的时间参数和程序逻辑运行模型并输出详细的执行过程报表。用户通过检查执行报表判断系统是否满足要求的响应性能。Rhapsody也允许用户在目标硬件系统运行驱动脚本或状态图,以获得最准确的执行时间报表。

结语

实时嵌入式系统应用的开发越来越复杂,因此有必要对嵌入式项目实施严格的软件工程管理。UML已成为复杂系统建模的工业标准,其状态机模型与实时嵌入式系统极好地对应,且便于借助CASE工具实现代码自动生成,能够极大地提高实时嵌入式软件的开发效率和项目可管理性。

Ilogix公司的Rhapsody工具便是一种支持实时UML标准的嵌入式系统软件工具,它基于内置的OXF框架实现从系统的分析、设计到代码自动生成的开发过程自动化。OXF框架是面向对象和跨RTOS平台的,它很好地将UML的概念移植到实时嵌入式系统中来,为嵌入式系统的开发提供了清晰的结构以及可复用的软件模块,能够切实提高实时嵌入式软件的开发效率和可维护性。

Rhapsody软件框架和UML的实时系统开发相关推荐

  1. 《多旋翼无人飞行器嵌入式飞控开发指南》里基于FreeRTOS的无人机软件框架

    <多旋翼无人飞行器嵌入式飞控开发指南>里基于FreeRTOS的无人机软件框架

  2. node.js 桌面软件框架 electron 开发流程

    ##node.js 桌面软件框架 electron 开发流程 ####步骤 1,安装electron npm --g electron 2,创建工程 //新建app文件夹 mkdir app //创建 ...

  3. 嵌入式底层开发的软件框架简述

    在底层代码编写中,初始的框架设计总会面临选择,针对实际的硬件使用环境,大家对于使用的软件框架有很多选择,今天我简单描述一些比较常用的架构,让大家能够理解并选择合适的架构.    1. 简单的顺序执行程 ...

  4. 高通开发系列 - Voice Call之语音通话软件框架介绍(翻译)

    By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! ...

  5. 【原创】2021-02嵌入式月刊:登陆火星的F prime飞行软件框架

    目录 1. 前言 2. F prime的情况简介 2.1 相关网址 2.2 到底是个啥玩意 2.3 代码简单分析 ​ Autocoders CFDP Ci Config Drv Fw Gds Os R ...

  6. 嵌入式系统的软件框架简述

    目录 总述 1.循环轮询系统 2.前后台系统 3.时间片轮循系统 4.操作系统RTOS 4.1单处理器多任务系统 4.2多处理器多任务系统 在底层代码编写中,初始的框架设计总会面临选择,针对实际的硬件 ...

  7. 软件框架设计的艺术----读书总结

    总结 软件开发的艺术 理想主义,经验主义和无绪 文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义. 理性主义认为理智是信息的首要来源.给出一个假设,只要通过思考就能理解和描述这个世界, ...

  8. DM8168 DVRRDK软件框架研究

    Netra(DM8168)处理器是个多核处理器,每个核之间相互独立却又相互关联,如何高效简洁地利用每个核完成一套系统功能是非常关键的,RDK这套软件平台就是针对这种多核平台设计的一套多通道视频应用方案 ...

  9. 认识软件框架的设计原则-- 变与不变分离,创造简美之序

    ee                                                                        ee 欢迎访问 ==>高老师的博客网页 高焕堂 ...

最新文章

  1. ubuntu卸载_ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
  2. css实现一个写信的格式
  3. 如何获取微信openId
  4. c语言知道坐标求线段长度,C语言编写程序:输入任意3线段的长度,判断组成三角形的种类...
  5. 计算当前时间到指定日期之间距离多久(494天11866小时711960分钟42717625秒)
  6. 《 图解 HTTP 》读书笔记
  7. phpcmsV9 会员升级 - 配置篇
  8. 苹果无人车野心越发明显,再挖一名特斯拉工程师,或负责汽车软件UI
  9. Windows Server 2008 Server Core模式
  10. python语言-Python的语言特点
  11. 内网服务器putty到天翼云,SSH隧道管理内部服务(putty,ssh secure shell)for win
  12. C语言小案例_OA大典故障案例摘录【第1390篇】夏普mxm2608n 黑白复印机漏粉
  13. Android 导航路径规划,Android系统导航地图标注路径规划
  14. Quartus II下载器件库
  15. 华为笔记本转轴坏了修复指南记录
  16. Excel的SUMPRODUCT函数及其用法
  17. ARM Linux双网卡设置转发
  18. 苏州事业单位计算机类专业知识,2021江苏苏州事业单位考试复习大纲
  19. java web物资管理系统,基于jsp的企业物资管理系统a-JavaEE实现企业物资管理系统a - java项目源码...
  20. liunx 安装adobe reader阅读器(转载)

热门文章

  1. 【JAVA8】新时间API操作大全
  2. java基础语法——条件判断与循环语句
  3. 下暴你的硬盘 超多游戏下载 不爆你找我!
  4. 在调用股票购买接口时要注意什么事项?
  5. 贯穿整个AUTOSAR架构的Interface
  6. 海昇智电商:多多进宝对于拼多多商家有什么用?
  7. Python入门--程序控制-选择结构
  8. Android 仿微博的点赞上报功能,持续点赞再取消
  9. xpath常用的元素定位方式
  10. RT-Thread_rt_kprintf()打印浮点数(解决方法1:rt_vsnprintf替换为vsnprinitf)