基于嵌入式操作系统的控制系统平台设计
采取这种思想:如果不是bit型数据,由于数据长度都是字节的整数倍,存入缓冲区中以字节来进行存储,该数据的长度length是以字节来计算。如果是bit型数据,存入缓冲区中,该数据的长度length是以位来计算,接着再存储一个实时数据,若为非bit型数据,则从下一个字节开始存放,即原来的bit型数据占用一个字节,若为bit型数据,根据此数据的长度来判断其存放位置,这里又分两种情况,如果这两个bit型数据的长度没有超过8位,则紧接着前一个bit型数据后存储这个bit型数据,如果两个bit型数据的长度超过8位,则从下一个字节开始存放,即原来的bit型数据占用一个字节。
3.2.2数据存取设计
为了存取方便,我们将所有的实时数据组成一个链表,链表的节点类型为上述的rtdb_data_t结构。当向实时缓冲区中加入一条数据时,就自动会计算出数据存储位置、长度等信息,并在实时数据库链表中加上一个节点。这样,取实时数据就非常灵活和方便,如果知道实时数据的名称,则可以遍历链表得到数据,如果知道数据的存储位置和长度,则可以利用实时数据库提供的接口直接从缓冲区中获得数据,而不必遍历链表,因为遍历链表需要花费一些时间,这在实时性要求较高的本系统中不太适合,所以本系统常常采用后一种方法存取数据。实时数据库链表结构如图3所示。
图3实时数据库链表结构
3.3人机界面软件
人机界面模块是本系统重要的部分,它提供用户与底层控制的交互平台。
3.3.1人机界面数据库
人机界面数据是指与界面相关的数据,包括全局I/O数据和内存数据。I/O数据指的是需要系统和其它应用程序(包括I/O服务程序)交换数据的变量,与实时数据库中的全局I/O数据相似。内存变量是只在系统内需要的变量,比如计算过程的中间变量。为了存取方便,我们使用链表来组织人机界面数据,形成两个链表:I/O数据链和内存数据链。人机界面数据库也是依据XML配置文件hmidb.xml来填充的,XML配置文件来自于开发环境。
3.2.2界面图元
图元是构成画面的基本元素,包括基本图元,如线条、矩形、椭圆等,以及组合图元,如油罐、阀门等,它们是由基本图元组合而成。本系统提供了大量的图元,这些图元的绘制将调用特定系统下的平台函数,如Linux系统和Windows CE系统,即对于用户来说,不管使用哪个系统,这一层是相同的。
描述人机界面需要一个XML配置文件,如hmiwidget.xml,这个配置文件是用户在开发环境中设计界面时生成的。系统还支持图元的变化,即动态属性,以及事件响应。因此人机界面图元还有动态属性和事件属性,解析配置文件hmiwidget.xml时,会分析这些属性,并将其链起来。
在系统初始化时,MiniGUI分为两种情况:服务器(Server)和客户端(Client)。这主要取决于全局变量mgServer的值,如果为TRUE,表示为服务端,如果为FALSE,表示为客户端。我们将MiniGUI应用程序名改为mginit,则该应用程序为服务端,如果MiniGUI应用程序名作为客户端运行,则必须先运行MiniGUI提供的服务端程序mginit。
图4 MiniGUI应用程序流程
本文作者创新点:
本文讨论的嵌入式控制系统软件平台是一个复杂、庞大的系统,而且每个组成部分其内部结构和实现也非常复杂。我在此课题中做了很多研究,提出了系统设计的框架,如今已经实现部分为: 嵌入式Linux实时操作系统、实时数据库管理与通信、图形库与运行环境等,取得了优秀的成果。
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE下驱动程序开发基础(二)(11-09)
- VXWORKS内核分析(11-11)
- REDIce-Linux--灵活的实时Linux内核(11-12)
- Linux2.4内核为我们带来了什么?(11-12)