一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据存储方法、读取方法及电子设备与流程

2022-02-23 01:25:21 来源:中国专利 TAG:


1.本发明涉及存储器技术领域,具体涉及数据存储方法、读取方法及电子设备。


背景技术:

2.近年来,随着内存技术的不断发展,内存的主频与容量不断提高,目前,市场的主流是第四代双倍速率随机动态存取器(ddr4),其数据传输频率最高可达3200mhz。ddr内部是一个如同表格一样的存储阵列,寻址时需要先进行行选通(cas),再进行列选通(ras),为了方便寻址,将ddr内部分成若干个子块,也就是bank,随着ddr不断更新换代,ddr内的bank数量也在增加,在目前的主流存储芯片ddr4中,这些bank被分在不同的bank group中。
3.一次典型的ddr读写操作需要经过激活行,发出读写命令,读写数据等步骤,ddr的数据读写通常以突发(burst)的形式来进行,这是一种在同一行中相邻的存储单元连续进行数据传输的方式,即突发长度一定时,一次读写的数据量也是固定的。突发的长度在初始化时由寄存器写定,其后为一个定值。如图1所示,来自接口的数据存入ddr中,存数据的同时对每一包数据的长度信息进行存储以区分不同的数据包,通常的操作是存储写入每个ddr地址的数据是否包结束这一信息(eop)进行存储,这就需要在控制芯片中开辟一片与ddr地址长度等量的ram。
4.现有的数据存储方式是直接对单个数据包进行存储,ddr内只存入数据,同时在控制芯片内另行开辟存储区域对数据包的eop信息进行存储,读取数据时需要同时读取该地址对应的eop以确保能够完整地读出整包数据。在对数据进行存储的同时需要存储包长信息,需要消耗额外的存储资源,随着存储数据包量的增加,需要开辟的地址空间变大相应的ram资源占用也会越多。同时,对于较短的数据包,假设一次突发64字节,当前存入的数据包长度为65字节时,存储该数据需要两次突发操作,而第二次突发实际写入的数据只有1字节,这就造成了总线资源的浪费。


技术实现要素:

5.有鉴于此,本发明实施例提供了一种数据存储方法、读取方法及电子设备,以解决额外消耗存储资源以及总线资源浪费的问题。
6.根据第一方面,本发明实施例提供了一种数据存储方法,包括:
7.获取原始数据包以及所述原始数据包的长度信息;
8.将所述长度信息与所述原始数据包进行封装,生成目标数据包;
9.判断所述目标数据包的长度是否超过预设值;
10.当所述目标数据包的长度未超过所述预设值时,将所述目标数据包写入缓存,并判断所述缓存中的待处理数据包的长度是否超过所述预设值,所述待处理数据包由至少一个所述目标数据包依次拼接形成;
11.当所述待处理数据包的长度超过所述预设值时,将所述待处理数据包存储至内存。
12.本发明实施例提供的数据存储方法,通过将原始数据包与其长度信息进行封装,作为一个目标数据包进行存储,可以避免对长度信息的额外存储,减少了存储资源;且设置存储数据包长度的预设值,将长度小于该预设值的目标数据包进行拼接后再存储,以保证每次存入内存的数据包的长度均大于预设值,可以避免较短数据包的存储所造成的总线资源的浪费。
13.结合第一方面,在第一方面第一实施方式中,所述方法还包括:
14.当所述目标数据包的长度超过所述预设值时,将所述待处理数据包存储至内存。
15.本发明实施例提供的数据存储方法,在目标数据包的长度超过预设值时直接对其进行存储,而不需要等待其他的目标数据包,可以提高数据存储的效率。
16.结合第一方面,在第一方面第二实施方式中,所述方法还包括:
17.判断所述待处理数据包中最早的目标数据包的缓存时间是否超过阈值;
18.当所述最早的目标数据包的缓存时间超过所述阈值时,将所述待处理数据包存储至所述内存。
19.本发明实施例提供的数据存储方法,通过设置缓存时间的阈值,可以避免长时间的等待所导致的总线资源浪费的问题。
20.结合第一方面第二实施方式,在第一方面第三实施方式中,所述当所述最早的目标数据包的缓存时间超过所述阈值时,将所述待处理数据包存储至所述内存,包括:
21.若当前存在目标数据包,将所述待处理数据包与当前存在的目标数据包拼接后存储至所述内存。
22.本发明实施例提供的数据存储方法,在最早的目标数据包的缓存时间超过阈值且当前存在目标数据包的情况下,将待处理数据包与当前存在的目标数据包进行拼接后存储,可以减少存储次数,提高总线资源利用率。
23.根据第二方面,本发明实施例还提供了一种数据读取方法,包括:
24.获取预设读取长度;
25.基于所述预设读取长度交织读取数据包,所述读取的数据包包括至少一个目标数据包,所述目标数据包是基于原始数据包以及所述原始数据包的长度信息封装得到的;
26.对所述读取的数据包进行解析,确定所述至少一个原始数据包。
27.本发明实施例提供的数据读取方法,通过设置预设读取长度读取数据包,且每次读取出至少一个目标数据包,在目标数据包中同时包括原始数据包及其长度信息,减少了数据读取次数,提高了数据读取效率及总线资源利用率。
28.结合第二方面,在第二方面第一实施方式中,所述获取预设读取长度,包括:
29.获取本地的位宽、突发长度以及bank数;
30.基于所述位宽、突发长度以及bank数的乘积,确定所述预设读取长度。
31.本发明实施例提供的数据读取方法,通过位宽、突发长度以及bank数的乘积,确定出预设读取长度,使得利用该预设读取长度进行数据包读取时能够跨越上一行的最后一包和下一行的第一包,行切换带来的总线空闲最少,总线效率最高。
32.结合第二方面,在第二方面第二实施方式中,所述对所述读取的数据包进行解析,确定所述至少一个原始数据包,包括:
33.从所述读取的数据包中解析出所述原始数据包的长度信息;
34.基于所述长度信息从所述读取的数据包中读取所述原始数据包;
35.当读取到最后一个目标数据包时,判断所述读取的数据包中所述最后一个原始数据包的长度是否小于所述最后一个原始数据包的总长度;
36.当所述读取的数据包中所述最后一个原始数据包的长度小于所述最后一个原始数据包的总长度时,获取读取下一个数据包的请求;
37.读取下一个数据包,并将所述下一个数据包与所述最后一个目标数据包进行拼接,以读取出所述最后一个原始数据包。
38.本发明实施例提供的数据读取方法,是否需要读取下一个数据包是基于用户需求确定的,在需要读取时再进行数据包的读取,以保证总线资源的利用率。
39.结合第二方面第二实施方式,在第二方面第三实施方式中,所述对所述读取的数据包进行解析,确定所述至少一个原始数据包,还包括:
40.当所述读取的数据包中所述最后一个原始数据包的长度小于所述最后一个原始数据包的总长度时,获取数据包存储请求;
41.存储所述最后一个目标数据包。
42.本发明实施例提供的数据读取方法,在不需要读取下一个数据包时直接对其进行存储,等待下一个数据包的读取需求。
43.根据第三方面,本发明实施例还提供了一种数据存储装置,包括:
44.第一获取模块,用于获取原始数据包以及所述原始数据包的长度信息;
45.生成模块,用于将所述长度信息与所述原始数据包进行封装,生成目标数据包;
46.第一判断模块,用于判断所述目标数据包的长度是否超过预设值;
47.第二判断模块,用于当所述目标数据包的长度未超过所述预设值时,将所述目标数据包写入缓存,并判断所述缓存中的待处理数据包的长度是否超过所述预设值,所述待处理数据包由至少一个所述目标数据包依次拼接形成;
48.存储模块,用于当所述待处理数据包的长度超过所述预设值时,将所述待处理数据包存储至内存。
49.根据第四方面,本发明实施例提供了一种数据读取装置,包括:
50.第二读取模块,用于获取预设读取长度;
51.读取模块,用于基于所述预设读取长度读取数据包,所述读取的数据包包括至少一个目标数据包,所述目标数据包是基于原始数据包以及所述原始数据包的长度信息封装得到的;
52.解析模块,用于对所述读取的数据包进行解析,确定所述至少一个原始数据包。
53.根据第五方面,本发明实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的数据存储方法,或执行第二方面或者第二方面的任意一种实施方式中所述的数据读取方法。
54.根据第六方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的数据存储方法,或执行第二方面或者第二方面的任意一种实施方式中所述的数据读取方法。
55.需要说明的是,本发明实施例中的数据存储装置、数据读取装置、电子设备及存储介质的有益效果,请参见相应的数据存储方法或数据读取方法中的描述,在此不再赘述。
附图说明
56.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
57.图1是ddr读写框图;
58.图2是现有的ddr读取操作示意图;
59.图3是根据本发明实施例的数据存储方法的流程图;
60.图4是根据本发明实施例的拼包示意图;
61.图5是根据本发明实施的数据存储方法的流程图;
62.图6是根据本发明实施例的数据读取方法的流程图;
63.图7是根据本发明实施例的数据读取方法的流程图;
64.图8是现有单bank的数据读取过程的示意图;
65.图9a-图9b是根据本发明实施例的8bank交织读取过程的示意图;
66.图10是根据本发明实施例的数据读取的示意图;
67.图11是根据本发明实施例的数据存储装置的结构框图;
68.图12是根据本发明实施例的数据读取装置的结构框图;
69.图13是本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
70.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
71.需要说明的是,本发明实施中的内存可以是ddr,也可以是其他硬件内存,在此对其并不做任何限定。图1示出了ddr存储的典型应用场景,在数据存储时,来自接口的数据存入ddr中,存数据的同时对每一包数据的长度信息进行存储以区分不同的数据包,通常的操作是存储写入每个ddr地址的数据是否包结束这一信息进行存储,这就需要在控制芯片中开辟一片与ddr地址长度等量的ram。cpu读取存入的数据包时,需要同时判断当前地址取出的数据是否为整包数据的最后一次突发。
72.一次典型的ddr读写操作需要经过激活行,发出读写命令,读写数据等步骤,ddr的数据读写通常以突发(burst)的形式来进行,这是一种在同一行中相邻的存储单元连续进行数据传输的方式,即突发长度一定时,一次读写的数据量也是固定的。突发的长度在初始化时由寄存器写定,其后为一个定值。以ddr的读取为例,图2给出ddr4的一串操作以及时间参数。在ddr初始化完成后,需要发出行激活命令,一次最多激活4个bank,相邻的两次4bank激活的时间差为t
faw
;行激活之后即可发出读命令,激活命令到读命令的时延为t
rcd
;相邻两
次行激活之间的时间差为t
ccd
,相邻两次读取的时间差为t
rrd
=t
ccd
;当这两次行激活的bank在同一个group中时,t
ccd
=t
ccdl
,在不同的group中时,t
ccd
=t
ccds
,这种相邻激活不同bank的操作称为bank交织,采用这种激活方式可以缩小行激活之间的时延;读命令发出到数据驱动至总线的延迟为t
rl
。当需要对bank中的其他行操作时,需要先关闭当前行,即预充电,对该bank当前行的行激活命令到预充电之间的时延为t
ras
,预充电到下一行激活之间的时延为t
rp
,那么相邻两次行激活之间的时间t
rc
=t
ras
t
rp
。如果只采用4bank,那么在第一个bank该行最后一个读命令到下一行第一个读命令之间的时长为t
rc
=32 14.16=46.16ns。
73.首先考虑单bank的读取,对同一bank进行读取操作时,连续的读命令之间t
ccd
=t
ccdl
=6clk,如图8所示,在激活与预充电之间可以连续发出读指令。一行的数据量为1024,选取最大的突发长度bl=8,一次突发传输128bit数据;则连续读取一行数据需要8次突发,即32clk,连续读取一行的时长为t
rc
32clk=46.16 26.67=72.83ns,数据总线的使用效率为26.67/72.83=36.62%。显然,这样的读取方式十分浪费总线资源。
74.基于此,根据本发明实施例,提供了一种数据存储方法以及数据读取方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
75.在本实施例中提供了一种数据存储方法,可用于子设备,图3是根据本发明实施例的数据存储方法的流程图,如图3所示,该流程包括如下步骤:
76.s11,获取原始数据包以及原始数据包的长度信息。
77.原始数据包可以为电子设备产生的需要存储进内存的数据包,也可以是电子设备从外界获取到的,或者通过其他方式获得的,在此对原始数据包的来源并不做任何限定。原始数据包可以是一个,或两个,或多个等等,并不多其数量进行限制。
78.原始数据包的长度信息用于表征原始数据包中的数据长度,用于表示原始数据包所占的字节数等等。
79.s12,将长度信息与原始数据包进行封装,确定目标数据包。
80.电子设备将长度信息与原始数据包进行拼接,例如,将长度信息拼接在原始数据包的包头,或者基于相应的传输协议对将长度信息填充在原始数据包中,等等。电子设备可以根据实际需求将长度信息与原始数据包进行封装,得到目标数据包。
81.后续在对目标数据包进行解析时,可以通过解析其包头,提取出长度信息,再基于该长度信息提取出相应的数据,从而读取出原始数据包。
82.关于目标数据包的读取过程具体将在下文中进行详细描述。
83.s13,判断目标数据包的长度是否超过预设值。
84.预设值可以是根据经验值设置的;也可以是基于原始数据包的长度确定的,例如,可以计算所有原始数据包的长度均值,将其作为预设值;或者,确定原始数据包的长度范围,从长度范围中确定出一个长度作为预设值。电子设备在获取到目标数据包之后,其长度是为原始数据包的长度与长度信息所占的长度之后。若待存储数据的长度为n个字节,长度信息占2个字节,那么该目标数据包的长度为(n 2)个字节。电子设备将目标数据包的长度与预设值进行比较,当目标数据包的长度未超过预设值时,执行s14;否则,执行其他操作。其中,预设值也可以理解为是否对目标数据包进行存储的条件。
85.其他操作可以是直接对目标数据包进行存储,也可以是设置一个预设值的上限,若目标数据包的长度大于预设值的上限,则需要对目标数据包进行拆分,等等。当然,其他操作并不限于上文所述,也可以为其他操作。
86.s14,将目标数据包写入缓存,并判断缓存中的待处理数据包的长度是否超过预设值。
87.其中,所述待处理数据包由至少一个所述目标数据包依次拼接形成。
88.缓存用于存放长度未超过预设值的目标数据包,当目标数据包的长度未超过预设值时,将其写入缓存形成缓存中的待处理数据包。即,待处理数据包是有至少一个目标数据包依次拼接形成。
89.电子设备在将目标数据包写入缓存对待处理数据包进行更新之后,将缓存中的待处理数据包的长度与预设值进行比较,判断其是否超过预设值。当超过预设值时,执行s15;否则执行其他操作,此处的其他操作可以是返回s11继续获取下一个原始数据包,也可以根据待处理数据包中存入时间最早的目标数据包的缓存时间,确定是否需要将待处理数据包存入内存中。
90.如图4所示,待处理数据包由n个目标数据包依次拼接形成,分别为pkg1、pkg2、pkg3、

、pkgn,对于每个目标数据包均包括原始数据包data以及长度信息header。
91.s15,将待处理数据包存储至内存。
92.在待处理数据包的长度大于预设值时,电子设备将拼接后的数据包存入内存,例如,ddr中。
93.本实施例提供的数据存储方法,通过将原始数据包与其长度信息进行封装,作为一个目标数据包进行存储,可以避免对长度信息的额外存储,减少了存储资源;且设置存储数据包长度的预设值,将长度小于该预设值的目标数据包写入缓存,待缓存中的待处理数据包的长度超过预设值时再将待处理数据包存入内存,以保证每次存入内存的数据包长度均大于预设值,可以避免较短数据包的存储所造成的总线资源的浪费。
94.在本实施例中提供了一种数据存储方法,可用于电子设备,图5是根据本发明实施例的数据存储方法的流程图,如图5所示,该流程包括如下步骤:
95.s21,获取原始数据包以及原始数据包的长度信息。
96.详细请参见图3所示实施例的s11,在此不再赘述。
97.s22,将长度信息与原始数据包进行封装,确定目标数据包。
98.详细请参见图3所示实施例的s12,在此不再赘述。
99.s23,判断目标数据包的长度是否超过预设值。
100.当目标数据包的长度未超过预设值时,执行s24;否则,执行s27。
101.详细请参见图3所示实施例的s13,在此不再赘述。
102.s24,将目标数据包写入缓存,并判断缓存中的待处理数据包的长度是否超过预设值。
103.其中,所述待处理数据包由至少一个所述目标数据包依次拼接形成。
104.当待处理数据包的长度超过预设值时,执行s26;否则,执行s21。
105.其余详细请参见图3所示实施例的s14,在此不再赘述。
106.s25,判断待处理数据包中最早的目标数据包的缓存时间是否超过阈值。
107.电子设备在将长度未超过预设值的目标数据包写入缓存时,同时记录写入的时间戳,对应于每个写入缓存的数据包均对应有一个写入时间戳。由于待处理数据包是目标数据包依次拼接形成的,因此,在进行最早的目标数据包的缓存时间判断时,仅需要提取缓存中第一个目标数据包对应的写入时间戳,将其与当前时间进行比较,即可确定最早的目标数据包的缓存时间。
108.当最早的目标数据包的缓存时间超过阈值时,执行s26;否则,继续执行s25。
109.s26,将待处理数据包存储至内存。
110.将待处理数据包存储至内存的触发时机包括两种情况,一种为待处理数据包的长度超过预设值,另一种待处理数据包中最早的目标数据包的缓存时间超过阈值。
111.在将待处理数据包存储至内存时,可以单独将待处理数据包存储至内存而不论当前是否有目标数据包的存在,不论当前目标数据包的长度是否超过预设值;或者,若当前存在目标数据包时,不论目标数据包的长度是否超过预设值,将待处理数据包与目标数据包拼接后存储至内存。
112.具体地,可以包括如下情况:
113.(1)若当前不存在目标数据包,将待处理数据包存储至内存;
114.(2)若当前存在目标数据包,电子设备不需要比较目标数据包的长度,将待处理数据包与目标数据包拼接后存储至内存。
115.(3)若当前存在目标数据包,当目标数据包的长度未超过预设值时,将目标数据包写入缓存对待处理数据包进行更新,再将更新后的待处理数据包存储至内存。
116.(3)若当前存在目标数据包,当目标数据包的长度超过预设值时,将待处理数据包与目标数据包拼接后存储至内存。
117.s27,将目标数据包存储至内存。
118.电子设备在判断出目标数据包的长度超过预设值时,直接将目标数据包存储至内存。
119.在本实施例的一些可选实施方式中,上述s25与s21-s24是并行的处理方式,并无先后执行顺序的限制。
120.本实施例提供的数据存储方法,通过设置等待时间的阈值,可以避免长时间的等待所导致的总线资源浪费的问题。或者,在目标数据包的长度超过预设值时直接对其进行存储,而不需要等待其他目标数据包,可以提高数据存储的效率。
121.在本实施例中提供了一种数据存储方法,可用于电子设备,图6是根据本发明实施例的数据存储方法的流程图,如图6所示,该流程包括如下步骤:
122.s31,获取预设读取长度。
123.预设读取长度可以是根据经验值设置,也可以是基于ddr的参数设置的,或者通过其他方式确定的,在此对其并不做任何限制。其中,所设置的预设读取长度用于保证跨越上一行的最后一包和下一行的第一包,以保证总线资源的利用最大化。
124.s32,基于预设读取长度交织读取数据包。
125.其中,所述读取的数据包包括至少一个目标数据包,所述目标数据包是基于原始数据包以及所述原始数据包的长度信息封装得到的;
126.电子设备利用预设读取长度从ddr中进行数据包的读取,每次读取时所读取到的
目标数据包的数量可以是1个,或2个,或多个等等,具体取决于各个目标数据包的长度。当然,由于预设读取长度的限制,每次读取的数据包并不一定完整的,例如,读取的数据包中最后一个数据包仅读取了其中的部分数据。
127.对于各个目标数据包而言,其包括原始数据包以及原始数据包的长度。其具体形成方式可以参见上文数据存储方法的相关描述,在此不再赘述。
128.要减少连续读取的时间就需要采用bank交织的方式来读取数据,此时,图9所示,连续读命令之间的t
ccd
=t
ccds
=4clk。在激活时就需要同时激活不同的bank,由于一次只能激活4个bank,一次4bank激活操作激活两个group中的各2个bank。
129.s33,对读取的数据包进行解析,确定至少一个原始数据包。
130.如上文所述,各个目标数据包均封装有长度信息,电子设备在对读取的数据包进行解析时,从读取的数据头开始,由头信息中的长度信息来逐包剥离出数据,得到原始数据包。
131.本实施例提供的数据读取方法,通过设置预设读取长度读取数据包,且每次读取出至少一个目标数据包,在目标数据包中同时包括原始数据包及其长度信息,减少了数据读取次数,提高了数据读取效率及总线资源利用率。
132.在本实施例中提供了一种数据存储方法,可用于基于ddr的电子设备,图7是根据本发明实施例的数据存储方法的流程图,如图7所示,该流程包括如下步骤:
133.s41,获取预设读取长度。
134.具体地,上述s41包括:
135.s411,获取本地的位宽、突发长度以及bank数。
136.本地的位宽可以从本地的属性信息中获得,突发长度以及bank数均取决于ddr的属性。若ddr提供多个突发长度,则从多个突发长度中选择最大的突发长度。
137.s412,基于位宽、突发长度以及bank数的乘积,确定预设读取长度。结合图9a以及图9b所示,如果只采用4bank,那么在第一个bank该行最后一个读命令到下一行第一个读命令之间的时长为t
rc
=32 14.16=46.16ns,而其余三个bank最后一次读数据时长4clk*4=16clk=13.33ns,也就是说,当前行数据读完在下一行数据开始读之间有46.16-13.33=32.83ns的总线空闲。如果在第一个4bank激活之后的t
faw
时间后继续交织激活剩下的4个bank,两次4bank激活之间相差16clk,而一次激活4个bank的时间为12clk,从时间轴上看采用交织的方式,8个bank之间激活的时间间隔正好为t
ccd
=t
ccds
=4clk,如图9a所示。当其中一个bank发出最后一次读命令开始,剩下的7个bank至少还需要经历7次读周期,即4clk*8=32clk=26.67ns,此时预充电与激活周期造成的总线空闲为46.16-26.67=19.49ns,如图9b所示。显然,t
rc
的周期内尽量多激活bank可以提高数据吞吐量,读取时可以最大限度地降低指令周期带来的影响。也就是说,当选择一次读取长度跨越上一行的最后一包和下一行的第一包时,行切换带来的总线空闲最少,总线效率最高,此时单次读取数据长度=颗粒位宽*突发长度*bank数,即16*8*8=1kb,连续读取时总线效率为1-19.49/(46.16 213.33连续读取一行的时间)=92.49%。
138.由此可知,通过位宽、突发长度以及bank数的乘积确定预设读取长度,可以极大地提高总线效率。
139.s42,基于预设读取长度交织读取数据包。
140.其中,所述读取的数据包包括至少一个目标数据包,所述目标数据包是基于原始数据包以及所述原始数据包的长度信息封装得到的。
141.详细请参见6所示实施例的s32,在此不再赘述。
142.s43,对读取的数据包进行解析,确定至少一个原始数据包。
143.具体地,上述s43包括:
144.s431,从读取的数据包中解析出原始数据包的长度信息。
145.s432,基于长度信息从读取的数据包中读取原始数据包。
146.电子设备从读取的数据包的包头开始,先解析出第一个原始数据包的长度信息,利用该长度信息从读取的数据包中进行数据读取,确定出第一个原始数据包。当第一个原始数据包读取完成时,继续读取第二个原始数据包的长度信息,再利用该长度信息从剩下的数据包中进行第二个原始数据包的读取;
……
;依次类推,直至读取到最后一个目标数据包。
147.s433,当读取到最后一个目标数据包时,判断读取的数据包中最后一个原始数据包的长度是否小于最后一个原始数据包的总长度。
148.当读取的数据包中最后一个原始数据包的长度小于最后一个原始数据包的总长度时,执行s434;否则,直接对最后一个数据包进行解析,确定最后一个原始数据包。
149.s434,获取读取下一个数据包的请求。
150.对于最后一个目标数据包的判断,可以是先读取到最后一个原始数据包的长度信息,将该长度信息与读取的数据包中未解析的数据包的长度进行比较。若最后一个原始数据包的长度大于未解析的数据包的长度,则表示当前读取到最后一个原始数据包。
151.当最后一个原始数据包的长度正好等于未解析的数据包的长度,则直接读取最后一个原始数据包;若最后一个原始数据包的长度小于未解析的数据包的长度,则需要根据实际需求确定是否读取下一个数据包。
152.如图10所示,当前读取的数据包包括n-1个完整的目标数据包,以及最后一个目标数据包的部分数据;下一个读取到的数据包中包括上一个读取的数据中的最后一个目标数据包的剩余数据,以及其他数据包;
……
;依次类推。
153.s435,读取下一个数据包,并将下一个数据包与最后一个目标数据包进行拼接,以读取出最后一个原始数据包。
154.对于读取的数据包中包括不完整的最后一个目标数据包时,当需要用到该最后一个目标数据包时,向电子设备发送读取下一个数据包的请求,电子设备读取下一个数据包,并将最后一个目标数据包与下一个数据包进行拼接,再在拼接的基础上进行数据解析。关于是否需要读取下一个数据包是基于用户需求确定的,在需要读取时再进行数据包的读取,以保证总线资源的利用率。
155.在本实施例的一些可选实施方式中,上述s43还可以包括:
156.(1)当读取的数据包中最后一个原始数据包的长度小于最后一个原始数据包的总长度时,获取数据包存储请求。
157.(2)存储所述最后一个目标数据包。
158.对于读取的数据包中包括不完整的最后一个目标数据包时,若当前不需要用到该最后一个目标数据包时,向电子设备发送存储请求,电子设备先将最后一个目标数据包进
行存储。等待后续有数据包读取需求时,再读取下一个数据包并将最后一个目标数据包与下一个数据包进行拼接,再在拼接的基础上进行数据解析。
159.上述的读取方式在每次读取时都可以保证每一拍突发的数据有效,即,总线始终满限速,并可以通过每个目标数据包的包头信息,即获取到长度信息,可以正确恢复出存入数据。
160.本实施例提供的数据读取方法,通过位宽、突发长度以及bank数的乘积,确定出预设读取长度,使得利用该预设读取长度进行数据包读取时能够跨越上一行的最后一包和下一行的第一包,行切换带来的总线空闲最少,总线效率最高。对于读取的数据包而言,其可能读取的并不是整包的目标数据包,即所读取的数据包中最后一个目标数据包可能是不完整的,仅读取了最后一个目标数据包的部分内容,因此需要确定是否要读取下一个数据包,以保证最后一个目标数据包的完整性。
161.在发明实施例提供的数据存储方法,将若干短包拼接成长包进行数据存储以提高写入效率,同时将数据包的长度信息封装成头信息与数据一起存储以减少额外存储资源开销。在数据读取时,采用交织读取的方式选取合适的连续读取长度提高总线效率。
162.在本实施例中还提供了一种数据存储装置,或数据读取装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
163.本实施例提供一种数据存储装置,如图11所示,包括:
164.第一获取模块51,用于获取原始数据包以及所述原始数据包的长度信息;
165.生成模块52,用于将所述长度信息与所述原始数据包进行封装,生成目标数据包;
166.第一判断模块53,用于判断所述目标数据包的长度是否超过预设值;
167.第二判断模块54,用于当所述目标数据包的长度未超过所述预设值时,将所述目标数据包写入缓存,并判断所述缓存中的待处理数据包的长度是否超过所述预设值,所述待处理数据包由至少一个所述目标数据包依次拼接形成;
168.存储模块55,用于当所述待处理数据包的长度超过所述预设值时,将所述待处理数据包存储至内存。
169.本实施例还提供了一种数据读取装置,如图12所示,包括:
170.第二读取模块61,用于获取预设读取长度;
171.读取模块62,用于基于所述预设读取长度交织读取数据包,所述读取的数据包包括至少一个目标数据包,所述目标数据包是基于原始数据包以及所述原始数据包的长度信息封装得到的;
172.解析模块63,用于对所述读取的数据包进行解析,确定所述至少一个原始数据包。
173.本实施例中的数据存储装置或数据读取装置是以功能单元的形式来呈现,这里的单元是指asic电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
174.上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
175.本发明实施例还提供一种电子设备,具有上述图11所示的数据存储装置,或图12所示的数据读取装置。
176.请参阅图13,图13是本发明可选实施例提供的一种电子设备的结构示意图,如图13所示,该电子设备可以包括:至少一个处理器71,例如cpu(central processing unit,中央处理器),至少一个通信接口73,存储器74,至少一个通信总线72。其中,通信总线72用于实现这些组件之间的连接通信。其中,通信接口73可以包括显示屏(display)、键盘(keyboard),可选通信接口73还可以包括标准的有线接口、无线接口。存储器74可以是高速ram存储器(random access memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器74可选的还可以是至少一个位于远离前述处理器71的存储装置。其中处理器71可以结合图11或图12所描述的装置,存储器74中存储应用程序,且处理器71调用存储器74中存储的程序代码,以用于执行上述任一方法步骤。
177.其中,通信总线72可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。通信总线72可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
178.其中,存储器74可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:ram);存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:hdd)或固态硬盘(英文:solid-state drive,缩写:ssd);存储器74还可以包括上述种类的存储器的组合。
179.其中,处理器71可以是中央处理器(英文:central processing unit,缩写:cpu),网络处理器(英文:network processor,缩写:np)或者cpu和np的组合。
180.其中,处理器71还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:asic),可编程逻辑器件(英文:programmable logic device,缩写:pld)或其组合。上述pld可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:cpld),现场可编程逻辑门阵列(英文:field-programmable gate array,缩写:fpga),通用阵列逻辑(英文:generic array logic,缩写:gal)或其任意组合。
181.可选地,存储器74还用于存储程序指令。处理器71可以调用程序指令,实现如本技术任一实施例中所示的数据存储方法,或任一实施例中所示的数据读取方法。
182.本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的数据存储方法或数据读取方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
183.虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献