分析基于μC/OS-II的嵌入式构件系统设计
扫描二维码
随时随地手机看文章
μC/OS-II 是一个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,它适用于多种微处理器,微控制器和数字处理芯片。在所有实时操作系统中,μC/OS-II的源代码几乎是最整洁、编写最一致的。自1992年问世以来,μC/OS-II已经被应用到数以百计的产品中。本文尝试将构件化软件设计思想引入嵌入式软件设计中,提出了一种适用于嵌入式软件的基于构件的软件体系结构,并且在常用输入设备键盘的应用实践中,验证了此体系结构的可行性。
1 嵌入式构件技术
1.1 构 件
构件可以视为一个通过接口对外界提供服务或向外界请求服务的黑盒,多个构件可以组成一个更高层次的构件,构件比对象提供了更高的设计抽象。构件是二进制可替换的,这个特点使它们与“类”有着显著的不同。当创建了一个构件的修订版本时,它可以替代同一构件的原先版本,而不必重新编译其他构件。通常,只要一个构件满足相同的接口,就可替换另一个构件,而不必对其他构件做任何修改。因此,构件能够很好地解决更新、维护、分布和复用等诸多问题。
构件基本特征:可复用性、可封装性、组装性、可定制性、自治性、粗粒度、集成特征、接口连接机制。目前,构建模型大致可分为2类:在面向对象的程序设计中,构件即对象;在软件体系结构中,构件即结构单元。
1.2 嵌入式构件
1.2.1 嵌入式构件模型
嵌入式构件为实现一定嵌入式系统功能的一组封装的、规范的、可重用的、具有嵌入特性的软件单元,是组成嵌入式系统的功能单位。它是被标准化的、具有重用性、支持QoS的、能够提供实时应用的软件资源。
每个嵌入式构件由4部分构成:构件体、属性、接口、依赖关系。图1为基本构件的示意图。构件体实现构件的基本功能;属性描述了构件的基本信息;接口将构件与外界连接,为外界提供服务,每一种接口对应一个不同的服务;依赖关系标识构件间的所有关系,用于实现构件间的拼接。
1.2.2 嵌入式构件属性
属性是描述构件某个方面特征的元数据。属性定义了构件查找的方法,可以根据任意一条属性记录快速找到符合条件的构件。由于嵌入式构件的特殊性,可以将嵌入式软件构件的属性分为3种:描述属性、约束属性和服务质量(QoS)属性。
(1)描述属性
描述属性指的是一般构件都具有的公共属性。
(2)约束属性
约束属性描述构件所依赖的环境。约束属性分为2类:描述绝大多数构件都具有的公有约束属性和描述单独构件特殊需求的专有约束属性。公有约束属性包括CPU类型、操作系统、依赖的类库等。
(3)QoS属性
QoS属性是嵌入式软件构件最重要的要素。为了选取合适的构件来开发嵌入式系统,必须考虑构件的QoS属性,以*估它所提供的性能指标。常见的QoS属性包括平均执行时间、最差执行时间、最优执行时间、内存消耗、功耗、健壮性、可靠性和安全性等。
2 嵌入式软件构件设计
2.1 μC/OS—II嵌入式实时操作系统
μC/0S—II实时性强,可靠性高,对处理器以及ROM、RAM资源的要求不高;另外,它的代码大部分用ANSI C语言编写,只有少部分微处理器专用的代码用汇编语言编写,有利于程序的移植。
2.2 基于构件的嵌入式软件体系结构
一个构件系统的体系结构由一系列定义的构件框架和针对该框架设计的构件间的相互作用关系组成。体系结构是所要实现系统的整体规划,它为构件的组装提供基础框架和接口规范。
目前,嵌入式构件技术研究的核心之一是构件模型和软件体系结构(软件构架)这两个相互关联的问题。不同的构件只能在相应的软件构架中使用,因此基于构件的应用软件设计也可认为是基于体系结构(构架)的软件设计,也称之为基于“构件一构架”的应用软件设计。
根据上述的嵌入式基本构件模型,本文提出了一适用于嵌入式系统的软件体系结构。其中,定义“构件系统”为一特定应用,实现某一具体功能。另外,定义“构件子系统”。它类似于UML中的包概念,代表元素的逻辑分组,将具体的应用从实际问题中抽象出来,同时对各个关注区域进行相对分离,这样做可以独立地分析各个关注点,从而可以更好地分析系统的结构。一个构件子系统可以包含一个构件或者是多个构件的集合。
硬件抽象层实现硬件的驱动、I/O控制,可以用于同一种硬件平台的很多应用中。OS层主要用于与操作系统相关的操作,包括系统任务的创建、消息的创建等。通信层实现数据的传递、数据格式的转换。
用户接口层提供与底层应用相关的基本操作函数、对外接口函数,实现上下层之间的互操作。应用层位于顶层,用于实现用户的应用程序。用户无需关心底层的硬件结构,直接使用用户接口层提供的基本操作函数,即可编程实现自己需要的功能。
分层的结构设计保持了顶层与低层很好的一致性,实现了横向分离;同时,原型的引用使得各层间的连接更为紧密,纵向相连,从而得到集成度更高、更可靠的系统。
3 嵌入式构件系统的实现
3.1 键盘构件系统的实现
嵌入式构件从本质上来说,大部分的工作就是对输入/输出部分进行处理。其构件主要有键盘、前向通道的处理(如A/D处理)、后向通道的处理(如D/A处理)、USB控制、网络控制、液晶显示等。输入/输出软件的代码占据了整个操作系统的相当部分,对嵌入式操作系统来说,这部分的重要性是不言而喻的。其中,键盘更是嵌入式应用程序最常用的器件,因此本文以键盘为例,依据上述体系结构构建了键盘应用模型,配置实现了键盘功能。
图2为键盘构件系统分层体系结构。每层左边显示的“棒棒糖”形状表示层的接口,接口是一组可以从外部访问的类和对象。虚线箭头表示的是依赖关系,每层都依赖于其下一层的包,且构件与构件之间也存在着依赖关系。上层调用位于下层具体一些的层次中的服务,这种单向依赖使得可以在不同的上下文中使用相同的服务,而无需考虑服务的实现方式。
另外,图2中的宽箭头表明了数据的传递方向,数据在硬件抽象层取得后,逐级向上层传递,经过层层处理、转换,最终到达应用层,被用户程序所用。而此处,数据的传输过程其实也是一个原型的形成过程,即最终实现了一键盘响应处理任务。
3.2 构件生成集成环境的实现
基于构件系统体系结构,本文拟开发了一构件生成集成环境,如图3所示。该环境可以实现构件系统的自配置、自拼接、源代码自生成,结构清晰,使用简便。随后在该集成环境上,配置键盘构件系统,自动生成源代码,并在博创ARM300实验平台上实现了键盘响应,很好地验证了此体系结构的可行性及优越性。
本文扩展了通用软件构件的概念,提出了适用于嵌入式系统的构件模型;并在此基础上设计了嵌入式软件6层体系结构,采用了分层的结构设计,实现了横向分离,而“原型”的引用使得各层纵向相连。此体系结构不仅实现了软硬件分离,同时也实现了功能的分离,有利于实现稳定性好的嵌入式系统。最后,本文在键盘应用实例中验证了其可行性。随着嵌入式系统的硬件发展,以及基于构件的软件设计方法自身的不断完善,基于构件的软件设计方法必将是未来的发展方向。