ABB SD833 SD823 SS822 SD822
引言
在自动化测试领域里,单片机测试系统凭借其成熟的应用体系,简单的系统结构以及优良的性价比得到了越来越广泛的应用。近年来,随着新的测试对象不断出现,以及测试手段的不断发展,测试系统的功能越来越完善,各种应用场合对测试系统的要求也日益提高。现在的大多数测试系统不仅要完成工业现场的实时测控任务,同时还要进一步实现对测试数据的实时处理和保存。以往在一般的单片机测试系统中,信息的存储量并不大,系统只须用较少的资源就能实现数据的存储。但是随着存储芯片技术的不断发展,适用于单片机系统的存储芯片已经可以在掉电保护的情况下保存上百KB甚至几MB的数据;同样,目前的单片机测试系统也面临动辄处理并保存上千条乃至近万条测试数据的问题。这对一般的缺少操作系统支持的单片机测试系统来说,是一项相当复杂的工作,因而目前的测试系统往往只能针对具体数值对象进行处理,对大量采集数据采取简单的顺序存储方式。显然,这种方法缺少灵活性,不利于单片机测试系统处理大量测试数据,限制了测试系统在这方面的发展。
本文主要针对处理测试数据量较大的一类测试系统,讨论测试数据的存储和管理问题。这类测试系统往往由抗干扰能力较强的单片机和大容量、掉电保护的存储芯片组成,同时配有高精度数字式传感器;造价便宜,性能稳定,适合工作在工业现场,保存和处理大量测试数据,有的甚至能够与上位机组成测控网络完成更为复杂的测试任务。本文将介绍一种应用于单片机测试系统的链式存储方式,能够在工业现场进行实时测控的同时,实现对大量测试数据的保存和管理,在实际应用中取得了良好的效果。
大容量单片机测试系统中的存储结构
在大多数自动测试系统中,测试数据的逻辑结构一般都会遵循线性逻辑关系,即数据元素在时间或者空间顺序上只分先后次序而不存在上下层次。因此在设计存储结构时往往采用顺序存储结构,其优点在于处理线性数据结构时速度快,而且结构简单。
但是上述情况在前文所述的大容量测试系统中并不是普遍适用的。大容量测试系统虽然同样是线性逻辑结构,但其测试数据变化多样,构成数据元素的内部结构也非常复杂,而且系统又要执行数据保存和数据查询等多项指令操作,如果再应用顺序存储结构就会面临许多问题。
首先,测试系统经常会面临一些较为特殊的测试对象。其测试信息较为复杂且数据长度不固定,显然不利于采用顺序存储结构。假设系统按照时间或空间上的逻辑顺序来进行顺序存储,那么对存储空间的分配将成为难题。若分配空间过大,则影响存储效率;反之,又会出现数据溢出的情况。类似地,假设系统能够安排好数据的存放空间,在进行数据查询、数据删除等操作时系统也会显得力不从心。
其次,采用顺序存储结构不能很好地处理抽象数据类型。系统在进行数据保存、数据查询以及数据删除等操作时都要考虑数据元素的长度和内容,不能做到灵活、有效。当系统需要修改或升级时,对数据元素内部结构的修改又会影响到系统的整体操作,从而降低了系统的可靠性和***性,同时使得系统进行维护和升级的难度大大增加。
综上所述,顺序存储结构并不能解决大容量测试系统在存储和管理数据时面临的所有问题,因此在实际操作中必须考虑非顺序存储结构的应用。长久以来,在单片机系统中较少采用诸如链式存储结构等非顺序存储结构,原因在于链式存储结构必须有一套专门的存储管理系统来支持。在通用计算机中,这一功能由操作系统或***语言的编译系统来实现,但在普通单片机系统中没有成熟的应用案例,因而使程序设计的难度较高。下面介绍一种应用于大容量单片机系统的存储管理系统,能够支持大容量单片机测试系统的应用链式存储方式。
大容量测试系统的存储管理系统
对于采用链式存储结构的大容量测试系统,链表中各结点的物理地址是不固定的。为避免在保存数据时可能出现的存储空间冲突问题,需要建立专门的存储管理系统来管理存储空间的开辟和释放。其中,数据引导表是存储管理系统的基础,负责记录存储空间中各个数据元素的存储信息。利用数据引导表,同时配合实现开辟空间、释放空间等操作的函数,测试系统能够实现对大量存储空间的有效管理。
数据引导表
建立数据引导表,就是建立一种链表中各结点与其相应物理地址之间的联系,规范每个结点对存储空间的使用。在测试系统中,引导表只是占用存储空间内划分的一段固定区域,其记录对象是一段已被分配占用的连续地址空间的首地址和末地址,标志着保存在存储空间上的某个结点所分配占用的空间大小,称为一个“记录”。各个记录在引导表中的物理地址是连续的,并且按照每个记录首地址的大小依次排列。数据引导表工作原理如图1所示。

图1 数据引导表工作原理示意图
在初始状态时,内存引导表只有2个记录,表明整个存储空间的首地址和末地址,此时整个页面空间没有存储任何测试数据。一旦有新的结点需要在这一空间上保存,CPU将为该结点开辟一段连续的存储区间供其使用,并将该段空间的首地址和末地址作为一个记录写入内存引导表中。同样的当系统需要在某一页面上删除一个链表中的结点时,CPU将其对应的记录在内存引导表中删除,以此来释放此段地址空间。值得说明的是,对于在引导表中被释放的存储空间部分,其保存的内容并没有真正删除;在新的数据覆盖该地址之前,CPU还是可以通过直接访问该地址来读取其中的存储数据。
57120001-CL
DSAI305
57120001-BX/3
DSAO301
57120001-DZ/4
DS***110
57350001-E
DS***111
57350001-CN
DSBB102
57310256-A/1
DSBB107
57310256-BE
DSBB110
57330001E
DSBB110A
57330001-Y
DSBB170
57310256-DL
DSBB175
57310256-CC/I
DSBBN001-0
DSBBN002-0
DSBC110
5.73E+08
DSBC111
57310256K1
DSBC170
57310256-DB
DSBSN001
DSCA114
57510001-AA
DSCA124
57520001-BU
DSCA125A
57520001-CY
DSCA170
57310256-DB/4
DSCA180B
57520001-G2
DSCA190V
57310001-PK
DSCA310
57520001-AH/1
DSCA325
57520001
DSCI112
DSCL110
57310001-HD
DSCL110A
57310001-KY
DSCS115
57520001-AD/4
DSCS116
57520001-BZ
DSCS117
57520001-CN/9
DSCS131
57310001LM
DSCS150
DSCS141
DSDI301
5760001-DF/2
DSDO301
57160001-CC
DSDON001
DSHM101
57350001-AB/2
DSHM110
5735095
DSHM130
5735095-K
DSHM301
57350001-K/1
DSHM302
57350001-DS
DSIC111
57330001-T/2
DSIH700
57350001-AR/6
DSIH71
5735099-BA
DSIH75VF
5735300-H 产品网
DSIH900
57350001-CT/1
D***B110
57360001A/4
D***B112
57360001EV/1
57360001EV/2
D***B115
57360001-CO/5
D***B116
57360001-EB/2
D***B123
57360001-AH3
D***B124
57360001-U/3
D***B125
5736001-AW/3
D***B127
57360001-HG/2
D***B133
57360001-CY
D***B137
57360001-FA
D***B144
5730032G
D***B151
57360001-K
D***B175
57360001-KG
D***B176
57960001-HX
D***B178
D***B340
57360001-CT/3
D***C112
IN5736-1001-CB-03
57360001-HC
D***D110
5736045-A
D***D112
D***D113
IN5736-1001-BC/02
5736045-N
DSPB110
57340001-A/3
DSPB112
57340001-K/2
DSPB120
DSPC-150
57310256-AF/2
DSPC153
57310256-BA/1
DSPC154
57310001-BY
DSPC155
57310001CX5
DSPC157
57310001-GP
DSPC170
57310001-GL
DSPC171
5731001-CC
DSPC172
57310001-ML
DSPC172-2
57360001-NB/1
DSPC172H
57310001-MP/2
DSPC365
57310001DF/4
DSRB110
52841637G
DSRB310
DSRF150
57310255A
DSRF160
57310255V
DSRF180A
57310255-***
DSRF182
57310255-AL
DSRF182K13
3BSE003571R1
DSSA165
48990001-LY
DSSB110
48980001E
DSSB120
48980002-A
DSSB145
48980001-AP
DSSB146
48980001-AP/1
DSSB146*BAT2C
DSSB170
48980001-AG
DSSR116
48990001FK2
DSSR120
48990001-LH
DSSR121
48990001-MT
DSSR122
48990001-NK
DSSS170
52820083-AC
DSTA002
57120001-RB/1
DSTA121
57120001-E/2***********************************************88
DSTA133I
3BYN571200-E/00
DSTA170
IN5712-1001-CD/02
DSTA180
57120001-ET/3
DST***54L
5751017-R
DSTC110
IN5752-1001-a/04
DSTC130
57510001-A
DSTC160
57520001-Z
DSTDN001
DSTD120
57160001-P/1
DSTD150A
57160001-UH/1
2668184-644
IN5716-1001-DR/01
DSTD155
57160001-E2/1
DSTDN001
DSTK114
26390582
DSTK126
26390582-AY
DSTK150
26390603-A
DSTK151V
5730032-H
DSTK152
26390603-H
DSTK155
26390603-P
DSTK176
26390603-AZ
DSTK179
DSTV110
57350001-A
DSTX001
57360001-LU/1
DSTXN001-0