微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 单片机测试系统的数据存储和管理

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

时间:09-20 来源:互联网 点击:
管理存储空间的函数

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

假设在前文所述的大容量测试系统中,系统采用16位地址的单片机,利用分页存储模式对512KB掉电保护存储器进行访问。将存储器分为16个页面(00H~0FH),每个页面地址为0000H~7FFFFH,共计32KB。此时系统利用malloc()可以在未被使用的空间中开辟一段存储空间,但是该函数返回的地址指针是随机的,有可能将空间分配在系统无法识别的区间(如7FFFH~FFFFH),因此不能满足需要。另外,由于系统中存储器具有掉电保护功能,CPU在重新上电后将无法识别已保存测试数据的存储空间,从而使malloc()函数失去意义。因此,还是以数据引导表为基础来建立存储空间的管理函数。其具体功能的实现都依赖于函数对数据引导表中各个记录的操作,程序如下:

void *m_alloc(uintsize,ucharpage)//开辟存储空间的函数

void *m_free(voidxdata*p_free,ucharpage)//释放已开辟存储空间的函数

void *re_alloc(voidxdata*p_re,uintsize,ucharpage)//重新开辟存储空间的函数

以m_alloc()函数为例,其程序流程图如图2所示。



图2 开辟存储空间函数m_alloc()的程序流程

当系统需要为某一结点开辟存储空间时,首先给出指定的存储空间页面page和需要开辟空间的长度size,然后通过m_alloc()函数在相应页面的引导表内查询是否有合适的存储空间。由于引导表中每个记录都代表一段已被分配的连续的地址区间,因此m_alloc()函数会从第一个记录开始判断每两个相邻记录之间未被分配空间的长度是否满足系统的需要。当有一对记录满足条件时,m_alloc()函数会返回该段未被分配存储空间的首地址(即前一个记录的末地址)指针,同时在这两个记录中间插入此次开辟空间段的新记录。如果该页面引导表的所有记录都不满足条件,则m_alloc()函数返回空指针。re_alloc()函数和m_free()函数分别完成重新分配指定首地址的一段存储空间和删除指定首地址的一段存储空间的操作。其功能和用法与m_alloc()类似,不再赘述。

链式存储结构和存储管理系统在实际操作中的应用

利用上文所述的存储管理系统可以实现在大容量测试系统中应用链式存储结构,这样做的好处在于能够有效地简化系统存储数据的过程,有利于执行多项指令操作,提高系统存储空间的利用率。

SF6密度继电器校验系统

如图3所示,SF6密度继电器校验系统由51系列单片机、512KB掉电保护存储器、打印机、时钟系统和LCD组成,配有高精度的数字式压力传感器和温度传感器,可以通过485总线与上位机通信。该系统能够对不同类型的密度继电器进行校验,满足各种额定参数和接点数目的需要,在校验过程中实现实时显示、打印数据等多项功能;对同一继电器能够保存多组校验数据,最多可保存4000多条校验数据;对于所有的校验记录,都可以随时进行查询;另外,在与上位机进行通信时,有相应的上位机软件对下位机系统进行的数据传输、存储器空间查询和数据删除等操作。


图3 SF6密度继电器校验系统结构框图

具体来讲,SF6密度继电器校验系统以SF6密度继电器作为校验对象,校验结果包含SF6气体的压力值和温度值,因此将每个校验对象的校验结果抽象为一个数据元素,分别包括该校验对象的测试信息(如测试日期,继电器的测试序号、接点数目和额定参数信息)和一组或多组的测量值信息(如校验次数、报警、闭锁1、闭锁2、超压接点分别动作、返回时的压力值和温度值)。系统以每个数据元素为结点建立链式存储结构,并通过上述的管理存储系统来管理存储空间的分配,这样既能保证有效、合理地保存校验数据,又能很好地实现数据查询、数据删除以及与上位机通信等操作,使系统的运行更加高效可靠。

非线性逻辑结构的自动测试系统

当自动测试系统面临非线性逻辑结构的数据元素时,必须要采取非顺序存储结构来保存数据,此时可以考虑链式存储结构,或者索引存储结构以及二叉树等各种非顺序存储结构,但前提条件都是要有一套专门的存储管理系统来支持。

有了上述的存储管理系统作基础,各种非顺序存储结构的应用就成为可能。在设计系统时充分权衡存储空间的利用率和算法所耗费的时间,就能够有针对性地应用多种存储结构并设计出相应的算法,以满足各种测试对象和测试环境的要求。

结语

以链式结构的形式保存数据和通过数据引导表来管理存储空间,是应用于大容量单片机测试系统的一种新的数据保存和管理方式。

这种存储方式既适用于线性逻辑结构测试系统,也适用于非线性逻辑结构测试系统,总体上使得单片机系统在处理多项复杂数据并进行反复保存、查询和删除等操作时更加快捷简便,提高了对有限容量存储空间的利用率;同时,结构化的数据存储使得系统的维护和升级更加轻松,实现了系统的结构化管理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top