CN112463020A - 基于Flash的数据存取方法、装置及设备 - Google Patents
基于Flash的数据存取方法、装置及设备 Download PDFInfo
- Publication number
- CN112463020A CN112463020A CN201910866005.5A CN201910866005A CN112463020A CN 112463020 A CN112463020 A CN 112463020A CN 201910866005 A CN201910866005 A CN 201910866005A CN 112463020 A CN112463020 A CN 112463020A
- Authority
- CN
- China
- Prior art keywords
- data
- data area
- sector
- area
- identifier
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 92
- 238000012217 deletion Methods 0.000 claims description 80
- 230000037430 deletion Effects 0.000 claims description 80
- 238000004590 computer program Methods 0.000 claims description 15
- 230000008569 process Effects 0.000 abstract description 23
- 238000013507 mapping Methods 0.000 abstract description 10
- 230000002035 prolonged effect Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 16
- 238000013500 data storage Methods 0.000 description 5
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
Abstract
本申请实施例提供的数据存取方法,包括获取待写入的第一数据;根据存储空间的头部数据区的标识以及头部数据区所属扇区的标识,确定第一数据对应的目标数据区;其中,头部数据区为上一个数据被写入的数据区,目标数据区为头部数据区的下一个数据区,或者,目标数据区为头部数据区所属扇区的下一个扇区中的第一个数据区;将第一数据写入目标数据区,并将目标数据区作为存储空间的头部数据区。通过上述过程,实现了按照扇区、数据区的顺序依次写入数据,与现有技术相比,无需占用额外的扇区存储索引值与存储地址之间的映射关系,并且,也不需要在每次更新数据时都进行扇区擦除操作,有效降低了扇区擦除次数,从而能够延长Flash的使用寿命。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种基于Flash的数据存取方法、装置及设备。
背景技术
在嵌入式开发中,经常需要在单片机中存储数据,并且希望这些数据在单片机掉电时不丢失。目前,通常利用单片机外置闪存Flash或者内置Flash进行数据存储。
一种相关技术中,为了实现基于Flash的数据存储和检索,在向Flash中写入数据时,需要对待写入数据的编号进行计算,得到该编号对应的索引值,并记录该索引值与该数据的存储地址之间的映射关系。进一步的,在利用数据编号进行检索时,根据数据编号确定出对应的索引值,再通过查询上述的映射关系,找到该数据的存储地址,从而找到待检索数据。
然而,上述技术中,需要在Flash中占用额外的存储空间存储上述的映射关系,一方面会占用宝贵的Flash存储资源;另一方面,在数据发生更新时,需要反复修改上述映射关系,即需要对存储映射关系的存储空间进行反复擦除,影响Flash的使用寿命。
发明内容
本申请实施例提供一种基于闪存Flash的数据存取方法、装置及设备,用以延长Flash的使用寿命。
第一方面,本申请实施例提供一种基于闪存Flash的数据存取方法,所述Flash的存储空间包括依次排列的N个扇区,每个所述扇区包括依次排列的M个数据区,所述M和N为大于或者等于1的自然数,所述方法包括:
获取待写入的第一数据;
根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;
将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
可选的,每个所述扇区还包括标志区,所述标志区用于存储指示所述扇区是否已被写入数据的写入标志;所述根据所述存储空间的头部信息,确定所述第一数据对应的目标数据区之后,还包括:
根据所述目标数据区为所述目标数据区所属扇区的最后一个数据区,以及所述目标数据区所属扇区的下一个扇区的写入标志指示的是已被写入数据,将所述目标数据区所属扇区的下一个扇区中的数据擦除;
若所述目标数据区所属扇区的写入标志指示的是未被写入数据,则将所述写入标志更新为已被写入数据。
可选的,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据以及指示所述数据是否已被删除的删除标志;所述方法还包括:
接收数据删除指令,所述数据删除指令用于指示删除所有数据;
将所述头部数据区中存储的删除标志更新为已被删除,并将所述头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述头部数据区作为所述存储空间的尾部数据区,其中,所述尾部数据区用于指示所述存储空间中的第一个数据被写入的数据区。
可选的,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据、所述数据的标识、以及指示所述数据是否已被删除的删除标志;所述方法还包括:
接收数据删除指令,所述数据删除指令用于指示删除第二数据及所述第二数据之前的数据;
根据所述第二数据的标识,确定所述第二数据对应的数据区;
将所述第二数据对应的数据区中存储的删除标志更新为已被删除,并将所述第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述第二数据对应的数据区的下一个数据区作为所述尾部数据区。
可选的,所述方法还包括:
获取待检索的第三数据的标识;
根据所述头部数据区所属的第一扇区的标识以及所述尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序;
根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。
可选的,所述根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区,包括:
执行确定中间扇区操作,所述确定中间扇区操作包括:根据各所述有效扇区的顺序,确定出所述有效扇区中的中间扇区;
执行第一比较操作,所述第一比较操作包括:判断所述第三数据的标识是否等于所述中间扇区中的第一个数据区中存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之前的扇区,在所述第三数据的标识大于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之后的扇区;
重复执行所述确定中间扇区操作和所述第一比较操作,直至确定得到所述第三数据对应的数据区;或者,直至所述有效扇区的个数为1时,确定得到所述第三数据对应的扇区,并根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区。
可选的,所述根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区,包括:
将所述第三数据对应的扇区中被写入数据的数据区作为有效数据区;
执行确定中间数据区操作,所述确定中间数据区操作包括:根据各所述有效数据区的顺序,确定出中间数据区;
执行第二比较操作,所述第二比较操作包括:判断所述第三数据的标识是否等于所述中间数据区存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间数据区中存储的数据的标识时,将所述有效数据区更新为所述中间数据区之前的数据区,在所述第三数据的标识大于所述中间数据区中存储的数据的标识时,将所有有效数据区更新为所述中间数据区之后的数据区;
重复执行所述确定中间数据区操作和所述第二比较操作,直至确定得到所述第三数据对应的数据区。
可选的,所述获取待写入的第一数据之前,还包括:
遍历所述N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区,并根据所述头部数据区所属的扇区中的各数据区是否被写入数据,找到所述头部数据区;
从所述头部数据区所属的扇区开始向前搜索,根据各扇区的标志区中存储的写入标志和/或删除标志,确定出尾部数据区所属的扇区,并根据所述尾部数据区所属的扇区中的各数据区是否被写入数据和/或各所述数据区中存储的删除标志,确定出所述尾部数据区。
第二方面,本申请实施例提供一种基于闪存Flash的数据存取装置,所述Flash的存储空间包括依次排列的N个扇区,每个所述扇区包括依次排列的M个数据区,所述M和N为大于或者等于1的自然数,所述装置包括:
获取模块,用于获取待写入的第一数据;
写入模块,用于根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;
所述写入模块,还用于将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
可选的,每个所述扇区还包括标志区,所述标志区用于存储指示所述扇区是否已被写入数据的写入标志,所述写入模块还用于:
根据所述目标数据区为所述目标数据区所属扇区的最后一个数据区,以及所述目标数据区所属扇区的下一个扇区的写入标志指示的是已被写入数据,将所述目标数据区所属扇区的下一个扇区中的数据擦除;
若所述目标数据区所属扇区的写入标志指示的是未被写入数据,则将所述写入标志更新为已被写入数据。
可选的,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据以及指示所述数据是否已被删除的删除标志;
所述获取模块,还用于接收数据删除指令,所述数据删除指令用于指示删除所有数据;
所述装置还包括删除模块,所述删除模块用于:
将所述头部数据区中存储的删除标志更新为已被删除,并将所述头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述头部数据区作为所述存储空间的尾部数据区,其中,所述尾部数据区用于指示所述存储空间中的第一个数据被写入的数据区。
可选的,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据、所述数据的标识、以及指示所述数据是否已被删除的删除标志;
所述获取模块,还用于接收数据删除指令,所述数据删除指令用于指示删除第二数据及所述第二数据之前的数据;
所述装置还包括删除模块,所述删除模块用于:
根据所述第二数据的标识,确定所述第二数据对应的数据区;
将所述第二数据对应的数据区中存储的删除标志更新为已被删除,并将所述第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述第二数据对应的数据区的下一个数据区作为所述尾部数据区。
可选的,所述获取模块,还用于获取待检索的第三数据的标识;
所述装置还包括检索模块,所述检索模块用于:
据所述头部数据区所属的第一扇区的标识以及所述尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序;
根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。
可选的,所述检索模块具体用于:
执行确定中间扇区操作,所述确定中间扇区操作包括:根据各所述有效扇区的顺序,确定出所述有效扇区中的中间扇区;
执行第一比较操作,所述第一比较操作包括:判断所述第三数据的标识是否等于所述中间扇区中的第一个数据区中存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之前的扇区,在所述第三数据的标识大于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之后的扇区;
重复执行所述确定中间扇区操作和所述第一比较操作,直至确定得到所述第三数据对应的数据区;或者,直至所述有效扇区的个数为1时,确定得到所述第三数据对应的扇区,并根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区。
可选的,所述检索模块具体用于:
将所述第三数据对应的扇区中被写入数据的数据区作为有效数据区;
执行确定中间数据区操作,所述确定中间数据区操作包括:根据各所述有效数据区的顺序,确定出中间数据区;
执行第二比较操作,所述第二比较操作包括:判断所述第三数据的标识是否等于所述中间数据区存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间数据区中存储的数据的标识时,将所述有效数据区更新为所述中间数据区之前的数据区,在所述第三数据的标识大于所述中间数据区中存储的数据的标识时,将所有有效数据区更新为所述中间数据区之后的数据区;
重复执行所述确定中间数据区操作和所述第二比较操作,直至确定得到所述第三数据对应的数据区。
可选的,所述装置还包括初始化模块,所述初始化模块用于:
遍历所述N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区,并根据所述头部数据区所属的扇区中的各数据区是否被写入数据,找到所述头部数据区;
从所述头部数据区所属的扇区开始向前搜索,根据各扇区的标志区中存储的写入标志和/或删除标志,确定出尾部数据区所属的扇区,并根据所述尾部数据区所属的扇区中的各数据区是否被写入数据和/或各所述数据区中存储的删除标志,确定出所述尾部数据区。
第三方面,本申请实施例提供一种基于闪存Flash的数据存取设备,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行如第一方面任一项所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序被处理器执行时实现如第一方面任一项所述的方法。
本申请实施例提供的基于Flash的数据存取方法、装置及设备,该方法包括获取待写入的第一数据;根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。通过上述过程,实现了按照扇区、数据区的顺序依次写入数据,与现有技术相比,无需占用额外的扇区存储索引值与存储地址之间的映射关系,并且,也不需要在每次更新数据时都进行扇区擦除操作,有效降低了扇区擦除次数,从而能够延长Flash的使用寿命。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的Flash存储空间的示意图;
图2A为本申请实施例提供的扇区的结构示意图;
图2B为本申请实施例提供的数据格式的示意图;
图3为本申请一实施例提供的数据存取方法的流程示意图;
图4为本申请另一实施例提供的数据存取方法的流程示意图;
图5为本申请又一实施例提供的数据存取方法的流程示意图;
图6为本申请又一实施例提供的数据存取方法的流程示意图;
图7为本申请又一实施例提供的数据存取方法的流程示意图;
图8为本申请实施例提供的一种存储空间状态的示意图;
图9为本申请又一实施例提供的数据存取方法的流程示意图;
图10为本申请实施例提供的数据存取装置的结构示意图;
图11为本申请实施例提供的数据存取设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
Flash存储器,又称为闪存,是一种长寿命的非易失性的存储器,特点是在没有电流供应的条件下也能够长久的保存数据,即断电后数据不会丢失。由于单片机的存储资源有限,在单片机嵌入式开发中,通常利用单片机内置Flash或者外置Flash进行数据存储。
图1为本申请实施例提供的Flash存储空间的示意图。如图1所示,Flash存储空间按照扇区组织,即存储空间包括N个扇区,所述N个扇区按照地址空间的顺序依次排列。按照地址空间的顺序为扇区进行编号。假设N=512,即存储空间一共有512个扇区,扇区0为起始扇区,扇区511为结束扇区。整个存储空间可以看成一个先进先出(First Input FirstOutput,FIFO)的循环队列。从起始扇区0开始顺序写入数据,扇区0写满后写扇区1,扇区1写满后写扇区2,依次类推。
Flash的最小擦除单位为扇区。当整个存储空间都写满后即写到最后一个扇区511时,会擦除扇区0的数据。当再有数据需要写入,又会从扇区0开始写入。按照上述过程不断循环。
由于Flash的寿命跟擦除次数有关,本申请实施例中,只有写完整个存储空间即512个扇区时,扇区0才会被擦除一次,与现有技术相比,无需占用额外的扇区存储索引值与存储地址之间的映射关系,并且,也不需要在每次更新数据时都进行扇区擦除操作,有效降低了扇区擦除次数,从而能够延长Flash的使用寿命。
为了便于描述后续的数据存取方法,下面先结合图2A和图2B对扇区的结构进行介绍。
图2A为本申请实施例提供的扇区的结构示意图,如图2A所示,每个扇区包括标志区和依次排列的M个数据区。
可选的,所述标志区用于存储指示所述扇区是否已被写入数据的写入标志。示例性的,假设写入标志的长度为1字节,该写入标志默认为0xff,表示该扇区未被写入任何数据。当写入标志为0时,表示该扇区已被写入至少一个数据。也就是说,当向某个扇区中写入数据时,若该扇区的标志区中存储的写入标志为0xff,则先将该写入标志更新为0,然后再向该扇区中写入数据。可以理解的,根据扇区的标志区中存储的写入标志,可以快速判断出该扇区中是否已被写入数据。
可选的,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志。示例性的,假设删除标志的长度为1字节,该删除标志默认为0xff,表示该扇区中不存在被删除的数据。当删除标志为0时,表示该扇区中存在被删除数据。也就是说,当需要删除某个扇区中的全部或者部分数据时,只需要将该扇区的标志区中存储的删除标志修改为0即可。可以理解的,根据扇区的标志区中存储的删除标志,可以快速判断出该扇区中是否存在被删除的数据。
各数据区用于存储数据。本申请实施例中,各数据区的大小相同,即被写入的数据采用定长数据格式。图2B为本申请实施例提供的数据格式的示意图。如图2B所示,各数据区中存储的数据格式包括:数据头、数据内容和校验和。其中,数据头中用于存储数据的标识,包括但不限于:时间信息、序号、固定字符等。数据内容为实际写入的数据,可以为日志信息,还可以为参数数值等。校验和用于校验该条数据是否正确,防止出现由于掉电等原因导致的数据未完全写入或者写入错误的情况。
可选的,所述数据区中还用于存储指示其中存储的数据是否已被删除的删除标志。示例性的,假设该删除标志的长度为1字节,当删除标志为非0时,表示该数据区中存储的数据未被删除。当删除标志为0时,表示该数据区中存储的数据已被删除。也就是说,当需要删除某个数据区中的数据时,只需要将该数据区中存储的删除标志修改为0即可。可以理解的,根据数据区中存储的删除标志,可以快速判断出该数据区中存储的数据是否已被删除。
需要说明的是,可以采用数据头中的任一字节存储删除标志。例如,将数据头中的第一字节记录删除标志。当需要删除某个数据区中的数据时,将该数据区中数据头的第一字节修改为0即可。
可以理解的,扇区中存储的写入标志、删除标志,以及数据区中存储的删除标志,可以为任意长度,例如:1比特、1字节、多个字节等,本实施例对此不作具体限定,上述举例中仅以1字节为例进行示例。
下面以具体地实施例对本申请的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。
本申请实施例提供的数据存取方法可以由数据存取装置执行,该数据存储装置可以为软件和/或硬件的形式。该数据存储装置可以设置在单片机中,用于对单片机的内置Flash或者外置Flash进行数据存取。
图3为本申请一实施例提供的数据存取方法的流程示意图。本实施例描述的是数据写入过程。如图3所示,本实施例的方法包括:
S301:获取待写入的第一数据。
S302:根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区。
S303:将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
本申请实施例中,按照扇区和数据区的顺序依次写入数据。每个扇区内部,按照数据区的顺序依次写入,当一个扇区写满后,开始写入下一个扇区。示例性的,假设存储空间中包括N=512个扇区(依次为扇区0至扇区511),每个扇区中包括M=10个数据区(依次为数据区0至数据区9)。将扇区0作为起始扇区,当获取到第1个待写入数据时,写入扇区0的数据区0;当获取到第2个待写入数据时,写入扇区0的数据区1;以此类推,按照数据区的顺序依次写入数据。当获取到第10个待写入数据时,写入扇区0的数据区9;当获取到第11个待写入数据时,写入扇区1的数据区1,当获取到第12个待写入数据时,写入扇区1的数据区2;以此类推。当扇区511写满后,将扇区0作为扇区511的下一个扇区,循环上述的写入过程。
为了便于确定当前待写入数据需要写入的目标数据区,本申请实施例中,每次写入数据后,对存储空间的头部数据区的位置进行记录。头部数据区是指最近一条数据被写入的数据区。
示例性的,针对第k个待写入数据,写入扇区n的数据区m之后,将扇区n的数据区m作为存储空间的头部数据区。将头部数据区对应的扇区的标识和数据区的标识进行记录。这样,当获取到第k+1个待写入数据后,根据头部数据区的位置,确定出待写入的目标数据区的位置。具体的,若数据区m不是扇区n中的最后一个数据区,则将扇区n中数据区m的下一个数据区m+1作为目标数据区。若数据区m为扇区n中的最后一个数据区,则将扇区n的下一个扇区n+1中的第一个数据区作为目标数据区。进一步的,将第k+1个数据写入上述目前数据区之后,将存储空间的头部数据区更新为该目标数据区,以便为下一个数据的写入过程。
可选的,本申请实施例还可以对存储空间的尾部数据区的位置进行记录。尾部数据区是指最早一条数据(即第一个数据)被写入的数据区。示例性的,当写入第1个数据后,将该数据被写入的数据区作为尾部数据区,后续当出现删除或者擦除操作时,对尾部数据区的位置进行更新维护。其中,对尾部数据区的位置进行更新维护的过程可以参见后续实施例的详细描述,本实施例对此不作详细说明。
可以理解的,本申请实施例中,每条数据的长度是固定的,当扇区大小确定后,每个扇区对应的数据区的个数也是固定的,因此,可以根据数据区的标识确定出是否是扇区的最后一个数据区。
本申请实施例中,每条数据信息都是定长的,且按照扇区、数据区的顺序依次写入,因此,一旦起始扇区、结束扇区、扇区大小,每条数据信息的大小确定下来,整个存储空间所能存储的数据信息的数量也确定下来了。只要给定存储的数据所在的扇区的标识和扇区内的数据区的标识,就可以定位到任意一条数据。
本申请实施例提供的数据存取方法,包括获取待写入的第一数据;根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。通过上述过程,实现了按照扇区、数据区的顺序依次写入数据,与现有技术相比,无需占用额外的扇区存储索引值与存储地址之间的映射关系,并且,也不需要在每次更新数据时都进行扇区擦除操作,有效降低了扇区擦除次数,从而能够延长Flash的使用寿命。
图4为本申请另一实施例提供的数据存取方法的流程示意图。本实施例对图3所示的实施例进行进一步细化。本实施例中,每个扇区的标志区中用于存储写入标志和删除标志。如图4所示,本实施例的方法包括:
S401:获取待写入的第一数据。
S402:根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区。
其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区。
S403:根据所述目标数据区为所述目标数据区所属扇区的最后一个数据区,以及所述目标数据区所属扇区的下一个扇区的写入标志指示的是已被写入数据,将所述目标数据区所属扇区的下一个扇区中的数据擦除。
S404:若所述目标数据区所属扇区的写入标志指示的是未被写入数据,则将所述写入标志更新为已被写入数据。
S405:将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
本申请实施例中,S401、S402以及S405的具体实施方式与图3所示的实施例类似,此处不再赘述。在图3所示实施例的基础上,本实施例中,在确定出目标数据之后,执行S403,判断目标数据区是否为其所属扇区的最后一个数据区,若否,则继续执行S404;若是,则进一步判断目标数据区所属扇区的下一个扇区的写入标志指示的是否未已被写入数据,若否,则继续执行S404;若是,则说明整个存储空间已写满,因此,需要对目标数据区所属扇区的下一个扇区进行擦除,以便后续数据能够被写入。
可以理解的,将目标数据区所属扇区的下一个扇区进行擦除之后,还可能需要对存储空间的尾部数据区的位置进行更新。具体的,若被擦除的扇区是尾部数据区所在的扇区时,需要对尾部数据区的位置进行更新;若被擦除的扇区不是尾部数据区所在的扇区,则无需对尾部数据区的位置进行更新。示例性的,假设尾部数据区为扇区3的数据区3,当前待写入数据对应的目标数据区为扇区2的数据区9,由于目标数据区为扇区2的最后一个数据区,并且扇区3中已被写入数据,因此,将扇区3进行擦除。进一步的,将扇区3擦除后,将扇区4的数据区0作为尾部数据区。
S404中,可以理解的,当该扇区中被写入第一个数据时,对该扇区的标志区中的写入标志进行更新,以记录该扇区的写入状态。需要说明的是,本实施例中,S404和S405的执行顺序可以互换。也就是说,可以在将第一数据写入目标数据区之前,判断目标数据区所属扇区的写入标志是否需要更新,也可以在将第一数据写入目标数据区之后,判断目标数据区所属扇区的写入标志是否需要更新。
本申请实施例中,通过S403的判断过程,保证了整个存储空间的所有扇区中,总是存在至少一个扇区的最后一个数据区未被写入数据。这样,在确定头部数据区时,可以通过搜索各扇区的最后一个数据区是否被写入数据来找到头部数据区的位置。
图5为本申请又一实施例提供的数据存取方法的流程示意图。本实施例的方法描述的是数据删除的过程。如图5所示,本实施例的方法,包括:
S501:接收数据删除指令,所述数据删除指令用于指示删除所有数据。
S502:将所述头部数据区中存储的删除标志更新为已被删除,并将所述头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据。
S503:将所述头部数据区作为所述存储空间的尾部数据区。
本申请实施例中,对数据删除的过程利用了Flash中的写0有效的特性。具体的,Flash扇区被擦除后,扇区内所有字节会变成0xff,即每个bit会变成1。而写入操作可以将任意一个bit变成0,但是0不能变成1。只有对整个扇区进行擦除操作才能恢复为1。因此,本申请实施例中,当需要删除数据时,通过对指定位置的删除标志写0,对存储空间的尾部数据区的位置进行更新即可。
图5示例的是删除所有数据的情况。当需要删除所有数据时,只需要将头部数据区中存储的删除标志更新为已被删除(即,将头部数据区中的删除标志更新为0),并将头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据(即,将头部数据区所属扇区的标志区中存储的删除标志更新为0)。并且,对尾部数据区的位置进行更新,将头部数据区同时作为尾部数据区。
示例性的,假设当前尾部数据区为扇区0的数据区0,头部数据区为扇区5的数据区5,若需要删除所有数据,则本实施例中,直接将扇区5的数据区5中存储的删除标志更新为0,并将扇区5的标志区中存储的删除标志更新为0。然后,将扇区5的数据区5作为新的尾部数据区即可。
图6为本申请又一实施例提供的数据存取方法的流程示意图。本实施例的方法描述的是数据删除的过程。如图6所示,本实施例的方法,包括:
S601:接收数据删除指令,所述数据删除指令用于指示删除第二数据及所述第二数据之前的数据。
S602:根据所述第二数据的标识,确定所述第二数据对应的数据区。
S603:将所述第二数据对应的数据区中存储的删除标志更新为已被删除,并将所述第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据。
S604:将所述第二数据对应的数据区的前一个数据区作为所述头部数据区。
与图5所示的实施例类似,本实施例中对数据删除过程依然通过写0实现。本实施例适用于删除某条数据之前数据。示例性的,假设需要删除第二数据及其之前的数据,则需要首先确定出第二数据对应的数据区,将第二数据对应的数据区中存储的删除标志更新为已被删除(即,将删除标志更新为0),并且,将第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据(即,将删除标志更新为0)。可以理解的,将第二数据及其之前的数据删除之后,需要对存储空间的尾部数据区的位置进行更新,将第二数据对应的数据区的下一个数据区作为尾部数据区。
其中,确定出第二数据对应的数据区,可以采用后续实施例中的数据检索过程,本实施例对此不作赘述。
示例性的,假设当前尾部数据区为扇区0的数据区0,头部数据区为扇区5的数据区5,若需要删除扇区4的数据区4及其之前的数据,则本实施例中,直接将扇区4的数据区4中存储的删除标志更新为0,并将扇区4的标志区中存储的删除标志更新为0,然后,将扇区4的数据区5作为新的尾部数据区即可。这样,存储空间中存储的有效数据位于扇区4的数据区5至扇区5的数据区5之间。
本申请图5和图6所示的实施例中,删除操作不需要对扇区进行擦除,只需要对指定数据区中的删除标志以及该指定数据区所属扇区的标志区中存储的删除标志进行写0操作,进一步减少了扇区擦除次数,提高了Flash的使用寿命。
现有技术中,当需要对某个数据进行检索时,只能对存储空间中存储的每条数据进行逐条检索,导致检索效率较低。为了解决上述问题,本申请实施例在上述存储方式的基础上,还提供一种快速检索指定数据的方法。
图7为本申请又一实施例提供的数据存取方法的流程示意图。图7示例的是数据检索的过程,即根据数据的标识,确定出该数据被写入的数据区的过程。如图7所示,本实施例的方法,包括:
S701:获取待检索的第三数据的标识。
S702:根据所述头部数据区所属的第一扇区的标识以及所述尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序。
S703:根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。
其中,本实施例中的S702和S703,也可以作为图6所示实施例中S602的一种可能的实施方式。
本实施例中,根据第三数据的标识,对第三数据进行检索,即确定出第三数据被写入的数据区。其中,第三数据的标识可以为图2B所示的数据头中的存储内容,例如可以为时间信息,也可以为序号等。下面以时间信息为例进行描述,即需要检索出标识为某个指定时间的第三数据。
其中,S701中,根据存储空间的头部数据区所属的第一扇区的标识,以及尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序。其中,有效扇区是指实际存储了数据的扇区。例如,尾部数据区为扇区0的数据区0,头部数据区为扇区5的数据区5,则将扇区0作为尾部扇区,扇区5作为头部扇区,将扇区0至扇区5称为有效扇区。
可以理解的,由于将整个存储空间看成是一个循环FIFO,有可能会出现头部扇区在前、尾部扇区在后的情况。图8为本申请实施例提供的一种存储空间状态的示意图。如图8中的左侧图所示,阴影部分的扇区为存储了数据的有效扇区。将整个存储空间按照存储的先后顺序进行排列,得到尾部扇区至头部扇区之间的有效扇区,如图8中的右侧图所示。
由于已经知道头部扇区和尾部扇区的位置,及有扇区的总数,因此,可以确定出从尾部扇区开始至头部扇区结束的有效扇区的个数N,还可以为按照被写入数据的先后顺序各有效扇区重新生成索引号,如图8中右侧图所示的索引号(0至N-1)。扇区标识与索引号之间,只需要通过一个简单的转换公式即可相互转换,比如扇区索引号1对应的是标识为X+1的尾部扇区。另需注意当求出的扇区的标识大于等于结束扇区标识(如图8中的511)时需要减去结束扇区标识(511)。这样根据扇区索引号重新排列后,存储空间的所有数据又按时间顺序排列了。
得到如图8右侧图所示的有效扇区的顺序后,可以根据第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。可以采用二分法对第三数据进行搜索。
示例性的,执行确定中间扇区操作,所述确定中间扇区操作包括:根据各所述有效扇区的顺序,确定出所述有效扇区中的中间扇区;执行第一比较操作,所述第一比较操作包括:判断所述第三数据的标识是否等于所述中间扇区中的第一个数据区中存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之前的扇区,在所述第三数据的标识大于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之后的扇区。
重复执行所述确定中间扇区操作和所述第一比较操作,直至确定得到所述第三数据对应的数据区;或者,直至所述有效扇区的个数为1时,确定得到所述第三数据对应的扇区,并根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区。
其中,根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区,可以继续采用二分法进行搜索,具体包括:
将所述第三数据对应的扇区中被写入数据的数据区作为有效数据区。执行确定中间数据区操作,所述确定中间数据区操作包括:根据各所述有效数据区的顺序,确定出中间数据区;执行第二比较操作,所述第二比较操作包括:判断所述第三数据的标识是否等于所述中间数据区存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间数据区中存储的数据的标识时,将所述有效数据区更新为所述中间数据区之前的数据区,在所述第三数据的标识大于所述中间数据区中存储的数据的标识时,将所有有效数据区更新为所述中间数据区之后的数据区。重复执行所述确定中间数据区操作和所述第二比较操作,直至确定得到所述第三数据对应的数据区。
本申请实施例中,通过采用二分法进行指定数据的搜索,通常只需要经过几步搜索过程即可检索到指定数据所在的扇区的标识和数据区的标识,大大缩短了检索时间,提高了检索效率。
图9为本申请又一实施例提供的数据存取方法的流程示意图。本实施例的方法描述的是存储空间的初始化的过程。本实施例的方法可以在上述任一实施例之前执行。如图9所示,本实施例的方法,包括:
S901:遍历所述N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区,并根据所述头部数据区所属的扇区中的各数据区是否被写入数据,找到所述头部数据区。
由于本申请实施例的存储方式保证了存储空间中总是存在至少一个扇区中的最后一个数据区中未写入数据,因此,可以通过遍历N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区。例如:若N个扇区的标志区中存储的写入标志均为0xff,则说明N个扇区均未写入数据,则可以将其中的任意扇区的任意数据区作为头部数据区。若扇区x的标志区存储的写入标志为0,且最后一个数据区未被写入数据,则将扇区x中的被写入数据的最后的数据区作为头部数据区。
S902:从所述头部数据区所属的扇区开始向前搜索,根据各扇区的标志区中存储的写入标志和/或删除标志,确定出尾部数据区所属的扇区,并根据所述尾部数据区所属的扇区中的各数据区是否被写入数据和/或各所述数据区中存储的删除标志,确定出所述尾部数据区。
通过S901找到头部数据区之后,往前进行搜索,根据各扇区的标志区进行搜索,若找到标志区中的写入标志为0xff的扇区,则将该扇区的下一个扇区作为尾部数据区所属的扇区;或者,若找到标志区中的删除标志为0的扇区,则将该扇区或者该扇区的下一个扇区作为尾部数据区所属的扇区;或者,直到搜索到头部数据区所属的扇区,则将该扇区的下一个扇区作为尾部数据区所属的扇区。
类似的,确定出尾部数据区所属的扇区后,在该扇区内对各数据区进行搜索,根据各数据区是否被写入数据以及各数据区中存储的删除标志,确定出尾部数据区的位置。
本申请实施例中,由于各扇区是按顺序依次存储的,并且在扇区内各数据区也是按顺序依次存储的,因此,存储空间的初始化只需要按照上述过程对整个存储空间进行搜索,找到头部数据区和尾部数据区,这样,后续的数据存取过程可以根据头部数据区和尾部数据的位置进行操作。通过将存储空间运用FIFO的思想组织各扇区,提高了单片机对Flash数据存取、检索的效率;无需占用额外的扇区存储索引值与存储地址之间的映射关系,并且,也不需要在每次更新数据时都进行扇区擦除操作,有效降低了扇区擦除次数,从而能够延长Flash的使用寿命。
图10为本申请实施例提供的数据存取装置的结构示意图。如图10所示,本实施例提供的数据存取装置1000,包括:获取模块1001和写入模块1002。
其中,获取模块1001,用于获取待写入的第一数据;
写入模块1002,用于根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;
所述写入模块1002,还用于将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
可选的,每个所述扇区还包括标志区,所述标志区用于存储指示所述扇区是否已被写入数据的写入标志,所述写入模块1002还用于:
根据所述目标数据区为所述目标数据区所属扇区的最后一个数据区,以及所述目标数据区所属扇区的下一个扇区的写入标志指示的是已被写入数据,将所述目标数据区所属扇区的下一个扇区中的数据擦除;
若所述目标数据区所属扇区的写入标志指示的是未被写入数据,则将所述写入标志更新为已被写入数据。
可选的,如图10所示,本实施例提供的数据存取装置1000,还可以包括删除模块1003;所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据以及指示所述数据是否已被删除的删除标志;
所述获取模块1001,还用于接收数据删除指令,所述数据删除指令用于指示删除所有数据;
所述删除模块1003用于:
将所述头部数据区中存储的删除标志更新为已被删除,并将所述头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述头部数据区作为所述存储空间的尾部数据区,其中,所述尾部数据区用于指示所述存储空间中的第一个数据被写入的数据区。
可选的,如图10所示,本实施例提供的数据存取装置1000,还可以包括删除模块1003;所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据、所述数据的标识、以及指示所述数据是否已被删除的删除标志;
所述获取模块1001,还用于接收数据删除指令,所述数据删除指令用于指示删除第二数据及所述第二数据之前的数据;
所述删除模块1003用于:
根据所述第二数据的标识,确定所述第二数据对应的数据区;
将所述第二数据对应的数据区中存储的删除标志更新为已被删除,并将所述第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述第二数据对应的数据区的下一个数据区作为所述尾部数据区。
可选的,如图10所示,本实施例提供的数据存取装置1000还可以包括检索模块1004;所述获取模块1001,还用于获取待检索的第三数据的标识;
所述检索模块1004用于:
据所述头部数据区所属的第一扇区的标识以及所述尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序;
根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。
可选的,所述检索模块1004具体用于:
执行确定中间扇区操作,所述确定中间扇区操作包括:根据各所述有效扇区的顺序,确定出所述有效扇区中的中间扇区;
执行第一比较操作,所述第一比较操作包括:判断所述第三数据的标识是否等于所述中间扇区中的第一个数据区中存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之前的扇区,在所述第三数据的标识大于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之后的扇区;
重复执行所述确定中间扇区操作和所述第一比较操作,直至确定得到所述第三数据对应的数据区;或者,直至所述有效扇区的个数为1时,确定得到所述第三数据对应的扇区,并根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区。
可选的,所述检索模块1004具体用于:
将所述第三数据对应的扇区中被写入数据的数据区作为有效数据区;
执行确定中间数据区操作,所述确定中间数据区操作包括:根据各所述有效数据区的顺序,确定出中间数据区;
执行第二比较操作,所述第二比较操作包括:判断所述第三数据的标识是否等于所述中间数据区存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间数据区中存储的数据的标识时,将所述有效数据区更新为所述中间数据区之前的数据区,在所述第三数据的标识大于所述中间数据区中存储的数据的标识时,将所有有效数据区更新为所述中间数据区之后的数据区;
重复执行所述确定中间数据区操作和所述第二比较操作,直至确定得到所述第三数据对应的数据区。
可选的,如图10所示,本实施例提供的数据存取装置1000,还可以包括初始化模块1005,用于:
遍历所述N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区,并根据所述头部数据区所属的扇区中的各数据区是否被写入数据,找到所述头部数据区;
从所述头部数据区所属的扇区开始向前搜索,根据各扇区的标志区中存储的写入标志和/或删除标志,确定出尾部数据区所属的扇区,并根据所述尾部数据区所属的扇区中的各数据区是否被写入数据和/或各所述数据区中存储的删除标志,确定出所述尾部数据区。
本实施例提供的数据存取装置,可用于执行上述任一方法实施例中的技术方案,其实现原理和技术效果类似,此处不再赘述。
图11为本申请实施例提供的数据存取设备的结构示意图。本实施例提供的数据存取设备可以为单片机。如图11所示,本实施例提供的数据存取设备1100,包括:处理器1101以及存储器1102;其中,存储器1102,用于存储计算机程序;处理器1101,用于执行存储器存储的计算机程序,以实现上述实施例中的数据存取方法。具体可以参见前述方法实施例中的相关描述。
可选地,存储器1102既可以是独立的,也可以跟处理器1101集成在一起。
当所述存储器1102是独立于处理器1101之外的器件时,所述数据存取设备1100还可以包括:总线1103,用于连接所述存储器1102和处理器1101。
本实施例提供的数据存取设备,可用于执行上述任一方法实施例中的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,所述计算机程序用于实现如上任一方法实施例中的技术方案。
本申请实施例还提供一种芯片,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行上述任一方法实施例中的技术方案。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(Application Specific Integrated Circuits,简称:ASIC)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (11)
1.一种基于闪存Flash的数据存取方法,其特征在于,所述Flash的存储空间包括依次排列的N个扇区,每个所述扇区包括依次排列的M个数据区,所述M和N为大于或者等于1的自然数,所述方法包括:
获取待写入的第一数据;
根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;
将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
2.根据权利要求1所述的方法,其特征在于,每个所述扇区还包括标志区,所述标志区用于存储指示所述扇区是否已被写入数据的写入标志;所述根据所述存储空间的头部信息,确定所述第一数据对应的目标数据区之后,还包括:
根据所述目标数据区为所述目标数据区所属扇区的最后一个数据区,以及所述目标数据区所属扇区的下一个扇区的写入标志指示的是已被写入数据,将所述目标数据区所属扇区的下一个扇区中的数据擦除;
若所述目标数据区所属扇区的写入标志指示的是未被写入数据,则将所述写入标志更新为已被写入数据。
3.根据权利要求2所述的方法,其特征在于,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据以及指示所述数据是否已被删除的删除标志;所述方法还包括:
接收数据删除指令,所述数据删除指令用于指示删除所有数据;
将所述头部数据区中存储的删除标志更新为已被删除,并将所述头部数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述头部数据区作为所述存储空间的尾部数据区,其中,所述尾部数据区用于指示所述存储空间中的第一个数据被写入的数据区。
4.根据权利要求2所述的方法,其特征在于,所述标志区还用于存储指示所述扇区中是否存在被删除数据的删除标志,所述数据区用于存储数据、所述数据的标识、以及指示所述数据是否已被删除的删除标志;所述方法还包括:
接收数据删除指令,所述数据删除指令用于指示删除第二数据及所述第二数据之前的数据;
根据所述第二数据的标识,确定所述第二数据对应的数据区;
将所述第二数据对应的数据区中存储的删除标志更新为已被删除,并将所述第二数据对应的数据区所属扇区的标志区中存储的删除标志更新为存在被删除数据;
将所述第二数据对应的数据区的下一个数据区作为所述尾部数据区。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
获取待检索的第三数据的标识;
根据所述头部数据区所属的第一扇区的标识以及尾部数据区所属的第二扇区的标识,获取由所述第二扇区开始至所述第一扇区结束的各有效扇区的顺序;
根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区。
6.根据权利要求5所述的方法,其特征在于,所述根据所述第三数据的标识,以及各所述有效扇区的顺序,确定出所述第三数据对应的数据区,包括:
执行确定中间扇区操作,所述确定中间扇区操作包括:根据各所述有效扇区的顺序,确定出所述有效扇区中的中间扇区;
执行第一比较操作,所述第一比较操作包括:判断所述第三数据的标识是否等于所述中间扇区中的第一个数据区中存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之前的扇区,在所述第三数据的标识大于所述中间扇区中的第一个数据区中存储的数据的标识时,将所述有效扇区更新为所述中间扇区之后的扇区;
重复执行所述确定中间扇区操作和所述第一比较操作,直至确定得到所述第三数据对应的数据区;或者,直至所述有效扇区的个数为1时,确定得到所述第三数据对应的扇区,并根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区。
7.根据权利要求6所述的方法,其特征在于,所述根据所述第三数据的标识,以及所述第三数据对应的扇区中各数据区的顺序,确定出所述第三数据对应的数据区,包括:
将所述第三数据对应的扇区中被写入数据的数据区作为有效数据区;
执行确定中间数据区操作,所述确定中间数据区操作包括:根据各所述有效数据区的顺序,确定出中间数据区;
执行第二比较操作,所述第二比较操作包括:判断所述第三数据的标识是否等于所述中间数据区存储的数据的标识,若是,则确定得到所述第三数据对应的数据区;若否,则在所述第三数据的标识小于所述中间数据区中存储的数据的标识时,将所述有效数据区更新为所述中间数据区之前的数据区,在所述第三数据的标识大于所述中间数据区中存储的数据的标识时,将所有有效数据区更新为所述中间数据区之后的数据区;
重复执行所述确定中间数据区操作和所述第二比较操作,直至确定得到所述第三数据对应的数据区。
8.根据权利要求3至7任一项所述的方法,其特征在于,所述获取待写入的第一数据之前,还包括:
遍历所述N个扇区,根据各扇区的标志区中存储的写入标志以及各扇区的最后一个数据区中存储的写入标志,确定出所述头部数据区所属的扇区,并根据所述头部数据区所属的扇区中的各数据区是否被写入数据,找到所述头部数据区;
从所述头部数据区所属的扇区开始向前搜索,根据各扇区的标志区中存储的写入标志和/或删除标志,确定出尾部数据区所属的扇区,并根据所述尾部数据区所属的扇区中的各数据区是否被写入数据和/或各所述数据区中存储的删除标志,确定出所述尾部数据区。
9.一种基于闪存Flash的数据存取装置,其特征在于,所述Flash的存储空间包括依次排列的N个扇区,每个所述扇区包括依次排列的M个数据区,所述M和N为大于或者等于1的自然数,所述装置包括:
获取模块,用于获取待写入的第一数据;
写入模块,用于根据所述存储空间的头部数据区的标识以及所述头部数据区所属扇区的标识,确定所述第一数据对应的目标数据区;其中,所述头部数据区为上一个数据被写入的数据区,所述目标数据区为所述头部数据区的下一个数据区,或者,所述目标数据区为所述头部数据区所属扇区的下一个扇区中的第一个数据区;
所述写入模块,还用于将所述第一数据写入所述目标数据区,并将所述目标数据区作为所述存储空间的头部数据区。
10.一种基于闪存Flash的数据存取设备,其特征在于,包括:存储器、处理器以及计算机程序,所述计算机程序存储在所述存储器中,所述处理器运行所述计算机程序执行如权利要求1至8任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910866005.5A CN112463020A (zh) | 2019-09-09 | 2019-09-09 | 基于Flash的数据存取方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910866005.5A CN112463020A (zh) | 2019-09-09 | 2019-09-09 | 基于Flash的数据存取方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112463020A true CN112463020A (zh) | 2021-03-09 |
Family
ID=74807578
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910866005.5A Pending CN112463020A (zh) | 2019-09-09 | 2019-09-09 | 基于Flash的数据存取方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463020A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113395135A (zh) * | 2021-05-06 | 2021-09-14 | 埃森智能科技(深圳)有限公司 | 数据通信方法、装置及计算机可读存储介质 |
CN113721847A (zh) * | 2021-08-18 | 2021-11-30 | 深圳市京泉华智能电气有限公司 | 一种基于扇区的数据写入方法及相关设备 |
CN114138177A (zh) * | 2021-09-29 | 2022-03-04 | 成都嘉程智宇信息技术有限公司 | 一种用于提高物联网设备闪存资源利用率的数据存储方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6154808A (en) * | 1997-10-31 | 2000-11-28 | Fujitsu Limited | Method and apparatus for controlling data erase operations of a non-volatile memory device |
US7167944B1 (en) * | 2000-07-21 | 2007-01-23 | Lexar Media, Inc. | Block management for mass storage |
CN101290621A (zh) * | 2007-04-17 | 2008-10-22 | 上海申瑞电力科技股份有限公司 | 安全数字卡的存储检索方法 |
CN102063379A (zh) * | 2010-12-28 | 2011-05-18 | 天津市亚安科技电子有限公司 | 一种flash存储器的数据存储方法 |
CN106293532A (zh) * | 2016-08-10 | 2017-01-04 | 广东佳禾声学科技有限公司 | 一种Flash数据储存方法 |
-
2019
- 2019-09-09 CN CN201910866005.5A patent/CN112463020A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6154808A (en) * | 1997-10-31 | 2000-11-28 | Fujitsu Limited | Method and apparatus for controlling data erase operations of a non-volatile memory device |
US7167944B1 (en) * | 2000-07-21 | 2007-01-23 | Lexar Media, Inc. | Block management for mass storage |
CN101290621A (zh) * | 2007-04-17 | 2008-10-22 | 上海申瑞电力科技股份有限公司 | 安全数字卡的存储检索方法 |
CN102063379A (zh) * | 2010-12-28 | 2011-05-18 | 天津市亚安科技电子有限公司 | 一种flash存储器的数据存储方法 |
CN106293532A (zh) * | 2016-08-10 | 2017-01-04 | 广东佳禾声学科技有限公司 | 一种Flash数据储存方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113395135A (zh) * | 2021-05-06 | 2021-09-14 | 埃森智能科技(深圳)有限公司 | 数据通信方法、装置及计算机可读存储介质 |
CN113721847A (zh) * | 2021-08-18 | 2021-11-30 | 深圳市京泉华智能电气有限公司 | 一种基于扇区的数据写入方法及相关设备 |
CN114138177A (zh) * | 2021-09-29 | 2022-03-04 | 成都嘉程智宇信息技术有限公司 | 一种用于提高物联网设备闪存资源利用率的数据存储方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10007468B2 (en) | Method and apparatus for erasing data in data section in flash memory | |
US7725646B2 (en) | Method of using a flash memory for a circular buffer | |
US9146691B2 (en) | Method for managing commands in command queue, memory control circuit unit and memory storage apparatus | |
CN101983376B (zh) | 访问装置、信息记录装置、信息记录系统、文件管理方法和程序 | |
US9176865B2 (en) | Data writing method, memory controller, and memory storage device | |
CN112463020A (zh) | 基于Flash的数据存取方法、装置及设备 | |
US8516184B2 (en) | Data updating using mark count threshold in non-volatile memory | |
WO2016041401A1 (zh) | 向缓存中写入数据的方法及装置 | |
WO2015096698A1 (zh) | 一种Flash的数据写入和读取方法 | |
CN110134645B (zh) | 文件系统存储管理方法、读取方法、管理装置和读取装置 | |
CN115292266A (zh) | 一种基于存储器的高可靠日志存储方法 | |
CN111966281B (zh) | 数据储存装置与数据处理方法 | |
CN110209349B (zh) | 数据处理的方法及终端设备 | |
CN112558868A (zh) | 一种配置数据存储的方法和装置及设备 | |
CN107015764B (zh) | Nand flash的数据处理方法、装置和一种Nand flash | |
CN112395260B (zh) | 一种数据存储方法及介质 | |
JP3826115B2 (ja) | 記憶装置、メモリ管理方法及びプログラム | |
CN108304331B (zh) | 基于NorFlash的环形队列式数据存储方法及装置 | |
CN111708487A (zh) | 一种数据存储的方法、装置及计算机存储介质 | |
JP3978720B2 (ja) | データ記憶方法 | |
US11436105B2 (en) | Data processing method and memory controller utilizing the same | |
CN112162933B (zh) | 一种闪存的数据结构、存储方法、读取方法及转移方法 | |
KR100688463B1 (ko) | 물리 메모리의 데이터 기록 및 삭제 방법 | |
CN109753240B (zh) | 一种采用垃圾回收机制的数据存储方法 | |
CN117891392A (zh) | 固态硬盘的压缩数据的管理方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210309 |
|
RJ01 | Rejection of invention patent application after publication |