基于嵌入式操作系统的控制系统平台设计
3.2.1数据结构设计
实时数据库与其他一般数据库一样,包含一组对象及其结构,由于目前对实时数据库还没有提出统一的数据模型,所以不同厂家开发的数据库的数据结构都有很大差别。本系统的实时数据库,一个基本的数据对象为“数据”,一个数据包含若干信息,如数据名称、数据类型、数据位置、数据长度等。
考虑到数据的存取效率,程序运行一开始,我们将在内存区开辟一段缓冲区,缓冲区中只存放数据,如果缓冲区大小不够,即缓冲区的数据较多,可以自动扩展缓冲区大小。实时数据存放在缓冲区时,我们采取这种思想:如果不是bit型数据,由于数据长度都是字节的整数倍,存入缓冲区中以字节来进行存储,该数据的长度length是以字节来计算。如果是bit型数据,存入缓冲区中,该数据的长度length是以位来计算,接着再存储一个实时数据,若为非bit型数据,则从下一个字节开始存放,即原来的bit型数据占用一个字节,若为bit型数据,根据此数据的长度来判断其存放位置,这里又分两种情况,如果这两个bit型数据的长度没有超过8位,则紧接着前一个bit型数据后存储这个bit型数据,如果两个bit型数据的长度超过8位,则从下一个字节开始存放,即原来的bit型数据占用一个字节。
3.2.2数据存取设计
为了存取方便,我们将所有的实时数据组成一个链表,链表的节点类型为上述的rtdb_data_t结构。当向实时缓冲区中加入一条数据时,就自动会计算出数据存储位置、长度等信息,并在实时数据库链表中加上一个节点。这样,取实时数据就非常灵活和方便,如果知道实时数据的名称,则可以遍历链表得到数据,如果知道数据的存储位置和长度,则可以利用实时数据库提供的接口直接从缓冲区中获得数据,而不必遍历链表,因为遍历链表需要花费一些时间,这在实时性要求较高的本系统中不太适合,所以本系统常常采用后一种方法存取数据。实时数据库链表结构如图3所示。
图3实时数据库链表结构
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论