本发明涉及数据存储领域,尤其涉及一种历史数据存储管理方法。
背景技术:
历史数据存储可以分为内部存储(自己存储)和外部存储(借用专用设备存储)。
对高级嵌入式设备,比如手机,平板电脑等,使用的是内部存储方式,这类设备本身具备较大的存储空间,性能较强的mcu,所以都会采用文件系统,但是这种方案对于硬件平台要求较高,软硬件复杂,系统庞大,成本高,不适合普通单片机系统。
外部存储方式使用专用数据记录设备dtu(俗称抓包盒),比如记录can报文:ecu通过can总线把需要记录的数发出来,dtu接收后把数据全部存起来,这种方式需要实时外接dtu设备,一般调试阶段使用,不适合产品发布后使用,除此之外,这种方式系统集成度低,dtu设备成本较高,外部还需要额外的通讯连接,不能将历史数据存储功能集成到系统中。
技术实现要素:
本发明主要解决了上述问题,提供了一种硬件要求低、不需要文件管理系统、支持系统随机掉电不崩溃的历史数据存储管理方法。
本发明解决其技术问题所采用的技术方案是,一种历史数据存储管理方法,包括以下步骤:
s1:初始化存储介质;
s2:在存储介质中查找执行本次写入操作的写入逻辑地址;
s3:将数据写入到查找到的逻辑地址中,并更新下一次写入操作的写入逻辑地址;
s4:重复步骤s3直至所有数据写入完成。
能够直接基于单片机和flash实现,不需要复杂的文件管理系统,不需要依靠tf卡或emmc。
作为上述方案的一种优选方案,所述步骤s2中查找写入逻辑地址包括以下步骤:
s21:确定目标存储介质擦除最小单元;
s22:根据目标存储介质擦除最小单元中的数据存储情况确定写入逻辑地址。
作为上述方案的一种优选方案,所述步骤s21中确定目标存储介质擦除最小单元包括以下步骤:
s211:从存储区第一个存储介质擦除最小单元开始依次向后查找存储页写满标志为有效的存储介质擦除最小单元;若找到,则进入步骤s213;若没找到,则进入步骤s212;
s212:设置第一个存储介质擦除最小单元为目标存储介质擦除最小单元;
s213:从找到的存储介质擦除最小单元开始依次向后查找存储页写满标志为无效的存储介质擦除最小单元;若找到,则设置该存储页写满标志为无效的存储介质擦除最小单元为目标存储介质擦除最小单元;若没找到,则判定为非法情况,跳过步骤s22,擦除所有存储介质擦除最小单元,以第一个存储介质擦除最小单元的起始处为写入逻辑地址。存储介质中的存储介质擦除最小单元为循环使用,当存储介质存满时,存储地址指针会重新回到起始地址,此时每存满一个存储介质擦除最小单元后会擦除下一个存储介质擦除最小单元的数据,即在存储介质中必然存在一个存储介质擦除最小单元的存储页写满标志为无效,当出现所有存储介质擦除最小单元中的存储页写满标志均为有效时,则表明系统出错,无法保证数据的准确性,通过清除数据使系统回归正常。
作为上述方案的一种优选方案,所述步骤s22中确定写入逻辑地址包括以下步骤:
s221:在目标存储介质擦除最小单元中依次查找存储记录数据有效标志为无效的记录数据存储组织;若没找到,则判定在上一次写入操作中,在写完目标存储介质擦除最小单元中最后一个记录数据存储组织后掉电,擦除目标存储介质擦除最小单元的下一个存储介质擦除最小单元并更新目标存储介质擦除最小单元的存储页写满标志为有效,以被擦除的存储介质擦除最小单元的起始处为写入逻辑地址;若找到,则进入步骤s222;
s222:判断找到的记录数据存储组织中用于存储数据的部分是否为空,若是,找到的记录数据存储组织的地址即为写入逻辑地址;若否,则判定在上一次写入操作中,在向该记录数据存储组织写入数据时掉电,更新该记录数据存储组织的存储记录数据有效标志为有效,以下一个记录数据存储组织的地址为写入逻辑地址。根据记录数据存储组织的存储记录数据有效标志和数据存储部分的存储状态,判断上一次写入操作中是否发生掉电事件,若发生掉电事件则对该次掉电事件造成的存储记录数据有效标志或存储页写满标志缺失进行弥补。
作为上述方案的一种优选方案,所述步骤s3中更新下一次写入操作的写入逻辑地址具体包括:判断当前写入地址是否为存储介质擦除最小单元中的最后一个记录数据存储组织,若是,则擦除下一个存储介质擦除最小单元,更新下一次写入地址为被擦除的存储介质擦除最小单元的第一个记录数据存储组织;若否,则更新下一次写入地址为下一个记录数据存储组织。
作为上述方案的一种优选方案,所述步骤s3中将数据写入到查找到的逻辑地址中前,若存储介质上一次进行了对存储介质擦除最小单元的擦除操作,则将被擦除的存储介质擦除最小单元的上一个存储介质擦除最小单元的存储页写满标志设为有效。擦除存储介质擦除最小单元的时间较长,为了优化执行时间片段,减少mcu占用,在执行擦除指令后不再等待数据擦除完成在更新存储页写满标志,而是在进行下一次写入操作时被擦除的存储介质擦除最小单元的上一个存储介质擦除最小单元的存储页写满标志进行更新,先擦除在更新被擦除的存储介质擦除最小单元的上一个存储介质擦除最小单元的存储页写满标志时为了避免擦除失败导致所处存储介质擦除最小单元的存储页写满标志均为有效的情况发生,最终导致所有数据丢失。
作为上述方案的一种优选方案,还包括当前存储的数据条目数计算方法,当前存储的数据条目数计算方法包括以下步骤:
s51:在确定查找到写入逻辑地址后,判断当前写入逻辑地址的上一个记录数据存储组织的存储记录数据有效标志是否有效;若否,则数据条目数为0;若是,则进入步骤s52;
s52:判断当前存储介质擦除最小单元的下一个存储介质擦除最小单元的存储页写满标志是否有效,若是,则数据条目数等于总记录数;若否,则当前条目数为当前写入逻辑地址到存储介质起始地址中记录数据存储组织的个数。
作为上述方案的一种优选方案,所述总记录数计算公式如下:
其中,page_size存储介质擦除最小单元的大小,page_head为存储介质擦除最小单元的页状态存储组织的大小,pack_size为记录数据存储组织的大小,page_num为存储介质擦除最小单元的个数。直接以所有物理存储空间为总条目数,在换页的时候会导致已存储条目数小于总条目数,因此在计算存储最大存储空间减去一个存储介质擦除最小单元。
作为上述方案的一种优选方案,还包括数据查询方法,数据查询方法包括以下步骤:
s61:传入要读取的数据编号;
s62:计算可用数据包,暂停数据写入,根据数据编号读取数据。
本发明的优点是:在进行写入逻辑地址确认时,对上一次写入操作过程进行掉电确认,弥补因掉电发生的标记缺少,能够在随机掉电的情况下确保系统稳定运行;在存储介质存满时,先擦除下一个存储介质擦除最小单元再在下次写入时修改被擦除的存储介质擦除最小单元的上一个存储介质擦除最小单元的存储页写满标志,能够优化mcu执行时间片段,提高系统性能,避免因擦除失败出现非法情况导致所有数据丢失。
附图说明
图1为实施例中page的一种存储组织图。
图2为实施例中历史数据存储管理方法的一种流程示意图。
图3为实施例中确定目标存储介质擦除最小单元的一种流程示意图。
图4为实施例中确定写入逻辑地址的一种流程示意图。
图5为实施例中当前存储的数据条目数计算方法的一种流程示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步的说明。
实施例:
本实施例一种历史数据存储管理方法,基于mcu和flash实现,不需要复杂的文件管理系统,也不需要专用的tf卡和emmc。在本实施例中以page为存储介质擦除最小单元,page结构如图1所示,page中各个组成部分含义及作用如下:
page_head:页状态存储组织;
page_status:1字节,存储页写满标志,对于存储容量较大的芯片可以优化性能;
dummy:用于编程最小单元对齐;
pack:记录数据存储组织;
pack_status:1字节,存储记录数据有效标志;
dummy:用于编程最小单元对齐;
data:记录数据;
crc16:2字节,校验;
dummy:用于编程最小单元对齐;
dummy1:不够存储一个pack,丢弃。
本实施中的历史数据存储管理方法如图2所示,包括以下步骤:
s1:初始化存储介质;
s2:在存储介质中查找执行本次写入操作的写入逻辑地址,具体包括:
s21:确定目标存储介质擦除最小单元,存储介质擦除最小单元即为page,如图3所示:
s211:从存储区第一个page开始依次向后查找存储页写满标志(page_status)为有效的存储介质擦除最小单元;若找到,则进入步骤s213;若没找到,则进入步骤s212;
s212:设置第一个page为目标存储介质擦除最小单元;
s213:从找到的page开始依次向后查找page_status为无效的page;若找到,则设置该page_status为无效的page为目标存储介质擦除最小单元;若没找到,则判定为非法情况,跳过步骤s22,擦除所有page,以第一个page的起始处为写入逻辑地址。;
s22:根据目标存储介质擦除最小单元中的数据存储情况确定写入逻辑地址,如图4所示:
s221:在目标存储介质擦除最小单元中依次查找存储记录数据有效标志(pack_status)为无效的记录数据存储组织(pack);若没找到,则判定在上一次写入操作中,在写完目标存储介质擦除最小单元中最后一个pack后掉电,擦除目标存储介质擦除最小单元的下一个page并更新目标存储介质擦除最小单元的存储页写满标志为有效,以被擦除的page的起始处为写入逻辑地址;若找到,则进入步骤s222;
s222:判断找到的pack中用于存储数据的部分是否为空,即判断pack中data部分是否为空,若是,找到的pack的地址即为写入逻辑地址;若否,则判定在上一次写入操作中,在向该pack写入数据时掉电,更新该pack的pack_status为有效,以下一个pack的地址为写入逻辑地址。
s3:若存储介质上一次进行了对page的擦除操作,则将被擦除的page的上一个page的page_status设为有效,将数据写入到查找到的逻辑地址中,在写入数据时,先根据data计算crc16,再写入dadt、crc16和dummy部分数据,然后写入pack_status和dummy部分数据,写入完成后更新下一次写入操作的写入逻辑地址,更新下一次写入操作的写入逻辑地址具体包括:判断当前写入地址是否为存储介质擦除最小单元中的最后一个记录数据存储组织,若是,则擦除下一个存储介质擦除最小单元,更新下一次写入地址为被擦除的存储介质擦除最小单元的第一个记录数据存储组织;若否,则更新下一次写入地址为下一个记录数据存储组织;crc16用于校验数据,dummy用于编程最小单元对齐。
s4:重复步骤s3直至所有数据写入完成。
本实施例一种历史数据存储管理方法还包括当前存储的数据条目数计算方法和数据查询方法,当前存储的数据条目数计算方法,如图5所示,包括以下步骤:
s51:在确定查找到写入逻辑地址后,判断当前写入逻辑地址的上一个pack的pack_status是否有效;若否,则数据条目数为0;若是,则进入步骤s52;
s52:判断当前page的下一个page的page_status是否有效,若是,则数据条目数等于总记录数;若否,则当前条目数为当前写入逻辑地址到存储介质起始地址中pack的个数,总记录数计算公式如下:
其中,page_size存储介质擦除最小单元的大小,page_head为存储介质擦除最小单元的页状态存储组织的大小,pack_size为记录数据存储组织的大小,page_num为存储介质擦除最小单元的个数。
数据查询方法包括以下步骤:
s61:传入要读取的数据编号read_index,read_index小于当前存储的数据条目数;
s62:计算数据编号read_index中可用数据包,暂停数据写入,根据数据编号读取数据。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
1.一种历史数据存储管理方法,其特征是:包括以下步骤:
s1:初始化存储介质;
s2:在存储介质中查找执行本次写入操作的写入逻辑地址;
s3:将数据写入到查找到的逻辑地址中,并更新下一次写入操作的写入逻辑地址;
s4:重复步骤s3直至所有数据写入完成。
2.根据权利要求1所述的一种历史数据存储管理方法,其特征是:所述步骤s2中查找写入逻辑地址包括以下步骤:
s21:确定目标存储介质擦除最小单元;
s22:根据目标存储介质擦除最小单元中的数据存储情况确定写入逻辑地址。
3.根据权利要求2所述的一种历史数据存储管理方法,其特征是:所述步骤s21中确定目标存储介质擦除最小单元包括以下步骤:
s211:从存储区第一个存储介质擦除最小单元开始依次向后查找存储页写满标志为有效的存储介质擦除最小单元;若找到,则进入步骤s213;若没找到,则进入步骤s212;
s212:设置第一个存储介质擦除最小单元为目标存储介质擦除最小单元;
s213:从找到的存储介质擦除最小单元开始依次向后查找存储页写满标志为无效的存储介质擦除最小单元;若找到,则设置该存储页写满标志为无效的存储介质擦除最小单元为目标存储介质擦除最小单元;若没找到,则判定为非法情况,跳过步骤s22,擦除所有存储介质擦除最小单元,以第一个存储介质擦除最小单元的起始处为写入逻辑地址。
4.根据权利要求2或3所述的一种历史数据存储管理方法,其特征是:所述步骤s22中确定写入逻辑地址包括以下步骤:
s221:在目标存储介质擦除最小单元中依次查找存储记录数据有效标志为无效的记录数据存储组织;若没找到,则判定在上一次写入操作中,在写完目标存储介质擦除最小单元中最后一个记录数据存储组织后掉电,擦除目标存储介质擦除最小单元的下一个存储介质擦除最小单元并更新目标存储介质擦除最小单元的存储页写满标志为有效,以被擦除的存储介质擦除最小单元的起始处为写入逻辑地址;若找到,则进入步骤s222;
s222:判断找到的记录数据存储组织中用于存储数据的部分是否为空,若是,找到的记录数据存储组织的地址即为写入逻辑地址;若否,则判定在上一次写入操作中,在向该记录数据存储组织写入数据时掉电,更新该记录数据存储组织的存储记录数据有效标志为有效,以下一个记录数据存储组织的地址为写入逻辑地址。
5.根据权利要求1所述的一种历史数据存储管理方法,其特征是:所述步骤s3中更新下一次写入操作的写入逻辑地址具体包括:判断当前写入地址是否为存储介质擦除最小单元中的最后一个记录数据存储组织,若是,则擦除下一个存储介质擦除最小单元,更新下一次写入地址为被擦除的存储介质擦除最小单元的第一个记录数据存储组织;若否,则更新下一次写入地址为下一个记录数据存储组织。
6.根据权利要求1或5所述的一种历史数据存储管理方法,其特征是:所述步骤s3中将数据写入到查找到的逻辑地址中前,若存储介质上一次进行了对存储介质擦除最小单元的擦除操作,则将被擦除的存储介质擦除最小单元的上一个存储介质擦除最小单元的存储页写满标志设为有效。
7.根据权利要求1所述的一种历史数据存储管理方法,其特征是:还包括当前存储的数据条目数计算方法,当前存储的数据条目数计算方法包括以下步骤:
s51:在确定查找到写入逻辑地址后,判断当前写入逻辑地址的上一个记录数据存储组织的存储记录数据有效标志是否有效;若否,则数据条目数为0;若是,则进入步骤s52;
s52:判断当前存储介质擦除最小单元的下一个存储介质擦除最小单元的存储页写满标志是否有效,若是,则数据条目数等于总记录数;若否,则当前条目数为当前写入逻辑地址到存储介质起始地址中记录数据存储组织的个数。
8.根据权利要求7所述的一种历史数据存储管理方法,其特征是:所述总记录数计算公式如下:
其中,page_size存储介质擦除最小单元的大小,page_head为存储介质擦除最小单元的页状态存储组织的大小,pack_size为记录数据存储组织的大小,page_num为存储介质擦除最小单元的个数。
9.根据权利要求1所述的一种历史数据存储管理方法,其特征是:还包括数据查询方法,数据查询方法包括以下步骤:
s61:传入要读取的数据编号;
s62:计算可用数据包,暂停数据写入,根据数据编号读取数据。
技术总结