用于嵌入式系统的数据信息存储及快速查询方法

文档序号:6635976阅读:327来源:国知局
用于嵌入式系统的数据信息存储及快速查询方法
【专利摘要】本发明涉及一种用于嵌入式系统的数据信息存储及快速查询方法,在嵌入式系统的Flash中划分一块区域作为索引区,索引区每段为4byte用来存放数据信息的地址;还划分一块区域为数据信息区每段64byte(可以根据实际应用确定),该区域用来连续存放数据信息,以达到节省空间的目的。查询时先利用信息ID来计算出索引的地址,从索引地址中存储的内容获得数据信息的存放地址,最后根据存放地址到数据信息区获得需要的数据信息,本发明的方法简单,能够实现快速高效的数据信息查询。
【专利说明】用于嵌入式系统的数据信息存储及快速查询方法

【技术领域】
[0001]本发明涉及一种用于嵌入式系统的数据信息存储及快速查询方法。

【背景技术】
[0002]查找的目的在于从一些数据中寻找一个特定的值,对于查询方法的要求是具有更高的效率与更方便的操作。在范围较小的时候,无论采取什么方法查找,所花费的时间都相差无几,在这种情况下,算法上简单易行,且对存储格式要求较低的线性查找无疑就可以满足要求。但当所要查找的范围达到了一定程度时,查询方法在耗时,系统处理能力,系统资源消耗问题就逐渐突显,当数据量更大时在嵌入式系统上很难处理。
[0003]常用的查询方法,包括:
线性查找:线性查找又叫顺序查找,是从数组中第一笔数据开始进行查找比较,如果找到所需的数值则返回该值或该位置,如果没有找到则往下一笔数据进行查找比较,直到查找到最后一笔数据为止。线性查找在思维上简单易行,代码容易实现,是处理少量数据时,很好的一种选择,但是由于其平均状况的时间复杂度为0(n),随着数据量的增大其效率就明显降低,这时就应该选用其他的方法。
[0004]折半查找:折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用0(log η)完成搜索任务。它的基本思想是,将η个元素分成个数大致相同的两半,取a[n/2]与欲查找的X作比较,如果x=a[n/2]则找到x,算法终止。如果x〈a[n/2],则只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则只要在数组a的右半部继续搜索X。二分搜索法的应用极其广泛,而且它的思想易于理解,但是数据量大到一定程度时,嵌入式系统需要大量系统资源,或者需要大量的时间来进行排序。
[0005]折半查找的变形-Fibonacci查找和插补查找:
与折半查找法类似,Fibonacci查找和插补查找都是将数据查找范围切成两半,直至能够确定具体的位置或所查找不在范围之内。但是它们在效率和应用范围上也有一定的区别。
[0006]折半查找运用除法运算来减少查找范围,而Fibonacci查找法则利用了Fibonacci数列建立相应的树状结构,在缩小范围的过程中仅用到加减法。在计算机处理运算指令中,加减运算的效率高于乘除运算,所以Fibonacci查找法的效率也会优于折半查找。然而对于不平均分布的数据,其效率并不好,甚至在最坏的状况下,时间复杂度达到了线性查找相同。
[0007]对于嵌入式系统来言,复杂而又占用系统资源的查找算法,根本无法实现;但是在数据范围很大的时候,用简单方法来查找又需要用较长时间,交互性差。


【发明内容】

[0008]本发明目的在于提供一种用于嵌入式系统的数据信息存储及快速查询方法,用Flash存储空间地址作为索引,提供一个较大的索引区域使索引包含所有的信息ID的个数,索引的空间用来存放数据信息的地址,能快速得到信息存放的地址从而得到信息的内容。数据信息以连续方式存放减小空间的占用,既考虑了快速查询又兼顾了空间的利用。
[0009]为了达到上述目的,本发明的技术方案是提供一种用于嵌入式系统的数据信息存储及快速查询方法,在嵌入式系统的Flash中,包含:
数据信息区,其中连续存放有多个数据信息,每个数据信息保存在对应的信息地址下;
索引区,其中设有多个索引信息,每个索引信息对应的索引地址下,存放有与该索引信息对应的数据信息的信息地址;
其中,每个数据信息的序号n,从I到数据信息的总数中取值;每个索引信息的序号N,从I到索引信息的总数中取值;设每个数据信息对应的信息ID的数值为N-1 ;
查询时,从索引区中由信息ID计算获得的索引地址下,得到存放的数据信息的信息地址后,在数据信息区中获得该信息地址下存放的数据信息。
[0010]优选地,所述索引区在Flash中所需空间的大小,通过计算索引信息的总数与地址长度的乘积来获得;所述地址长度与任意一个信息地址在索引区中所需的存储空间相对应;
所述数据信息区在Flash中所需空间的大小,通过计算数据信息的总数与每条信息的数据长度的乘积来获得。
[0011]优选地,所述地址长度为4字节。
[0012]优选地,进行添加信息的操作时,包含以下步骤:
在数据信息区的首地址上,增加数据信息区当前位置与数据长度乘积的数值,得到新增加数据信息的信息地址;设所述数据信息区当前位置的数值为n-Ι ;
在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址,并在该索引地址下写入新增加数据信息的信息地址。
[0013]优选地,在前一次添加信息时获得新增加数据信息的信息地址以后,对数据信息区当前位置的数值做加一操作,使得下一次添加的数据信息增加在数据信息区的末端。
[0014]优选地,进行删除信息的操作时,在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索弓I地址,并将该索引地址下存放的内容修改为FFFFFFFHL
[0015]优选地,进行修改信息的操作时,包含以下步骤:
在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址;
读取该索引地址下的内容来获得要被替换的数据信息的信息地址,将该信息地址下的数据信息替换为新的数据信息。
[0016]优选地,进行查找信息的操作时,包含以下步骤:
在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址;
读取该索引地址下的内容来获得要查找的数据信息的信息地址;
在数据信息区中,读取并返回该信息地址下的数据信息。
[0017]优选地,查找信息时,当读取到索引地址下的内容为FFFFFFFFH时,返回未查到数据信息。
[0018]本发明所述用于嵌入式系统的数据信息存储及快速查询方法中,在Flash中划分一块区域作为索引区,索引区每段为4 byte用来存放数据信息的地址;还划分一块区域为数据信息区每段64 byte (可以根据实际应用确定),该区域用来连续存放数据信息,以达到节省空间的目的。查询时先利用信息ID来计算出索引的地址,从索引地址中存储的内容获得数据信息的存放地址,最后根据存放地址到数据信息区获得需要的数据信息,本发明的方法简单,能够实现快速高效的数据信息查询。
[0019]与现有技术相比,本发明所述用于嵌入式系统的数据信息存储及快速查询方法,其优点在于:
1、查找迅速:本发明的方法只需要一次计算就能准确的查找到所需要的数据信息。
[0020]2、算法简单:本发明的方法通过简单的地址计算就可以准确找到所需要的数据信肩、O
[0021]3、系统资源开销小:本发明的方法通过简单的地址运算就可以实现数据信息的管理、查找,对嵌入式系统十分稀缺的系统资源非常适用。

【专利附图】

【附图说明】
[0022]图1是本发明所述方法中Flash空间分配的示意图;
图2是本发明所述方法中添加信息的流程图;
图3是本发明所述方法中删除信息的流程图;
图4是本发明所述方法中修改信息的流程图;
图5是本发明所述方法中查找信息的流程图。

【具体实施方式】
[0023]以下根据图1?图5具体说明本发明的一种较佳实施方式:
如图1所示的实例中,假设需要存放信息ID从0-99999 (对应索引信息1-100000)的数据信息10000条,每条数据信息的数据长度为64 byte ;定义一个整数的变量N与索引信息的总数相对应,本例中N从I到100000中取值;定义另一个整数的变量η与数据信息的总数相对应,本例中η从I到10000中取值。
[0024]首先,在嵌入式系统的Flash (闪存)中设定一个索引区用来存放数据信息的信息地址(即数据信息的存放地址),索引区所需空间的大小,通过索引信息的总数(即变量N的最大取值)与地址长度4 byte的乘积来计算,本例中的索引区为100000*4 byte大约400k的空间,地址范围(000000!Γ061Α7ΠΟ。地址长度的数值4 byte与一个地址所占的数据长度相对应,也与索引区中每段的长度相对应。
[0025]然后,设定一个数据信息区用来连续存放数据信息,数据信息区所需空间的大小,通过数据信息的总数(即变量η的最大取值)与每条信息的数据长度64 byte (该数值可以根据实际应用情况使用其他的参数)的乘积来计算,本例中的数据信息区为10000*64 byte大约640k的空间,地址范围(070000H?10C3FFH)。
[0026]如图2所示,本发明中添加信息的操作,包含:
DataAddr=FirstDataAddr+Datalndex氺DataLen;
DataIndex++;
IndexAddr=FirstIndexAddr+MasageID*4;
^IndexAddr=DataAddr;
其中:
DataAddr信息地址;
FirstDataAddr数据信息区的首地址;
DataIndex数据信息区当前位置;
DataLen数据长度;
IndexAddr索引地址;
FirstIndexAddr索引区的首地址;
MessageID 信息 ID。
[0027]具体而言,对于数据信息区,在数据信息区的首地址的基础上,增加数据信息区当前位置与数据长度(64 byte)乘积的数值,来得到新增加数据信息的信息地址;之后,使数据信息区当前位置的数值做加一操作,使得每次添加数据信息时都增加在数据信息区的末端。对于索引区,在索引区的首地址的基础上,增加信息ID与地址长度(4 byte)乘积的数值,来得到索引地址;之后,在该索引地址下写入前述新增加数据信息的信息地址。
[0028]图1示例中的Flash分配信息是:首先添加I条信息ID为O的信息到Flash中;然后又添加了一条信息ID为I的信息到Flash中,......;
假设之前已经添加了 32条数据信息到Flash中,再添加一条索引N=99998 (BPMessageID为N_l=99997)并作为第n=33条添加到Flash中的数据信息时,在数据信息区首地址070000H的基础上,加上数据信息区当前位置n-l=32 (即20H)与数据长度64 byte(即40H)乘积的数值,得到所述第33条的信息地址为070800H=070000H+20H*40H ;由于索引区的首地址为000000H,则本例中与信息ID为99997 (即1869DH)对应的索引地址为061A74H=1869DH*4H ;最后,将新增加的数据信息的首地址070800H,写入求得的对应索引地址061A74H (本例中为信息ID*4 byte的地址)。
[0029]如图3所示,本发明中删除信息的操作,包含:
IndexAddr=FirstIndexAddr+MasageID*4;
^IndexAddr=FFFFFFH;
其中:
IndexAddr索引地址;
FirstIndexAddr索引区的首地址;
MessageID 信息 ID。
[0030]具体而言,在索引区的首地址的基础上,增加信息ID与地址长度(4 byte)乘积的数值,得到相应的索引地址;将该索引地址下内容修改为FFFFFFFHL
[0031]例如,图1示例中索引3 (即信息ID为2)的信息删除时,通过求得相应的索引地址000008H=000000H+2H*4H,并将该索弓I地址起始的4个字节的内容(000008H?00000BH)修改为FFFFFFFFH,来完成删除信息的操作。
[0032]如图4所示,本发明中修改信息的操作,包含:
IndexAddr=FirstIndexAddr+MasageID*4;
DataAddr=^IndexAddr;
氺DataAddr=NewData; 其中:
DataAddr信息地址;
IndexAddr索引地址;
FirstIndexAddr索引区的首地址;
MessageID 信息 ID ;
NewData更新的数据内容。
[0033]具体而言,在索引区的首地址的基础上,增加信息ID与地址长度(4 byte)乘积的数值,来得到相应的索引地址;读取该索引地址下的内容来获得要被替换的信息地址,将该信息地址下的数据信息替换为更新的数据内容。
[0034]例如,图1的示例中索引2(即信息ID为I)的数据信息要进行内容修改时,在索引区通过求得相应的索引地址000004H=000000H+1H*4H,从中读取对应的信息地址070040H ;然后在数据信息区对该信息地址070040H中的数据信息进行内容更新,完成修改信息的操作。
[0035]如图5所示,本发明中查找信息的操作,包含:
IndexAddr=FirstIndexAddr+MasageID*4;
^IndexAddr=DataAddr;
Data=氺DataAddr;
其中:
DataAddr信息地址;
IndexAddr索引地址;
FirstIndexAddr索引区的首地址;
MessageID 信息 ID ;
Data返回的数据。
[0036]具体而言,在索引区的首地址的基础上,增加信息ID与地址长度(4 byte)乘积的数值,来得到相应的索引地址;读取该索引地址的内容来获得其中的信息地址,从数据信息区将该信息地址下的数据信息返回。
[0037]例如,图1的示例中要查找索引2 (即信息ID为I)的数据信息时,在索引区通过求得相应的索引地址000004H=000000H+1H*4H,从中读取对应的信息地址070040H ;然后从数据信息区将该信息地址070040H读取的数据信息返回,完成查找信息的操作。若要查找索引3 (即信息ID为2)的数据信息时,获得索引地址000008H处的内容为FFFFFFFFH,则返回未查到数据信息。
[0038]尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
【权利要求】
1.一种用于嵌入式系统的数据信息存储及快速查询方法,其特征在于, 在嵌入式系统的Flash中,包含: 数据信息区,其中连续存放有多个数据信息,每个数据信息保存在对应的信息地址下; 索引区,其中设有多个索引信息,每个索引信息对应的索引地址下,存放有与该索引信息对应的数据信息的信息地址; 其中,每个数据信息的序号n,从I到数据信息的总数中取值;每个索引信息的序号N,从I到索引信息的总数中取值;设每个数据信息对应的信息ID的数值为N-1 ; 查询时,从索引区中由信息ID计算获得的索引地址下,得到存放的数据信息的信息地址后,在数据信息区中获得该信息地址下存放的数据信息。
2.如权利要求1所述的方法,其特征在于, 所述索引区在Flash中所需空间的大小,通过计算索引信息的总数与地址长度的乘积来获得;所述地址长度与任意一个信息地址在索引区中所需的存储空间相对应; 所述数据信息区在Flash中所需空间的大小,通过计算数据信息的总数与每条信息的数据长度的乘积来获得。
3.如权利要求2所述的方法,其特征在于, 所述地址长度为4字节。
4.如权利要求2所述的方法,其特征在于, 进行添加信息的操作时,包含以下步骤: 在数据信息区的首地址上,增加数据信息区当前位置与数据长度乘积的数值,得到新增加数据信息的信息地址;设所述数据信息区当前位置的数值为n-Ι ; 在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址,并在该索引地址下写入新增加数据信息的信息地址。
5.如权利要求4所述的方法,其特征在于, 在前一次添加信息时获得新增加数据信息的信息地址以后,对数据信息区当前位置的数值做加一操作,使得下一次添加的数据信息增加在数据信息区的末端。
6.如权利要求2所述的方法,其特征在于, 进行删除信息的操作时,在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址,并将该索引地址下存放的内容修改为FFFFFFFHL
7.如权利要求2所述的方法,其特征在于, 进行修改信息的操作时,包含以下步骤: 在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址; 读取该索引地址下的内容来获得要被替换的数据信息的信息地址,将该信息地址下的数据信息替换为新的数据信息。
8.如权利要求2所述的方法,其特征在于, 进行查找信息的操作时,包含以下步骤: 在索引区的首地址上,增加信息ID与地址长度乘积的数值,得到相应的索引地址; 读取该索引地址下的内容来获得要查找的数据信息的信息地址; 在数据信息区中,读取并返回该信息地址下的数据信息。
9.如权利要求8所述的方法,其特征在于,查找信息时,当读取到索引地址下的内容为FFFFFFFFH时,返回未查到数据信息。
【文档编号】G06F17/30GK104462280SQ201410695272
【公开日】2015年3月25日 申请日期:2014年11月27日 优先权日:2014年11月27日
【发明者】陈兴, 陈瑜, 曾松峰, 申存海 申请人:国网上海市电力公司, 上海思敦信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1