一种定长数据在flash的存储方法
【技术领域】
[0001] 本发明设及数据存储技术领域,尤其设及一种定长数据在FLA甜的存储方法。
【背景技术】
[0002] 对于嵌入式设备而言,闪存是很常见的一种存储媒介,闪存的英文名称是FLASH MEMORY, -般简称为FLA甜,它属于内存器件的一种,是一种不挥发性闪存。闪存在没有电流 供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,运项特性正是闪存得W成 为各类便携数字设备的存储介质的基础。
[0003] 非易失性存储器FLA甜的擦写次数是有限的,通常NANDFLA甜中每个扇区的最大 擦写次数是一百万次,而NORFLA甜的擦写次数是十万次,而且只能整个扇区擦除,如果某 个扇区擦写次数超过寿命次数,容易导致出现坏块或者整块FLASH报废。所谓坏块并不是 整个扇区都坏了,可能只是扇区中一位或某几位损坏。在嵌入式电子产品中,往往需要将系 统关键数据进行实时保存到FLASH中,W确保突然断电等异常发生时保存的数据仍实时有 效。
[0004] 在数据存储设计时需要考虑FLASH的损耗平衡,即要考虑FLASH所有扇区都能均 匀被使用,而不是有的扇区一直被读写,有的扇区则空闲着,有效延长FLASH的寿命。目前 的FLASH均衡算法基本都采取地址映射扇区擦写标记或依靠文件系统的均衡算法等方式 来达到地址均衡擦写的目的,涵盖面太广,对于程序、数据等存储均适用,虽然提高了使用 寿命,但运样往往会造成效率低下、存储器碎片增加,利用率低等问题。
【发明内容】
[0005] 有鉴于此,本发明实施例提供一种定长数据在FLA甜的存储方法,W解决现有技 术中的技术问题。
[0006] 本发明实施例提供了一种定长数据在FLA甜的存储方法,包括:
[0007] 预先给需要保存的数据结构分配总存储空间,并在所述总存储空间中对所述数据 结构中的每个定长子数据结构分配互不重叠的子存储空间;
[0008] 获取所述定长子数据结构的特征信息,所述特征信息包括所述定长子数据结构在 内存中的起始地址和数据长度;
[0009] 初始化所述定长子数据结构存储参数,所述存储参数包括所述定长子数据结构存 储起始地址、占用扇区数、当前数据扇区序号、地址偏移下标索引值W及校验值;
[0010] 定义所述定长子数据结构在存储空间的存储规则;
[0011] 根据所述定长子数据结构的特征信息、所述定长子数据结构存储参数W及所述存 储规则,将所述定长子数据结构存储至所述子存储空间中。
[0012] 本发明实施例提供的一种定长数据在FLA甜的存储方法,通过预先给定长数据结 构分配互不重叠的存储空间,然后获取所述定长数据结构的特征信息,初始化所述定长子 数据结构存储参数,按照定义的存储规则将所述定长数据结构存储至预先分配好的存储空 间中。方便有效地提高了FLASH的存储寿命,减少FLASH碎片,在突然断电的情况下能恢复 最后一次有效操作时保存的数据,确保数据不丢失。同时在产品测试阶段还可W通过读取 存储区域的擦写次数,对擦写过于频繁的数据结构存储区域可W适当的增加存储空间,W 减少擦写次数。
【附图说明】
[0013] 通过阅读参照W下附图所作的对非限制性实施例所作的详细描述,本发明的其它 特征、目的和优点将会变得更明显:
[0014] 图1是本发明实施例一提供的一种定长数据在FLA甜的存储方法流程图;
[0015]图2是本发明实施例一提供的一种定长数据在FLASH的存储方法中存储空间结构 不意图;
[0016]图3是本发明实施例一提供的一种定长数据在FLA甜的存储方法中另一种存储空 间结构示意图;
[0017]图4是本发明实施例二提供的一种定长数据在FLASH的存储方法流程图;
[001引图5是本发明实施例S提供的一种定长数据在FLA甜的存储方法流程图。
【具体实施方式】
[0019] 下面结合附图和实施例对本发明作进一步的详细说明。可W理解的是,此处所描 述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便 于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0020] 实施例一
[0021] 图1是本发明实施例一提供的一种定长数据在FLA甜的存储方法流程图,如图1 所示,该方法包括:
[0022] S110、预先给需要保存的数据结构分配总存储空间,并在所述总存储空间中对所 述数据结构中的每个定长子数据结构分配互不重叠的子存储空间;
[0023] 示例性的,所述定长子数据结构的数据长度为固定值,最小为16个字节,最大为 128个字节,运样保存数据时可W损失最少的碎片空间。所述总存储空间W扇区为单位,可 W是整片FLA甜,也可W是连续的若干个扇区。
[0024] 进一步的,所述总存储空间中的第一个扇区和最后一个扇区分别为总起始扇区和 总结束扇区,所述第i个子存储空间中的第一个扇区和最后一个扇区分别为起始扇区i和 结束扇区i。
[00巧]示例性的,所述总起始扇区可W标记为DEF_StartSEC,所述总结束扇区可W标记 为DEF_EndSEC,所述起始扇区i可W标记为化taSecStr_i,所述结束扇区i可W标记为 DataSe证nti。i的取值可W是1至255的任意正整数,鉴于255是特殊值,运里i的取值 优选为1至254。进一步的,总起始扇区 < 起始扇区i<结束扇区i<总结束扇区,即:DEF_ Sta;rtSEC<DataSecSt;r_i<DataSecEnd_i<DEF_End沈C。进一步的,起始扇区i< 起始扇区 i+l<结束扇区i+l<总结束扇区,示例性的,若i+1用j表示,则第j个数据的起始扇区和结 束扇区,需满足W下条件:DataSecE;nd_i<DataSecSt;r_j<DataSecEnd_j<DEF_EndWC。
[0026] S120、获取所述定长子数据结构的特征信息,所述特征信息包括所述定长子数据 结构在内存中的起始地址和数据长度;
[0027] 示例性的,标记需要保存的第i个定长子数据结构的内存地址为pRamAdd[i]W及 数据长度为Length[i]。
[0028]S130、初始化所述定长子数据结构存储参数,所述存储参数包括所述定长子数据 结构存储起始地址、占用扇区数、当前数据扇区序号、地址偏移下标索引值W及校验值;
[0029] 示例性的,可W使用参数初始化函数初始化所述定长子数据结构存储参数,参数 初始化函数用于做参数检查,W及初始化存储区域:写入数据标志、擦写次数、擦除本数据 结构的存储区域W便数据写入。
[0030]uin1:8F&_SaveDataParaInit(uintl6StrSec,// 起始扇区
[0031]uintl6EndSec,//结束扇区
[0032]ST_SaveDataPara*pstSaveDataPara)// 数据结构参数指针 [003引函数输出结果:
[0034]
[00巧]本函数将会对pstSaveDataPara数据结构进行初始化,并写入Flash。
[0036]S140、定义所述定长子数据结构在存储空间的存储规则;
[0037] 示例性的,图2是本发明实施例一提供的一种定长数据在FLA甜的存储方法中存 储空间结构示意图,如图2所示,所述数据存储规则包括:
[0038] 起始扇区i和结束扇区i:第1、2个地址保存数据有效标志,第3-5个地址保存擦 写次数,第6-8个地址保存擦写次数的取反数据,第9个地址开始保存数据的索引值;所述 索引值与扇区偏移地址的关系为:扇区偏移地址等于索引值加8。优选的,所述索引值可W 用n表示,所述扇区偏移地址可W用k表示,k=n+8,其中n的取值可W是1至254的任意 正整数。
[0039] 进一步的,图3是本发明实施例一提供的一种定长数据在FLA甜的存储方法中另 一种存储空间结构示意图,如图3所示,所述数据存储规则包括:
[0040] 起始扇区和结束扇区外的其他扇区:第1个地址开始保存索引值,所述索引值与 扇区偏移地址的关系为:扇区偏移地址等于索引值,即k=n。
[0041] 进一步的,所述数据有效标志优选为0xAC01、0xAC02……,其中0x01、0x02表示数 据序号,即i值,OxAC为标志位。
[0042] 进一步的,所述擦写次数为起始扇区i到结束扇区i区间的擦写次数。
[0043] 进一步的,对于第i个定长子数据结构在扇区内的存储规则,还存在W下数据关 系:
[0044] 扇区内存储区大小可W用Size表示,扇区大小可W用SecSIZE表示,对于起始 扇区和结束扇区有Size=SecSIZE-8,对于起始扇区和结束扇区外的其他扇区有Size= SecSIZE。SecSIZE-般为 4096 字节,地址序号为 1-SecSIZE。
[004引要存储的数据:l-m,M个字节,其中M表示第i个数据的长度。
[0046] 单个数据块空间:l-y,Y个字节,其中Y等于M向上取整到4的倍数。
[0047] 存储地址索引值:l-n,N个字节,其中N= (Size-Size/Y)/Y,有余数时只取整数。
[0048] 某扇区的碎片空间:S个字节,其中S=Size-N*灯+1) +灯-M)*N。
[0049] 地址索引值跟其对应的数据的偏移地址Add[n]的关系:
[0050] 起始扇区和结束扇区:Add[n]=邮Y+N+8 ;
[005。 起始扇区和结束扇区外的其他扇区:Add[n] =n巧+N。
[005引地址索引值跟其索引值本身存储地址化dd[n]的关系:
[00閲起始扇区和结束扇区:化dd[n] =n+8 ;
[0054] 起始扇区和结束扇区外的其他扇区:化dd[n] =n。
[00巧]S150、根据所述定长子数据结构的特征信息、所述定长子数据结构存储参数W及 所述存储规则,将所述定长子数据结构存储至所述子存储空间中。
[0056] 优选的,读取、保存数据时使用的数据结构体可W为W下形式:
[0057]
[0059] 需要保存的数据结构示意:
[0060]
[0061] 一共Sect化t个扇区,每个扇区中有N组数据索引,每组数据Y个字节,其中M个字 节为数据字节,Y-M的空间