一种嵌入式FLASH数据存储方法及系统与流程

文档序号:14835593发布日期:2018-06-30 12:16阅读:366来源:国知局
一种嵌入式FLASH数据存储方法及系统与流程

本发明涉及一种数据存储方法,尤其涉及一种嵌入式FLASH数据存储方法,并涉及采用了该嵌入式FLASH数据存储方法的嵌入式FLASH数据存储系统。



背景技术:

目前应用嵌入式存储设备的存储硬件基本上是FLASH,而存储结构上基本上采用的PC下面继承的FAT文件系统,而FAT文件系统并不适合FLASH,主要原因如下:第一、FAT的结构相对固定,目录表和文件所处的位置相对固定,在配置文件反复变化时,该配置文件所在区域会被反复擦写,但FLASH总的擦写次数有限,有些甚至只有一千次,易产生坏块,导致FLASH硬件的损坏;第二、FAT以文件结构存储配置,修改单个配置必须修改整个文件,而FLASH由于硬件原理限制,每个存储单元从1变0时容易,从0变为1时困难,FAT文件系统每次修改操作都需要对整个文件所在块进行擦除操作,受影响的区域大,擦除时间长,而擦除过程中如发生电源不稳的情况,会导致整块数据损失,出错概率高,破坏性大;第三、FAT主要是针对大容量存储,最小数据单元是簇,在只有几M字节的嵌入式小容量存储器上,极易造成空间浪费,利率效率低。



技术实现要素:

本发明所要解决的技术问题是需要提供一种能够有效降低擦除次数和故障概率的嵌入式FLASH数据存储方法,并提供采用了该嵌入式FLASH数据存储方法的嵌入式FLASH数据存储系统。

对此,本发明提供一种嵌入式FLASH数据存储方法,包括索引区和数据区,其中,所述索引区从前往后采用固定长度进行存储和管理,所述数据区从后往前采用可变长度进行存储和管理,直到所述索引区和数据区发生冲突,则通过FLASH擦除实现回收整理;所述索引区用于存储记录索引,所述数据区用于存储FLASH数据。

本发明的进一步改进在于,还包括标记头,所述标记头设置于所述索引区前。

本发明的进一步改进在于,所述标记头包括KV标记、版本号、校验和、起始地址和结束地址;所述KV标记为键名和键值的标记。

本发明的进一步改进在于,所述索引区在删除时,将索引标记位置为0,并增加一条新记录。

本发明的进一步改进在于,在首次启动挂载系统时,包括以下步骤:

步骤A1,上电开机,读取文件头;

步骤A2,根据文件头中的KV标记及校验和,验证所在位置是否是合法的KV文件系统,若是则跳转至步骤A4,若否则跳转至步骤A3;

步骤A3,格式化标记头;

步骤A4,加载得到KV文件系统的基础属性,所述基础属性包括起始地址和结束地址;

步骤A5,标记完成初始化。

本发明的进一步改进在于,在读取键值设置时,包括以下步骤:

步骤B1,判断是否完成初始化,若否则直接返回空,若是则跳转至步骤B2;

步骤B2,从索引区的起始地址开始,遍历匹配所有索引记录,判断是否找到键值名对应的索引记录,若否则直接返回空;若是则跳转至步骤B3;

步骤B3,根据索引记录中的地址与长度调取并返回键值设置值。

本发明的进一步改进在于,在写入键值设置时,包括以下步骤:

步骤C1,判断是否完成初始化,若否则实现初始化,若是则跳转至步骤C2;

步骤C2,从索引区的起始地址开始,遍历索引区,搜索所述索引区的所有索引记录;

步骤C3,生成新的键名、键值和索引;

步骤C4,判断空间是否不足,若是则通过FLASH擦除实现回收整理并返回至步骤C2,若否则跳转至步骤C5;

步骤C5,判断是否存在旧的索引记录,若是则删除旧的索引记录,若否则执行成功。

本发明的进一步改进在于,所述步骤C5中,若旧的索引记录不存在,则从数据区分配置键名及键值对应的空间,并存储键名及键值,从索引区分配空间存储索引结构,并指向数据区对应的键名与键值;若旧的索引记录存在,将旧的索引记录标记为0,并重新向数据区申请空间存储新的键名和键值,重新生成新的索引记录,其中新的键名指向旧的索引记录所对应的键名,新的键值指向新分配的键值。

本发明的进一步改进在于,通过FLASH擦除实现回收整理的过程包括以下步骤:

步骤D1,判断是否完成初始化,若否则实现初始化,若是则跳转至步骤D2;

步骤D2,从索引区的起始地址开始,遍历索引区,计算索引以及键值所占用的长度;

步骤D3,在内存分配同等大小的空间,并将索引以及键值的数据加载到内存中;

步骤D4,擦除索引区及数据区;

步骤D5,将内存中索引以及键值的数据重新整理,并写入FLASH,完成回收。

本发明还提供一种嵌入式FLASH数据存储系统,采用了如上所述的嵌入式FLASH数据存储方法。

与现有技术相比,本发明的有益效果在于:采用两端向中间延伸的存储方式,可以最大限度的利用FLASH空间,尽最大可能减少擦除次数;本发明采用索引和索引记录相结合的管理方式,把修改记录的操作变成新增记录,避免进行块擦除动作,大大加快了配置修改时间,降低了故障概率;通过顺序增长的记录方式,使得FLASH的写入得到了均衡,避免了单点反复擦写所产生的硬件疲劳,进而能够避免因为硬件疲劳而导致的FLASH损坏;并且,本发明还优选采用键名与键值对应的存储方式,从单个字节到整个文件都可以存储进单个与键名对应的键值中,并且单个修改时不影响全局,稳定性高。

附图说明

图1是本发明一种实施例的存储结构示意图;

图2是本发明一种实施例在首次启动挂载系统时的初始化工作流程示意图;

图3是本发明一种实施例的读取键值设置的工作流程示意图;

图4是本发明一种实施例的写入键值设置的工作流程示意图;

图5是本发明一种实施例的实现回收整理的工作流程示意图。

具体实施方式

下面结合附图,对本发明的较优的实施例作进一步的详细说明。

如图1所示,本例提供一种嵌入式FLASH数据存储方法,包括索引区和数据区,其中,所述索引区从前往后采用固定长度进行存储和管理,所述数据区从后往前采用可变长度进行存储和管理,直到所述索引区和数据区发生冲突,则通过FLASH擦除实现回收整理;所述索引区用于存储记录索引,所述数据区用于存储FLASH数据。

本例所述索引区的基本结构包括标记位(如删除标记)、检验和、保留位、键名地址、键名长度、键值地址和键值长度;所述键名和键值简写为KV,即key Value;所述数据区的基本结构采用紧凑的倒序存储结构,键名和键值存储于所述数据区中,根据需要的长度进行动态分配,因此,所述数据区从后往前采用可变长度进行存储和管理。

即本例采用前后向中间循环的存储结构,前后两端向中间循环存储数据,所有区域均衡写入一遍后,再执行回收;将配置修改等操作变为新增记录和删除老记录,该两种操作都只需要将对应位从1变为0,可以按字节操作,而无须从0变为1,避免进行擦除;采用KV实现键值对(键值对指的是对应的键名key和键值Value)的方式存储,键名和健值都允许任意长度,从而节省字节数。

如图1所示,本例还包括标记头,所述标记头设置于所述索引区前。所述标记头为KV标记头,所述标记头包括KV标记、版本号、校验和、起始地址和结束地址;所述KV标记为键名和键值的标记。

本例采用两端向中间增长的数据存储方式,前端做为索引区,采用固定长度管理;后端做为数据区,采用可变长度管理。平时只修改不擦除,直到索引区与数据区发生冲突时,则说明存储空间耗尽,统一回收整理,擦除FLASH。

本例采用KV(key Value)的数据管理方式,索引区存储索引记录,数据区存储数据,与现有技术不同,所述索引区在删除时,只是将索引标记位置为0,每次修改操作的时候就是将旧的索引记录标置为0,并增加一条新记录,避免直接在原地址修改数据而必须执行的擦除操作。

本例所述数据区采用倒序管理,从后往前增长,实行按字节动态分配原则,未分配的数据区初始化后均为0xFF,根据使用量分配后,写入对应的数据,所述数据区的每个片区只使用一次,直到再次整体回收擦除为止。

如图2所示,本例在首次启动挂载系统时,包括以下步骤:

步骤A1,上电开机,读取文件头;

步骤A2,根据文件头中的KV标记及校验和,验证所在位置是否是合法的KV文件系统,若是则跳转至步骤A4,若否则跳转至步骤A3;

步骤A3,格式化标记头;

步骤A4,加载得到KV文件系统的基础属性,所述基础属性包括起始地址和结束地址;

步骤A5,标记完成初始化。

如图3所示,本例在读取键值设置时,包括以下步骤:

步骤B1,判断是否完成初始化,若否则直接返回空,若是则跳转至步骤B2;

步骤B2,从索引区的起始地址开始,遍历匹配所有索引记录,判断是否找到键值名对应的索引记录,若否则直接返回空;若是则跳转至步骤B3;

步骤B3,根据索引记录中的地址与长度调取并返回键值设置值。

如图4所示,本例在写入键值设置时,包括以下步骤:

步骤C1,判断是否完成初始化,若否则实现初始化,若是则跳转至步骤C2;

步骤C2,从索引区的起始地址开始,遍历索引区,搜索所述索引区的所有索引记录;

步骤C3,生成新的键名、键值和索引;

步骤C4,判断空间是否不足,若是则通过FLASH擦除实现回收整理并返回至步骤C2,若否则跳转至步骤C5;

步骤C5,判断是否存在旧的索引记录,若是则删除旧的索引记录,若否则执行成功。

本例所述步骤C5中,若旧的索引记录不存在,说明是首次保存该键值所对应的索引记录,则从数据区分配置键名及键值对应的空间,并存储键名及键值,从索引区分配空间存储索引结构,并指向数据区对应的键名与键值;若旧的索引记录存在,说明是修改该键值所对应的索引记录,因此,将旧的索引记录标记为0(即已删除状态),并重新向数据区申请空间存储新的键名和键值,重新生成新的索引记录,其中新的键名指向旧的索引记录所对应的键名(重用),新的键值指向新分配的键值(新增)。

当写入索引或键值的过程中,发现空间不足时,需要执行回收过程。所述回收过程用于清除所有已标记删除的配置及键值。

如图5所示,本例通过FLASH擦除实现回收整理的过程包括以下步骤:

步骤D1,判断是否完成初始化,若否则实现初始化,若是则跳转至步骤D2;

步骤D2,从索引区的起始地址开始,遍历索引区,计算索引以及键值所占用的长度;

步骤D3,在内存分配同等大小的空间,并将索引以及键值的数据加载到内存中;

步骤D4,擦除索引区及数据区;

步骤D5,将内存中索引以及键值的数据重新整理,并写入FLASH,完成回收。

本例还提供一种嵌入式FLASH数据存储系统,采用了如上所述的嵌入式FLASH数据存储方法。

综上,本例采用两端向中间延伸的存储方式,可以最大限度的利用FLASH空间,尽最大可能减少擦除次数;本发明采用索引和索引记录相结合的管理方式,把修改记录的操作变成新增记录,避免进行块擦除动作,大大加快了配置修改时间,降低了故障概率;通过顺序增长的记录方式,使得FLASH的写入得到了均衡,避免了单点反复擦写所产生的硬件疲劳,进而能够避免因为硬件疲劳而导致的FLASH损坏;并且,本发明还优选采用键名与键值对应的存储方式,从单个字节到整个文件都可以存储进单个与键名对应的键值中,并且单个修改时不影响全局,稳定性高。

在验证测试过程中,本例用于展讯SC6531DA平台后,在车载定位终端类产品中,通过数十万终端的实验证明,没有再发生配置文件丢失的案例,大大提升了嵌入式产品的稳定性,具有较大的实用价值。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1