一种数据存取方法及装置

文档序号:1577235 发布日期:2020-01-31 浏览:32次 >En<

阅读说明:本技术 一种数据存取方法及装置 (data access method and device ) 是由 赵海旺 毛飞 田晓威 于 2018-07-19 设计创作,主要内容包括:本发明提供了一种数据的存取方法和装置,通过计算单元负责收集输入的原始状态数据,并计算出需要的寄存器个数m,数据写入单元负责按照顺序循环的方法将数据写入数据存储单元,数据存储单元包括m个与存入的数据等长的寄存器并按顺序编号,数据输出单元负责按照顺序循环方法将数据输出。本发明通过这种数据的存取方法和装置能够解决现有数据存取技术中出现的丢帧、硬件资源浪费的技术问题。(The invention provides an data access method and device, wherein a computing unit is responsible for collecting input original state data and computing the number m of required registers, a data writing unit is responsible for writing the data into a data storage unit according to a sequential circulation method, the data storage unit comprises m registers with the same length as the stored data and is numbered in sequence, and a data output unit is responsible for outputting the data according to the sequential circulation method.)

一种数据存取方法及装置

技术领域

本发明涉及数据传输技术领域,尤其涉及一种遥测遥控与信息传输技术领域。

背景技术

在无人飞行器测控系统中,地面或机载测控设备都需要通过数据接口(串口、网口等)接收地面遥控指令或机载遥测信息。由于测控设备接收数据的时刻和数据发送的时刻无法保证完全对齐,因此一般采用缓存的方式,由寄存器接收存储外部数据,待发送时刻,去寄存器中提取数据进行组帧发送。为减少重要数据的丢帧情况,现有测控设备厂家一般采用多次重复发送的方式,但这些重复的数据会占用较大带宽,降低信息传输效率。

为保证信息传输的可靠性,一般要求测控设备发送数据的发送周期Tout应略小于外部数据发送给测控设备的周期Tin

但实际应用中,由于Tout和Tin的时间不一致,则对寄存器的读取时刻和存储时刻会产生相对滑动的情况,当Tout与Tin的时间重合的时候,对寄存器会同时进行写操作和读操作,测控设备将读取到不完整或错误的数据,从而导致该帧数据无效。

另一方面,Tin为一个平均值,数据真正的发送时刻存在相对较大的波动,可能出现在一个发送周期Tout内寄存器需要存储两包数据的状态,若寄存器的大小为一个数据帧长,则必然导致丢帧的情况发生,若单个寄存器过大,则会给系统带来硬件资源的浪费。

发明内容

本发明提供了一种数据的存取方法和装置,能够解决现有数据存取技术中出现的丢帧、硬件资源浪费的技术问题。

本发明提供了一种数据的存取方法,包括如下步骤:

第一步:确认数据输入特性。所述的输入特性包括数据长度L,数据输入平均周期Tin,数据的最大传输误差Δtin

第二步:计算开辟的寄存器个数m:计算正整数

Figure BDA0001735971780000021

开辟的寄存器个数m=n+2。

第三步:开辟m个长为L的寄存器Cm......C2、C1

第四步:接收到输入数据时,检测寄存器的存储状态(包括有数据和无数据两种状态),将数据按照顺序循环存放在m个寄存器中,并将存储后的寄存器状态置为有数据。

第五步:在数据输出时刻,检测寄存器的存储状态,顺序循环读取寄存器中的数据,并将读取后的寄存器状态置为无数据。

所述的最大传输误差指某包数据实际输入时刻Ti'n与按照周期Tin相减得到的理论输入时刻的最大偏差。

所述的数据的输出周期Tout略小于输入周期Tin,优选的Tout与Tin差值不超过1%Tin

所述的正整数n,需满足(n-1)Tout<Δtin≤nTout,即在一个输出周期内,最多输入n+1帧数据。

所述的顺序循环存放是指从C1开始顺序检测数据,若m个存储器均无数据,则将数据存储在C1中;若Ck中(k=1,2,3……m-1)有数据,Ck+1中无数据,则将数据存储在Ck+1中,所述的k取满足条件的最小值;若Cm有数据,则将数据存储在C1中。

所述的顺序循环读取是指从C1开始顺序检测数据,若m个存储器均无数据,则输出空帧;若Ck-1中(k=2,3,……m)无数据,Ck中有数据,则提取Ck中的数据;若Cm无数据,则提取C1中的数据。

本发明提供了一种数据存取的装置,包括计算单元、数据写入单元、数据存储单元和数据输出单元。所述的计算单元负责收集输入的原始状态数据,并计算出需要的寄存器个数m,所述的数据写入单元负责按照顺序循环写入的方法将数据写入数据存储单元,所述的数据存储单元包括m个与存入的数据等长的寄存器并按顺序编号,所述的数据输出单元负责按照顺序循环输出的方法将数据输出。

应用本发明的技术方案,实现的有益效果如下:

1、本发明的数据存取方法和装置,根据数据输入特性确定寄存器的个数,使得即使一个数据终端发送周期内连续收到多帧待发送的数据,仍能先寄存下来等待下一帧的发送,保证了不会因为数据覆盖导致丢帧。

2、本发明的数据存取方法和装置,根据数据输入特性确定寄存器的最少使用个数,使得系统使用最少的硬件资源取得无丢帧的效果。

3、本发明的数据存取方法中存数和取数是两个独立的过程,在存数完之后才会对寄存器状态进行更新。因此即使出现读数和取数时刻重合的情况,上述的存取逻辑也能保证不对同一个寄存器同时进行存取操作,从而避免了输入和输出不成功的情况。

附图说明

所包括的附图用来提供对本发明实施例的进一步的理解,其构成了说明书的一部分,用于例示本发明的实施例,并与文字描述一起来阐释本发明的原理。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示出了存取数据时序图;其中的nT(n=0,1,2……6)表示数据读取的实际时间,tn(n=0,1,2……6)表示数据输入的实际时间。

图2示出了数据存取装置的示意图。

具体实施方式

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

各设备按照图2所示进行连接,外部数据按照平均周期Tin向测控设备发送数据,数据输出的周期Tout,Tout=0.999Tin,Δtin为最大输入误差,且0<Δtin≤Tout,数据帧长度为L(bits)。

具体实施例如下:

第一步:计算单元根据数据输入的状态,计算需要开辟的寄存器个数m:计算正整数

Figure BDA0001735971780000041

则在一个输出周期内,最多输入2帧数据,开辟的寄存器个数m=n+2=3。

第二步:在数据存储单元开辟三个长为L的寄存器a、b、c。

第三步:用data_ram[2:0]表示c、b、a三个寄存器的状态,有数据为1,无数据为0。按照顺序循环存入数据的原则,数据写入单元将收到的数据帧依次存入数据存储单元的三个寄存器a、b、c中,并更新存数后的data_ram[2:0],即将有数据的寄存器对应的data_ram[2:0]中的bit置为1。存数逻辑的真值表如表1,由表1、3可见,当寄存器在一个周期内输入两帧数据,可以完成准确读数,在一个周期内输入3帧数据,三个寄存器都处于有数的状态,输出时的顺序就会出现混乱,要解决这个问题就需要再增加一个寄存器,由此可见需要的寄存器个数最小为m=n+2。

第四步:在取数时刻,数据读取单元根据data_ram[2:0]的状态,按照顺序循环读数的原则,读取相应寄存器中的数据,读取数据后,将相应寄存器的状态位置设置为0,更新data_ram[2:0]的状态,取数逻辑真值表如表2。

表1存数逻辑真值表

序号 存数前data_ram[2:0] 存入寄存器编号 存数后data_ram[2:0]
1 000 a 001
2 001 b 011
3 010 c 110
4 100 a 101

表2取数逻辑真值表

Figure BDA0001735971780000051

Figure BDA0001735971780000061

如图1所示,更进一步的说明如下:

在t0时刻,计算单元接收到外部数据,按照顺序循环写入的规则,数据写入单元将数据存放于寄存器a中,data_ram[2:0]状态更新为001,在0时刻,查询data_ram[2:0]状态,数据输出单元取出寄存器a中的数据,data_ram[2:0]状态更新为000。

在t1时刻,计算单元接收到外部数据,数据写入单元将数据存放于寄存器a,data_ram[2:0]状态更新为001,在T时刻,查询data_ram[2:0]状态,数据输出单元取出寄存器a中的数据,data_ram[2:0]状态更新为000。

在2T时刻,查询data_ram[2:0]状态为000,数据输出单元从寄存器中不读取任何数据,发空帧,data_ram[2:0]状态保持000。

在t2时刻,计算单元接收到外部数据,数据写入单元将数据存放于寄存器a,data_ram[2:0]状态更新为001,在t3时刻,计算单元接收到下一帧外部数据,按照顺序循环写入的规则,数据写入单元将其存入寄存器b中,data_ram[2:0]更新为011。

在3T时刻,无数据输入,查询data_ram[2:0]状态(011),数据输出单元取出寄存器a中的数据,data_ram[2:0]状态更新为010。这样首先将上一包未能及时发出的数据先行发送,防止了丢帧的情况发生。

在t4时刻,计算单元接收到外部数据,按照顺序循环写入的规则,数据写入单元将存入寄存器c中,data_ram[2:0]更新为110,在4T时刻,数据输出单元根据顺序循环读取的原则,读取寄存器b中的数据,data_ram[2:0]更新为100.

在5T时刻,数据输出单元根据data_ram[2:0]的状态读取寄存器c中的数据,进行发送,data_ram[2:0]又更新为000。

由于数据的输出周期略小于输入周期,这就使得在足够长的时间内,状态机总能将寄存器data_ram[2:0]恢复为000的状态,从而杜绝出现输出阻塞(即data_ram[2:0]始终保持111)的情况。

作为对比,现用的数据存取方式,因为没有经过寄存器的优化,会有数据存进寄存器但无法按照存数顺序读出或者寄存器不够,无法存放数据而造成丢帧。如表3所示的情况。

表3现用存数逻辑真值表

序号 存数前data_ram[2:0] 存入寄存器编号 存数后data_ram[2:0]
1 011 c 111
2 101 b 111
3 110 a 111
4 111 a 111

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:处理中断优先级的电路系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!