新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机系统的数据存储和管理

单片机系统的数据存储和管理

作者:时间:2013-03-15来源:网络收藏

  引言

  在自动化测试领域里,单片机测试系统凭借其成熟的应用体系,简单的系统结构以及优良的性价比得到了越来越广泛的应用。近年来,随着新的测试对象不断出现,以及测试手段的不断发展,测试系统的功能越来越完善,各种应用场合对测试系统的要求也日益提高。现在的大多数测试系统不仅要完成工业现场的实时测控任务,同时还要进一步实现对测试数据的实时处理和保存。以往在一般的单片机测试系统中,信息的存储量并不大,系统只须用较少的资源就能实现数据的存储。但是随着存储芯片技术的不断发展,适用于的存储芯片已经可以在掉电保护的情况下保存上百KB甚至几MB的数据;同样,目前的单片机测试系统也面临动辄处理并保存上千条乃至近万条测试数据的问题。这对一般的缺少操作系统支持的单片机测试系统来说,是一项相当复杂的工作,因而目前的测试系统往往只能针对具体数值对象进行处理,对大量采集数据采取简单的顺序存储方式。显然,这种方法缺少灵活性,不利于单片机测试系统处理大量测试数据,限制了测试系统在这方面的发展。

  本文主要针对处理测试数据量较大的一类测试系统,讨论测试数据的存储和问题。这类测试系统往往由抗干扰能力较强的单片机和大容量、掉电保护的存储芯片组成,同时配有高精度数字式传感器;造价便宜,性能稳定,适合工作在工业现场,保存和处理大量测试数据,有的甚至能够与上位机组成测控网络完成更为复杂的测试任务。本文将介绍一种应用于单片机测试系统的链式存储方式,能够在工业现场进行实时测控的同时,实现对大量测试数据的保存和,在实际应用中取得了良好的效果。

  大容量单片机测试系统中的存储结构

  在大多数自动测试系统中,测试数据的逻辑结构一般都会遵循线性逻辑关系,即数据元素在时间或者空间顺序上只分先后次序而不存在上下层次。因此在设计存储结构时往往采用顺序存储结构,其优点在于处理线性数据结构时速度快,而且结构简单。

  但是上述情况在前文所述的大容量测试系统中并不是普遍适用的。大容量测试系统虽然同样是线性逻辑结构,但其测试数据变化多样,构成数据元素的内部结构也非常复杂,而且系统又要执行数据保存和数据查询等多项指令操作,如果再应用顺序存储结构就会面临许多问题。

  首先,测试系统经常会面临一些较为特殊的测试对象。其测试信息较为复杂且数据长度不固定,显然不利于采用顺序存储结构。假设系统按照时间或空间上的逻辑顺序来进行顺序存储,那么对存储空间的分配将成为难题。若分配空间过大,则影响存储效率;反之,又会出现数据溢出的情况。类似地,假设系统能够安排好数据的存放空间,在进行数据查询、数据删除等操作时系统也会显得力不从心。

  其次,采用顺序存储结构不能很好地处理抽象数据类型。系统在进行数据保存、数据查询以及数据删除等操作时都要考虑数据元素的长度和内容,不能做到灵活、有效。当系统需要修改或升级时,对数据元素内部结构的修改又会影响到系统的整体操作,从而降低了系统的可靠性和高效性,同时使得系统进行维护和升级的难度大大增加。

  综上所述,顺序存储结构并不能解决大容量测试系统在存储和数据时面临的所有问题,因此在实际操作中必须考虑非顺序存储结构的应用。长久以来,在中较少采用诸如链式存储结构等非顺序存储结构,原因在于链式存储结构必须有一套专门的存储管理系统来支持。在通用计算机中,这一功能由操作系统或高级语言的编译系统来实现,但在普通中没有成熟的应用案例,因而使程序设计的难度较高。下面介绍一种应用于大容量单片机系统的存储管理系统,能够支持大容量单片机测试系统的应用链式存储方式。

  大容量测试系统的存储管理系统

  对于采用链式存储结构的大容量测试系统,链表中各结点的物理地址是不固定的。为避免在保存数据时可能出现的存储空间冲突问题,需要建立专门的存储管理系统来管理存储空间的开辟和释放。其中,数据引导表是存储管理系统的基础,负责记录存储空间中各个数据元素的存储信息。利用数据引导表,同时配合实现开辟空间、释放空间等操作的函数,测试系统能够实现对大量存储空间的有效管理。

  数据引导表

  建立数据引导表,就是建立一种链表中各结点与其相应物理地址之间的联系,规范每个结点对存储空间的使用。在测试系统中,引导表只是占用存储空间内划分的一段固定区域,其记录对象是一段已被分配占用的连续地址空间的首地址和末地址,标志着保存在存储空间上的某个结点所分配占用的空间大小,称为一个“记录”。各个记录在引导表中的物理地址是连续的,并且按照每个记录首地址的大小依次排列。数据引导表工作原理如图1所示。

  图1 数据引导表工作原理示意图

  在初始状态时,内存引导表只有2个记录,表明整个存储空间的首地址和末地址,此时整个页面空间没有存储任何测试数据。一旦有新的结点需要在这一空间上保存,CPU将为该结点开辟一段连续的存储区间供其使用,并将该段空间的首地址和末地址作为一个记录写入内存引导表中。同样的当系统需要在某一页面上删除一个链表中的结点时,CPU将其对应的记录在内存引导表中删除,以此来释放此段地址空间。值得说明的是,对于在引导表中被释放的存储空间部分,其保存的内容并没有真正删除;在新的数据覆盖该地址之前,CPU还是可以通过直接访问该地址来读取其中的存储数据。

  管理存储空间的函数

  一般来讲,在通用计算机中往往利用C语言中的标准库函数malloc()、realloc()和free()来实现对存储空间的分配和管理,但这种方式对于一般的大容量测试系统并不合适。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭