Vxworks下的通用数据对象存储技术
摘 要
在桌面操作系统软件开发领域,高级语言的模板和泛型编程为连续的数据对象存储提供了类型安全、操作方便的框架支持。而在嵌入式操作系统领域,由于受到硬件资源的制约,所能依赖的软件开发框架极为有限。本文利用VxWorks原生API,设计了一个支持通用连续数据对象存储的微型框架,负责数据的内存管理和磁盘读写,其体积小、效率高,以最小的资源代价为开发人员换来类似于模板和泛型的编程体验。
【关键词】Vxworks 通用 数据对象 存储
近年来,随着嵌入式系统的飞速发展,嵌入式操作系统在网络通信、工业控制、通信、国防、航空航天等各个领域得到了广泛的应用,并越来越引起人们的重视。美国Wind River公司的VxWorks 操作系统,因具有抢占式调度、中断延迟小、系统内核可剪裁等特点,在嵌入式应用领域占据重要地位。因为嵌入式设备存储器的容量较小,而对系统性能和可靠性的要求比较高,但也是由于嵌入式设备存储器的限制导致嵌入式系统所能依赖的软件开发框架极为有限,故本文利用VxWorks原生API,设计了一个适用于嵌入式系统的支持通用连续数据对象存储的微型框架,负责数据的内存管理和磁盘读写,其体积小、效率高,以最小的资源代价为开发人员换来类似于模板和泛型的编程体验。
1 原理及研究现状
相比于线性表顺序结构,链表比较方便插入和删除操作。因此程序设计中存储大量同一类型数据结构时普遍采用链表的操作模式。
在Vxworks操作系统下,系统自带的链表API操作却需要在插入或者删除节点时由程序设计者对节点的内存区域按照节点类型自己进行维护。如此一来,对于不同类型的数据结构存储,我们就要相应的建立多个不同类型的链表,且插入删除都需根据节点长度自行进行相应的内存维护,程序设计就会变得繁琐,基于以上原因,本文专门针对于Vxworks下的链表操作设计了一个链表数据结构操作类,简单方便的对不同数据结构进行链表存取操作。
2 Vxworks下链表操作类
2.1 理论基础
vxworks中使用了多种基本数据结构,例如链表,队列,树等等,本文将着重介绍适用于不同数据结构体的链表操作在vxworks中的实现。
vxworks中链表的实现样式如图1所示。
List为一个指针,该指针链表结构体,包含两个域,分别指向链表头节点和尾节点。
head和tail指针分别指向链表的头节点和尾节点,节点结构体包含两个域,分别为前一个节点和后一个节点。
在创建链表时,链表还没有任何子节点,因此此时的头节点和尾节点指针均为NULL;但是链表结构体需要创建,因此需要为链表结构体分配内存,我们一般利用malloc函数为链表的节点进行内存分配,分配的长度就需要依据节点数据结构不同而定,欠缺灵活性。
因此本文设计了一个链表数据存取类,设计该类的初衷在于:抽象出所有链表到文件存取操作中的底层共性部分,以后任意节点类型的链表存储和读取可以不必关心其实现细节。
2.2 方法论述
2.2.1 设计要点
因链表中节点添加之初对节点的ID进行了维护,故不同节点的ID不同,所以删除时可通过ID的查找来查找到相应的节点进而进行删除。
删除时需进行相应内存的释放,对应于新建节点时的malloc开辟内存,此处判断链表中节点删除成功后会利用free(pNode)来释放新建节点时开辟的内存。
2.2.5 链表节点的其它操作
由于ID的独特性,对于链表节点的其他操作均可参考节点删除操作进行设计,方便且易于实现。
2.3 实验过程
2.4 实验结果
实验后查看文件lsmtest.dat,发现数据添加成功且正确无误,且经反复实验论证,该类对于链表节点的操作方便易行,免去了常规Vxworks系统下链表操作中反复自行维护链表节点内存的过程,且添加ID成员后链表节点删除、查找、更新操作简单易行,且效率较高。
3 结束语
本文针对Vxworks系统下链表数据结构操作的局限性设计了新的基于Vxworks中Lstlib的链表数据结构操作类,使得程序设计者在对不同类型的数据结构进行链表操作时都可调用此类,不需要自己维护内存,也就在一定程度上规避了一些程序设计时内存维护问题,具有较高的适用性。
参考文献
[1]李珊珊,宁洪,陈波,彭绍亮.通用数据仓库员数据模型的研究[J].计算机工程与科学,2004.
[2]顾胜元,杨丹,黄海伦.嵌入式实时动态内存管理机制[J].重庆大学软件工程学院,计算机工程,2009.
作者单位
北京明航科技发展有限公司 北京市 100096