CN109918024B - 存储管理方法、装置、单片机设备和可读存储介质 - Google Patents
存储管理方法、装置、单片机设备和可读存储介质 Download PDFInfo
- Publication number
- CN109918024B CN109918024B CN201910148056.4A CN201910148056A CN109918024B CN 109918024 B CN109918024 B CN 109918024B CN 201910148056 A CN201910148056 A CN 201910148056A CN 109918024 B CN109918024 B CN 109918024B
- Authority
- CN
- China
- Prior art keywords
- sector
- state
- bitmap
- read
- write
- 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.)
- Active
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本申请涉及一种存储管理方法、装置、单片机设备和可读存储介质。所述方法包括:从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,读位图和写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。采用本方法能够在断电等异常情况下,从各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图,获知存储空间中的数据存储情况,以进行读写操作。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种存储管理方法、装置、单片机设备和可读存储介质。
背景技术
在万物互联的时代,智能家居作为物联网最简单的切入点,各公司纷纷布局,推出各自的智能家居产品。其中,在智能家居产品中一般使用单片机作为控制核心;具体地,使用单片机片内Flash(闪存)存储数据便可降低成本,减小产品体积,加大竞争力。单片机片内Flash一般是用来存放运行代码的,然后可使用剩余空间存储数据。使用Flash写入数据之前,需要先擦除原本数据;而擦除是以物理扇区为单位操作的。那么写入数据时,需要先把整个物理扇区的数据读到单片机的RAM(random access memory,随机存取存储器,单片机的内存)缓存,再把要写入的数据更新到RAM缓存对应位置,然后擦除整个物理扇区,最后把RAM缓存的数据写回Flash。还有,Flash擦除次数是有限,一般为10万次,擦除超过极限后对应物理扇区便会失效。
传统的一种技术方案中,首次使用写入数据时,保证所有扇区都已擦除;然后按物理地址从小到大的顺序写入每笔数据,直到Flash写满;使用头指针(head)保存最先存入数据的物理地址(起始位置),尾指针(tail)保存最晚存入数据的物理地址(终止位置);头尾指针均保存在RAM;当Flash存满后,再要写新数据,则会把头指针指向物理地址所在物理扇区擦除,头指针指向下一个物理扇区,释放一个物理扇区来存新的数据;存满再擦除下一个物理扇区;依次循环擦除扇区,写入新数据。这种循环使用Flash,每个物理扇区擦除次数都是一样的,延长了Flash使用寿命。
然而,当遇到断电情况时,上述方法存在易丢失数据的起始位置和终止位置等诸多问题。
发明内容
基于此,有必要针对上述技术问题,提供一种能够应对断电等异常状况的存储管理方法、装置、单片机设备和可读存储介质。
第一方面,一种存储管理方法,所述方法包括:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
在其中一个实施例中,在所述存储空间中数据以循环队列结构存储,所述根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作,包括:
根据所述各逻辑扇区的读位图和写位图,确定所述存储空间中循环队列的队尾所在的队尾扇区,以及队头所在的队头扇区;
根据所述队尾扇区,对所述存储空间进行入队操作;
或者,
根据所述队头扇区,对所述存储空间进行出队操作。
在其中一个实施例中,所述根据所述各逻辑扇区的读位图和写位图,确定所述存储空间中循环队列的队尾所在的队尾扇区,以及队头所在的队头扇区,包括:
根据所述各逻辑扇区的读位图和写位图,当存在逻辑扇区满足队尾条件时,确定所述逻辑扇区为队尾扇区;当存在逻辑扇区满足队头条件时,确定所述逻辑扇区为队头扇区;当所有逻辑扇区的写位图中各物理块的写状态均为未写状态时,确定起始逻辑扇区为队头扇区和队尾扇区;
其中,所述队尾条件包括:
所述逻辑扇区的写位图中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态;或,所述逻辑扇区的写位图中各物理块的写状态均为未写状态且所述逻辑扇区的上一逻辑扇区的写位图中各物理块的写状态均为已写状态;
所述队头条件包括:
所述逻辑扇区的读位图中部分物理块的读状态为已读状态且部分物理块的读状态为未读状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、所述逻辑扇区的写位图中部分或全部物理块的写状态为已写状态且所述逻辑扇区的上一逻辑扇区中各物理块的写状态均为未写状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、除所述逻辑扇区以外的其它所有逻辑扇区的写位图中各物理块的写状态均为已写状态、所述逻辑扇区中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态。
在其中一个实施例中,所述方法还包括:
从所述存储空间的各逻辑扇区的预设备份读写位图地址中读取各逻辑扇区的备份读位图和备份写位图。
在其中一个实施例中,所述根据所述队尾扇区,对所述存储空间进行入队操作,包括:
根据所述队尾扇区的写位图和备份写位图,确定所述队尾扇区中满足可写条件的一个可写物理块;
根据所述队尾扇区的扇区号以及所述可写物理块在所述队尾扇区中的排序,确定所述可写物理块的写入起始地址;
根据所述写入起始地址,向所述可写物理块中写入入队数据;
其中,所述可写条件包括:所述队尾扇区的写位图中所述物理块的写状态为未写状态、备份写位图中所述物理块的写状态为未写状态,且所述物理块的数据区已擦除。
在其中一个实施例中,所述根据所述队尾扇区的写位图,确定所述队尾扇区中满足可写条件的一个可写物理块,包括:
从所述队尾扇区的写位图中最低位对应的物理块开始至最高有效位对应的物理块为止,确定所述队尾扇区中满足可写条件的第一个可写物理块。
在其中一个实施例中,所述方法还包括:
当所述队尾扇区中不存在满足所述可写条件的可写物理块时,判断所述队尾扇区的下一个逻辑扇区是否为队头扇区;
当所述队尾扇区的下一个逻辑扇区是队头扇区时,确定队列已满;
当所述队尾扇区的下一个逻辑扇区不是队头扇区时,确定所述队尾扇区的下一个逻辑扇区为新的队尾扇区。
在其中一个实施例中,
在所述根据所述写入起始地址,向所述可写物理块中写入入队数据之前,所述方法还包括:
将所述队尾扇区的写位图中所述可写物理块的写状态设置为已写状态;
在所述根据所述写入起始地址,向所述可写物理块中写入出队数据之后,所述方法还包括:
将所述队尾扇区的备份写位图中所述可写物理块的写状态设置为已写状态。
在其中一个实施例中,所述根据所述队头扇区,对所述存储空间进行出队操作,包括:
根据所述队头扇区的读位图、备份读位图、写位图和备份写位图,确定所述队头扇区中满足可读条件的一个可读物理块;
根据所述队头扇区的扇区号以及所述可读物理块在所述队头扇区中的排序,确定所述可读物理块的读取起始地址;
根据所述读取起始地址,从所述可读物理块中读取出队数据;
其中,所述可读条件包括:所述队头扇区的读位图和备份读位图中所述物理块的读状态为未读状态,写位图和备份写位图中所述物理块的写状态为已写状态。
在其中一个实施例中,所述方法还包括:
当所述队头扇区中不存在满足所述可读条件的可读物理块时,判断所述队头扇区是否为队尾扇区;
当所述队头扇区是队尾扇区时,确定队列已空;
当所述队头扇区不是队尾扇区时,确定所述队头扇区的下一个逻辑扇区为新的队头扇区。
在其中一个实施例中,所述方法还包括:
将所述队头扇区中读位图和备份读位图中所述可读物理块的读状态设置为已读状态;
当所述队头扇区中所有物理块均不满足空间可写条件和所述可读条件时,擦除所述队头扇区;
其中,所述空间可写条件包括:所述队头扇区的写位图和备份写位图中所述物理块的写状态为未写状态。
在其中一个实施例中,所述擦除所述队头扇区,包括:
设置所述队头扇区的擦除状态为未擦除状态;
根据所述队头扇区的扇区号,确定所述队头扇区的擦除起始地址和擦除终止地址;
擦除从所述擦除起始地址至所述擦除终止地址之间的所有物理扇区;所述队头扇区的擦除状态转变为已擦除状态。
在其中一个实施例中,当前逻辑扇区为所述队尾扇区或所述队头扇区;所述当前逻辑扇区的下一个逻辑扇区的确定方式包括:
获取所述当前逻辑扇区的当前扇区号;
对所述当前扇区号加1得到中间扇区号,并将所述中间扇区号对逻辑扇区总数进行取余操作,得到所述当前逻辑扇区的下一个逻辑扇区的扇区号。
在其中一个实施例中,在所述根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作之前,所述方法还包括:
从所述存储空间的各逻辑扇区的预设擦除状态地址中读取各逻辑扇区的擦除状态;
当所述逻辑扇区的写位图中各物理块的写状态均为已写状态且读位图中各物理块的读状态均为已读状态时,或者当所述逻辑扇区的擦除状态为未擦除状态时,确定所述逻辑扇区为未擦除完逻辑扇区;
对所述未擦除完逻辑扇区进行擦除。
在其中一个实施例中,所述预设擦除状态地址为所述逻辑扇区的最后一个物理块的最后一个地址。
在其中一个实施例中,针对64位的读位图和64位的写位图,所述预设读写位图地址包括:低32位的写位图地址,为所述逻辑扇区的第一个物理块的最后4个字节;高32位的写位图地址,为所述逻辑扇区的第二个物理块的最后4个字节;低32位的读位图地址,为所述逻辑扇区的第三个物理块的最后4个字节;高32位的读位图地址,为所述逻辑扇区的第四个物理块的最后4个字节。
第二方面,一种存储管理装置,所述装置包括:
读写位图获取模块,用于从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
读写操作模块,用于根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
第三方面,一种单片机,包括第一存储器、第二存储器和处理器,所述第一存储器为非易失性存储器且存储有计算机程序,所述第二存储器用于缓存数据,所述处理器执行所述计算机程序时实现以下步骤:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
第四方面,一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
上述存储管理方法、装置、单片机设备和可读存储介质,单片机的flash的各逻辑扇区的预设读写位图地址中存储有各逻辑扇区的读位图和写位图,所述读位图和写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,即使在断电等异常情况下,单片机仍可以从flash的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图,并根据各逻辑扇区的读位图和写位图,获知存储空间中的数据存储情况,例如数据存储的起始位置和终止位置,便与后续根据各逻辑扇区中各物理块的读写状态,进行合理的读写操作。
附图说明
图1a为一个实施例中存储管理方法的流程示意图;
图1b为一个实施例中存储空间结构示意图;
图1c为一个实施例中64位位图的高32位的状态示意图;
图1d为一个实施例中64位位图的低32位的状态示意图;
图1e为一个实施例中所有物理块的读写状态示意图;
图2a为一个实施例中存储管理方法的流程示意图;
图2b为一个实施例中队列的示意图;
图2c为一个实施例中循环队列的示意图;
图3a为一个实施例中入队过程的流程示意图;
图3b为一个实施例中入队过程的流程示意图;
图4a为一个实施例中出队过程的流程示意图;
图4b为一个实施例中查找队头的流程示意图;
图4c为一个实施例中读取队头的流程示意图;
图5a为一个实施例中擦除过程的流程示意图;
图5b为一个实施例中擦除过程的流程示意图;
图5c为一个实施例中出队过程的流程示意图;
图6为一个实施例中存储管理方法的流程示意图;
图7为一个实施例中存储管理装置的结构框图;
图8为一个实施例中单片机的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的存储管理方法,可以应用于非易失性存储器的存储管理,例如flash(闪存)中。在一个实施例中,如图1a所示,提供了一种存储管理方法,以该方法应用于单片机中,进行单片机的flash的存储管理为例进行说明,包括以下步骤:
S101,从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器。
参照图1b所示,示出了一种flash的存储空间的示意图。其中,存储空间包括物理扇区0~物理扇区N+M-1,物理扇区0~物理扇区N-1用于存储运行代码,物理扇区N~物理扇区N+M-1用于存储数据。因为Flash擦除是以物理扇区为单位的,那么读位图和写位图对应的物理块总大小需要是物理扇区大小的倍数,而且擦除物理块时也把读写位图所在的地方擦除了,那么读写位图和对应物理块需要在同一个扇区。因此参照图1b所示,存储空间包括多个逻辑扇区,每个逻辑扇区的大小需要是物理扇区大小的倍数,即每个逻辑扇区对应多个物理扇区,也可以每个逻辑扇区与每个物理扇区一一对应。
每个物理扇区可以包括多个物理块,如a个物理块,各物理块大小一般相等,a=物理扇区大小/物理块大小,物理块大小是根据每次写入物理扇区的数据量的大小确定,例如可以为统计的单次写入物理扇区的最大数据量。
在本实施例中,每个逻辑扇区中各物理块的读写状态可以通过读位图和写位图实时表示。逻辑扇区由C个物理块组成,例如逻辑扇区包括b个物理扇区,则C=a×b;逻辑扇区大小=C×物理块大小。各逻辑扇区中的物理块可以进行编号,例如图1b所示,当b=1时,C=a;逻辑扇区0对应物理块0~物理块a-1,逻辑扇区1对应物理块a~物理块2a-1,……,逻辑扇区N+M-1对应物理块(M-1)a~物理块Ma-1。
读位图可以由多位表示,每一位可以用来存放该位对应的物理块的读状态;写位图也可以由多位表示,每一位可以用来存放该位对应的物理块的写状态。例如,写位图的每1位分别保存着1个物理块的写状态,越低的位对应着编号越小的物理块,0为已写,1为未写;读位图的每1位分别保存着1个物理块的读状态,越低的位对应着编号越小的物理块,0为已读,1为未读;其中,已写、未读的物理块表示有数据,未写、未读的物理块和已写、已读的物理块表示无数据。Flash擦除里的数据都是0xFFFFFFFF,所以读位图和写位图默认都是1,物理块的状态都是未写、未读。当向物理块中写数据时,物理块已写,写位图对应位设置为0;当从物理块中读取数据时,物理块已读,读位图对应位设置为0。
可以理解的是,逻辑扇区由C个物理块组成,因此读位图或写位图的位数至少为C,C为位图的有效位数。例如每个逻辑扇区的读位图和写位图均为8位,而每个逻辑扇区仅包括6个物理块,因此读位图和写位图中的有效位数分别为6,分别表示相应物理块的读状态或写状态,而另外两位没有实际意义。一般地,读位图中从最低位到最高有效位(共C位)分别用于存储物理块编号从低到高的物理块的读状态,同样地,写位图中从最低位到最高有效位(共C位)分别用于存储物理块编号从低到高的物理块的写状态。
可选地,读位图和写位图均为64位。采用64位,则N为小于或等于64的正整数,因此可以提供给物理块更多尺寸大小的选择。参照图1c和图1d所示,分别示出了64位位图(读位图或写位图)0xFFFFFFFFFFFFE000高32位(bit63到bit32)的状态,以及低32位(bit31到bit0)的状态。
各逻辑扇区的读位图和写位图可以存储在各逻辑扇区的预设读写位图地址中。读位图或写位图可以存储在相应逻辑扇区的任一物理块中,读位图和写位图还可以一起存储在相应逻辑扇区的任一物理块中,读位图或写位图可以分成多段,分别存储在相应逻辑扇区的多个物理块中;上述各存储位置仅是示例,本实施例并不限制读位图和写位图在各逻辑扇区中的存储位置。读位图和写位图在各逻辑扇区中的存储位置是预设的,因此上述预设读写位图地址是已知的。从存储空间的各逻辑扇区的预设读位图地址中可以读取各逻辑扇区的读位图,从存储空间的各逻辑扇区的预设写位图地址中可以读取各逻辑扇区的写位图。例如,读位图和写位图存储于相应物理块的最后Y个字节中,所述Y个字节与所述读位图或写位图的位数匹配。
示例性地,参照图1b所示,逻辑扇区0对应物理扇区N,进一步包括物理块0~物理块a-1;此时读位图和写位图均为64位,即分别为8个字节;对逻辑扇区0而言,其写位图的低32位存储于物理块0的最后4个字节中,其写位图的高32位存储于物理块1的最后4个字节中,其读位图的低32位存储于物理块2的最后4个字节中,其读位图的高32位存储于物理块3的最后4个字节中。因此,上述写位图的低32位的地址=Flash数据存储空间起始地址+逻辑扇区号×逻辑扇区大小+物理块在逻辑扇区中的排序×物理块大小-4=Flash数据存储空间起始地址+物理块大小-4,单位为字节;逻辑扇区0中物理块0在该逻辑扇区中的排序自然为1,对于图1b所示的各物理块编号而言,物理块编号为X的物理块在其所在逻辑扇区中的排序=X%a+1,其中X%a为X对a取余,a为各逻辑扇区中的物理块数目。相应地,上述写位图的高32位的地址=Flash数据存储空间起始地址+2×物理块大小-4。因此,从存储空间的逻辑扇区0的写位图的低32位的地址中可以读取逻辑扇区0的写位图的低32位,从存储空间的逻辑扇区0的写位图的高32位的地址中可以读取逻辑扇区0的写位图的高32位,从而得到写位图;相应地,对于读位图以及应用于其它逻辑扇区的情形,与上述类似,这里不再赘述。
可以理解的是,以写位图为例,当某逻辑扇区的写位图存储于该逻辑扇区的某一个物理块中时,该物理块的可写数据量会降低;而当某逻辑扇区的写位图被分割为多个部分,并将多个部分分别存储于该逻辑扇区的多个物理块中时,对写位图的读取、存储、设置等操作而言过于麻烦,且增加了操作风险;所以一般情况下,预设读位图地址和预设写位图地址需要在读位图和写位图的位数、物理块的大小、操作风险等方面进行整体衡量来确定。此外,尽可能将某逻辑扇区的读位图和写位图存储于该逻辑扇区的靠前的物理块中,减少定位到读位图和写位图所在地址时的定位时间。参照上面的描述,示例性地,对于64位的读位图和64位的写位图,可以将某逻辑扇区写位图中的低32位存储于该逻辑扇区的第一个物理块的最后4个字节中,将高32位存储于第二个物理块的最后4个字节中;以及将读位图中的低32位存储于该逻辑扇区的第三个物理块的最后4个字节中,将高32位存储于第四个物理块的最后4个字节中。
S102,根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
示例性地,当读位图和写位图均为64位且C=64时,例如写位图为0xFFFFFFFFFFFFE000,表示该逻辑扇区中第1个物理块~第13个物理块的写状态均为已写状态;读位图为0xFFFFFFFFFFFFFFC0,表示该逻辑扇区中第1个物理块~第6个物理块的读状态均为已读状态;因此单片机可以根据读位图和写位图,至少可以获知该逻辑扇区中已写未读的物理块,即存有数据的物理块;因此单片机可以获知所有逻辑扇区中各物理块的读写状态,以及各物理块中是否存储有数据,进而可以获知数据存储的起始位置(对应的物理块)和终止位置(对应的物理块)。参照图1e所示,为所有逻辑扇区中各物理块的最终状态,其中颜色深的物理块表示有数据;若所有逻辑扇区中仅物理块6到物理块12中存储有数据,则数据存储的起始位置为物理块6的起始地址,数据存储的终止位置为物理块12的终止地址。因此,将读位图和写位图保存在Flash,断电重启后,可通过读位图和写位图得出个各个物理块的读状态和写状态,进一步还可以获知各逻辑扇区的各物理块中是否有数据,以及数据存储的起始位置和终止位置,所以通过读位图和写位图是可以保存Flash数据的存储情况的。
此外,上述存储空间对应非易失性存储器,因此在断电等异常情况下,各逻辑扇区的预设读写位图地址中仍然存储有读位图和写位图,因此单片机仍可以获知存储空间中的数据存储情况,例如数据存储的起始位置和终止位置,便于后续根据各逻辑扇区中各物理块的读写状态,进行合理的读写操作。
需要说明的是,对于flash等非易失性存储器而言,其各地址默认数据状态为“1”,而本实施例中规定写位图中未写状态为“1”,已写状态为“0”,以及规定读位图中未读状态为“1”,已读状态为“0”。其中,未读状态和未写状态均与非易失性存储器的默认数据状态相匹配;例如,对于空白的某逻辑扇区而言,其为未读且未写状态,同时读位图和写位图中均为默认数据状态“1”;例如,当需要将该逻辑扇区擦除时,擦除完成时,读位图和写位图中均为默认数据状态“1”,与此时的未读且未写的状态匹配;相应地,当向逻辑扇区的某个物理块中写入数据或读出数据时,读位图或写位图中与该物理块对应的位可以相应设置为“0”,因此逻辑扇区的读位图和写位图可以准确地表示该逻辑扇区中各物理块的读写状态。
因此,本实施例中的存储管理方法中,单片机的flash的各逻辑扇区的预设读写位图地址中存储有各逻辑扇区的读位图和写位图,所述读位图和写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,即使在断电等异常情况下,单片机仍可以从flash的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图,并根据各逻辑扇区的读位图和写位图,获知存储空间中的数据存储情况,例如数据存储的起始位置和终止位置,便与后续根据各逻辑扇区中各物理块的读写状态,进行合理的读写操作。
需要说明的是,当上述非易失性存储器支持位修改时,对读位图和写位图的更新等操作不会增加各个物理扇区的擦除次数。例如,上述flash可以为NOR flash等支持位修改的非易失性存储器。
可选地,参照图2a所示,本实施例涉及在存储空间中以循环队列结构存储数据的技术方案,具体地,上述S102可以包括:
S201,根据所述各逻辑扇区的读位图和写位图,确定所述存储空间中循环队列的队尾所在的队尾扇区,以及队头所在的队头扇区。
队列是一种先进先出的数据结构,只允许在队列的前端(front)进行删除操作,可以读出数据然后删除(也可以直接删除而不进行读取),而在队列的后端(rear)进行插入操作;进行插入操作的端称为队尾,进行删除操作的端称为队头;队列的数据元素又称为队列元素;在队列中插入一个队列元素称为入队(对应写操作),从队列中删除一个队列元素称为出队(对应读操作)。
参照图2b所示,假设队列有8个物理块(物理块0~物理块7)来存储数据,一个物理块存储一个队列元素的数据,背景色为深色的物理块表示存有数据,白色的物理块表示无数据。下面对图2b中(a)~(e)分别对应的队列场景进行说明:
a.队列初始化,front和rear指向物理块0;
b.每当队尾插入1个元素,rear便指向下一个物理块;
c.每当删除队头一个元素,front便指向下一个物理块;当front和rear指向同一个物理块后,队列空;
d.经过多次插入和删除操作;rear最后指向物理块7,front指向物理块5;rear已经指向最后一个物理块,不能往后移,这种现象叫做“假溢出”,无法继续插入;为充分利用存储空间,克服"假溢出"现象的方法是:参照图2c将存储空间想象为一个首尾相接的圆环;存储在其中的队列称为循环队列(Circular Queue),也就是想象物理块7和物理块0是连在一起的,当rear已经指向物理块7,那么下一个便是物理块0;
e.队尾插入一个元素,rear已指向最大物理块,参照图2c所示,自动转换指向最小物理块;同理front也是这样处理;当rear下一个物理块是front指向的物理块时,队列满。
当然,在本实施例中,可以采用普通队列作为数据存储结构,也可以采用上述循环队列作为存储结构,以避免“假溢出”的问题;此外,根据循环队列的特性,每个物理块使用(入队和出队)的次数都是相等的,在一个物理扇区的物理块都被循环队列使用过后便进行擦除,那么各个物理扇区擦除的次数也是相等的;因此,使用循环队列的操作方式管理flash,可以让各个扇区一起达到极限值,从而延长flash的寿命。
为便于说明,在本实施例以循环队列为例进行说明。相应地,把flash作为循环队列存储空间,参照图1b所示,示例性地,物理扇区N到物理扇区N+M-1作为循环队列的存储空间。同样地,假设循环队列有64块物理块;初始化后,front和rear指向物理块0;依次入队13个元素,每次入队时rear指向下一个物理块,写位图对应设置为0(已写),最后rear指向物理块13,写位图为0xFFFFFFFFFFFFE000;然后依次出队6个元素,每次出队时front指向下一个物理块,读位图对应设置为0(已读),最后front指向物理块6,读位图为0xFFFFFFFFFFFFFFC0,则最终各个物理块的状态同样如图1e所示。可以理解的是,只要把读写位图保存在Flash,断电重启后,可通过读写位图得出个各个物理块的是否有数据;有数据的物理块是连在一起的,连续的物理块开端便是Flash循环队列的队头,终端便是Flash循环队列的队尾,所以通过读写位图是可以保存Flash循环队列的存储情况的。
此外,采用读位图和写位图可以不降低flash寿命,可以避免因为更新读位图和写位图而造成flash物理扇区的额外擦除次数。因为单片机Flash支持位修改,允许把某一个位从1变为0。当位图对应的所有物理块都入队且出队后,读写位图所有位都变成0,这时才擦除物理块(同时擦除了读写位图);所以Flash保存读写位图的地方和物理块擦除的次数是一样的,并没有降低Flash的寿命。
在本实施例中,单片机可以根据各逻辑扇区的读位图和写位图,获知各逻辑扇区中各物理块的读写状态;根据各物理块的读写状态,可以确定队列的队尾所在的队尾扇区,以及队头所在的队头扇区。具体地,根据所述各逻辑扇区的读位图和写位图,当存在逻辑扇区满足队尾条件时,确定所述逻辑扇区为队尾扇区;当存在逻辑扇区满足队头条件时,确定所述逻辑扇区为队头扇区;当所有逻辑扇区的写位图中各物理块的写状态均为未写状态时,确定起始逻辑扇区为队头扇区和队尾扇区。
其中,所述队尾条件包括:所述逻辑扇区的写位图的写状态中部分物理块的写状态为已写状态且部分物理块为未写状态;或,所述逻辑扇区的写位图中各物理块的写状态均为未写状态且所述逻辑扇区的上一逻辑扇区的写位图中各物理块的写状态均为已写状态。
其中,所述队头条件包括:所述逻辑扇区的读位图中部分物理块的读状态为已读状态且部分物理块的读状态为未读状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、所述逻辑扇区的写位图中部分物理块的写状态为已写状态且所述逻辑扇区的上一逻辑扇区中各物理块的写状态均为未写状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、除所述逻辑扇区以外的其它所有逻辑扇区的写位图中各物理块的写状态均为已写状态、所述逻辑扇区中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态。
需要说明的是,对循环队列而言,所述逻辑扇区的上一逻辑扇区的扇区号=(所述逻辑扇区的扇区号-1)%逻辑扇区总数,实现逻辑扇区的循环。
S202,根据所述队尾扇区,对所述存储空间进行入队操作。
在确定队尾所在的队尾扇区后,单片机可以获取所述队尾扇区的写位图,确定所述队尾扇区中各物理块的写状态,进而确定一个未写状态的物理块为队尾所在的物理块;然后根据队尾所在物理块,确定队尾所在物理块的起始地址;根据队尾所在物理块的起始地址,向所述队尾所在物理块写入数据,即入队操作。
S203,根据所述队头扇区,对所述存储空间进行出队操作。
在确定队头所在的队头扇区后,单片机可以获取所述队头扇区的读位图和写位图,确定所述队头扇区中各物理块的读状态,进而确定一个已写且未读的物理块为队头所在的物理块;然后根据队头所在物理块,确定队头所在物理块的起始地址;根据队头所在物理块的起始地址,从所述队头所在物理块读取数据,即出队操作。
本实施例中的存储管理方法中,单片机可以采用循环队列作为数据存储结构,进而根据各逻辑扇区的读位图和写位图,确定循环队列的队尾所在的队尾扇区,以及队头所在的队头扇区;然后根据队尾扇区对存储空间进行入队操作,或者,根据队头扇区对存储空间进行出队操作;采用循环队列可以便于根据各逻辑扇区的读位图和写位图,确定循环队列的队尾扇区和队头扇区,进而便于后续读操作和写操作;同时,采用循环队列可以充分利用存储空间,避免普通队列“假溢出”的问题;此外,采用循环队列时,可以让各个扇区一起达到极限值,从而延长flash的寿命。
在一个实施例中,本实施例还涉及各逻辑扇区的备份读位图和备份写位图,具体地,所述方法还包括:从所述存储空间的各逻辑扇区的预设备份读写位图地址中读取各逻辑扇区的备份读位图和备份写位图。备份位图是对读写位图的备份,正常情况下备份位图和读写位图的每一位有效的位是一样的;当不一样时,可能是因为断电、物理块损坏等异常原因导致的,则忽略这一位和其对应的物理块。示例性地,当备份写位图和写位图不一致时,可能是因为断电等异常造成写数据的过程突然中断造成的,一般可以在擦除整个逻辑扇区后正常使用。因此,单片机可以比对逻辑扇区的读位图和备份读位图,比对逻辑扇区的写位图和备份写位图,至少可以检测异常状态,也可以对读位图和备份读位图中同一位状态相同的物理块的读状态进行确定,以及对写位图和备份写位图中同一位状态相同的物理块的写状态进行确定。
可以理解的是,备份读位图和备份写位图可以参照读位图和写位图存储于相应逻辑扇区的预设备份读写位图地址中;示例性地,参照图1b所示,逻辑扇区0的备份写位图的低32位存储于物理块4的最后4个字节中,备份写位图的高32位存储于物理块5的最后4个字节中。
可选地,参照图3a所示,在上述读取各逻辑扇区的备份读位图和备份写位图的基础上,本实施例涉及入队过程,具体地,S202可以包括:
S301,根据所述队尾扇区的写位图和备份写位图,确定所述队尾扇区中满足可写条件的一个可写物理块。
其中,所述可写条件包括:所述队尾扇区的写位图中所述物理块的写状态为未写状态、备份写位图中所述物理块的写状态为未写状态,且所述物理块的数据区已擦除。单片机可以通过读取所述物理块的所有数据,当所述物理块的数据不全是“1”时,即存在“0”时,即意味着该物理块中存储有数据,即处于未擦除的状态,则意味着该物理块可能已损坏(例如达到擦除极限);而当所述物理块的数据全是“1”时,意味着该物理块中未存储数据,确定所述物理块的数据区已擦除。
显然,上述队尾扇区中可能存在多个满足上述可写条件的物理块。一种实施方式中,从所述队尾扇区的写位图中最低位对应的物理块开始至最高有效位对应的物理块为止,确定所述队尾扇区中满足可写条件的第一个可写物理块。如此,可以从队尾扇区中满足可写条件的第一个可写物理块开始进行写操作,可以提高存储空间利用效率。
相应地,所述方法还包括:当所述队尾扇区中不存在满足所述可写条件的可写物理块时,判断所述队尾扇区的下一个逻辑扇区是否为队头扇区;当所述队尾扇区的下一个逻辑扇区是队头扇区时,确定队列已满;当所述队尾扇区的下一个逻辑扇区不是队头扇区时,确定所述队尾扇区的下一个逻辑扇区为新的队尾扇区。可以理解的是,当所述队尾扇区中不存在满足所述可写条件的可写物理块时,可能存在以下情况或多种情况的组合:所述队尾扇区已写满(队尾扇区所有物理块为已写状态)、所述队头扇区中未写的物理块损坏等;因此队尾扇区移向下一个逻辑扇区作为新的队尾扇区,可以继续根据所述新的队尾扇区,对所述存储空间进行入队操作。其中,所述队尾扇区的下一个逻辑扇区的确定方式包括:获取所述队尾扇区的当前扇区号;对所述队尾扇区号加1得到中间扇区号,并将所述中间扇区号对逻辑扇区总数进行取余操作,得到所述队尾扇区的下一个逻辑扇区的扇区号;即(队尾扇区扇区号+1)%逻辑扇区总数,通过循环使用逻辑扇区实现循环队列。
S302,根据所述队尾扇区的扇区号以及所述可写物理块在所述队尾扇区中的排序,确定所述可写物理块的写入起始地址。
示例性地,写入起始地址=Flash循环队列存储空间起始地址+rear所在逻辑扇区号(队尾扇区扇区号)×逻辑扇区大小+可写位在写位图的偏移量×物理块大小。其中,所述可写物理块在所述队尾扇区中的排序与所述可写物理块对应的可写位在写位图的偏移量是相互对应的;例如可写物理块在队尾扇区中的排序为第X个物理块,即排序为X,相应地,所述可写物理块对应的可写位在队尾扇区的写位图中的偏移量为X-1,即Bit(X-1),在写位图中为第X位;可写位在写位图的偏移量为Bit0左移到可写位Bit(X-1)的位数;例如可写位为Bit7的偏移量为7,物理块在队尾扇区的排序为8。Flash循环队列存储空间起始地址为数据存储的起始地址,例如,参照图1b所示,为物理块0的起始地址。
S303,根据所述写入起始地址,向所述可写物理块中写入入队数据。
在写入起始地址已知的情况下,写入的数据量的大小由写入数据的应用程序确定,因此也是已知的,不得大于物理块保存队列元素大小(物理块大小-4字节);因此单片机可以根据写入起始地址写入入队数据。
在一个实施方式中,在所述根据所述写入起始地址,向所述可写物理块中写入入队数据之前,所述方法还包括:将所述队尾扇区的写位图中所述可写物理块的写状态设置为已写状态;在所述根据所述写入起始地址,向所述可写物理块中写入出队数据之后,所述方法还包括:将所述队尾扇区的备份写位图中所述可写物理块的写状态设置为已写状态。因此,当在写入数据的过程中,若发生断电等异常状况导致写入过程中止时,写入过程对应的物理块中写入的数据并不完整,此时写位图中所述物理块为已写状态,备份写位图中所述物理块为未写状态;因此可以忽略这一不同的状态的位,并忽略这一物理块;参照上面的描述,写入数据不完整的物理块不满足可写条件。
在一个实施方式中,所述入队过程还包括校验过程,包括:根据单片机的内存中存储的写入起始地址读取所述可写物理块中的已写数据,并和内存中存储的所述入队数据进行比较;当所述已写数据和所述入队数据不同时,入队失败。其中,单片机的内存可以为RAM,可以缓存入队数据和写入起始地址;当入队失败时,可以再次尝试对上述物理块的下一个可写物理块进行入队。
参照图3b所示,从另一个角度说明入队过程(写入过程),具体地,包括:
A1、找出队尾:rear所在的逻辑扇区便是队尾所在的扇区,然后再从写位图从最低位到最高有效位中,找出符合可写条件的1位可写位,若找到,则执行A4;若未找到,则执行A2;
A2、未找到队尾,判断rear下一个逻辑扇区是否是front所在的扇区;若是则表示循环队列满,入队失败,返回队列已满结果;若否,则说明front所在扇区所有物理块都是已写,不可重复写,直到front所在扇区所有物理块已读,进行擦除后才可再写,因此执行A3;
A3、rear移向下一个逻辑扇区,rear=(rear+1)%逻辑扇区总数,然后执行A1;
A4、找到队尾开始入队,把rear所在逻辑扇区写位图找到的那一位可写位设置为0;
A5、计算出物理块保存队列元素的起始地址;起始地址=Flash循环队列存储空间起始地址+rear所在逻辑扇区号×逻辑扇区大小+可写位在写位图的偏移量×物理块大小;
A6、入队元素写入Flash。写入地址为A5计算出的起始地址,写入大小由应用决定,不得大于物理块保存队列元素大小(物理块大小-4);
A7、校验;把A6写入Flash的数据读出来,和入队元素一一比较,判断是否一样;若不一样,则入队失败,返回入队错误结果;若一样,则执行A8;
A8、入队结束,把rear所在逻辑扇区备份写位图找到的那一位可写位设置为0,返回入队成功结果。
可选地,参照图4a所示,在上述读取各逻辑扇区的备份读位图和备份写位图的基础上,本实施例涉及出队过程(仅涉及读取队头的过程,未涉及删除队头数据的过程),具体地,S203可以包括:
S401,根据所述队头扇区的读位图、备份读位图、写位图和备份写位图,确定所述队头扇区中满足可读条件的一个可读物理块。
其中,所述可读条件包括:所述队头扇区的读位图和备份读位图中所述物理块的读状态为未读状态,写位图和备份写位图中所述物理块的写状态为已写状态。
相应地,所述方法还包括:当所述队头扇区中不存在满足所述可读条件的可读物理块时,判断所述队头扇区是否为队尾扇区;当所述队头扇区是队尾扇区时,确定队列已空;当所述队头扇区不是队尾扇区时,确定所述队头扇区的下一个逻辑扇区为新的队头扇区。可以理解的是,当所述队头扇区中不存在满足所述可读条件的可读物理块时,可能存在以下情况或多种情况的组合:所述队头扇区已写完且读完、所述队头扇区的部分物理块已写且已读、所述队头扇区中未写的物理块损坏等;因此队尾扇区移向下一个逻辑扇区作为新的队尾扇区,可以继续根据所述新的队尾扇区,对所述存储空间进行入队操作。
其中,所述队头扇区的下一个逻辑扇区的确定方式包括:获取所述队头扇区的当前扇区号;对所述队头扇区号加1得到中间扇区号,并将所述中间扇区号对逻辑扇区总数进行取余操作,得到所述队头扇区的下一个逻辑扇区的扇区号;即(队头扇区扇区号+1)%逻辑扇区总数。在确定新的队头扇区后,继续根据所述新的队头扇区,对所述存储空间进行出队操作。
S402,根据所述队头扇区的扇区号以及所述可读物理块在所述队头扇区中的排序,确定所述可读物理块的读取起始地址。
示例性地,读取起始地址=Flash循环队列存储空间起始地址+front所在逻辑扇区号(队头扇区扇区号)×逻辑扇区大小+可读位在读位图的偏移量×物理块大小。其中,所述可读物理块在所述队头扇区中的排序与所述可读物理块对应的可读位在读位图的偏移量是相互对应的;具体参照上述写入起始地址。
S403,根据所述读取起始地址,从所述可读物理块中读取出队数据。
在读取起始地址已知的情况下,读取的数据量的大小由读取数据的应用程序确定,因此也是已知的,不得大于物理块保存队列元素大小(物理块大小-4字节);因此单片机可以根据读取起始地址读取出队数据。
下面从另一个角度说明出队过程(读取过程),包括图4b所示的查找队头的过程和图4c所示的读取队头的过程,具体地,所述查找队头的过程包括:
B1、找出队头:front所在的逻辑扇区便是队头所在的扇区,然后再从读位图从最低位到最高有效位中,找出符合可读条件的1位可读位;若未找到,则执行B2;;若找到,则返回找到队头结果;
B2、未找到队头,判断front逻辑扇区是否是rear所在的扇区;若是则表示循环队列空,出队失败,返回队列已空结果;若否,则执行B3;
B3、front移向下一个逻辑扇区,front=(front+1)%逻辑扇区总数;
所述读取队头的过程包括:
C1、查找Flash循环队列队头,如果返回结果为找到队头结果,则找到可读位,执行C2;若返回结果为队列已空结果,则返回读队头失败结果;
C2、计算队头物理块起始地址;起始地址=Flash循环队列存储空间起始地址+front所在逻辑扇区号×逻辑扇区大小+可读位在读位图的偏移量×物理块大小;
C3、读物理块的队列元素数据;读出地址为C2计算出的起始地址,读出大小由应用决定,不得大于物理块保存队列元素大小(物理块大小-4),返回读队头成功结果。
可选地,参照图5a所示,出队过程还可以包括擦除过程(即删除队头数据的过程(标志队头已读)和擦除队头扇区的过程),具体可以包括:
S501,将所述队头扇区中读位图和备份读位图中所述可读物理块的读状态设置为已读状态。
在读出数据之后(也可以不进行读取队头数据的过程),单片机可以将所述队头扇区中读位图和备份读位图中的相应位设置为已读状态对应的“0”,所述相应位与所述可读物理块对应。
S502,当所述队头扇区中所有物理块均不满足空间可写条件和所述可读条件时,擦除所述队头扇区。
其中,所述空间可写条件包括:所述队头扇区的写位图和备份写位图中所述物理块的写状态为未写状态。当所述队头扇区中所述物理块均不满足空间可写条件和上述的可读条件时,即所述队头扇区中既无空间可写也无数据可读(一般为该队头扇区中已写满数据且所述数据已读)时,此时需要擦除所述队头扇区。
具体地,所述擦除所述队头扇区,包括:设置所述队头扇区的擦除状态为未擦除状态;根据所述队头扇区的扇区号,确定所述队头扇区的擦除起始地址和擦除终止地址;擦除从所述擦除起始地址至所述擦除终止地址之间的所有物理扇区;所述队头扇区的擦除状态转变为已擦除状态。可以理解的是,因为上述队头扇区被擦除后,默认的所有数据均变为“1”,即没有存储数据,此时,存储在所述队头扇区中的擦除状态明显也是“1”,即表示已擦出状态,因此当擦除完成时,自动实现了擦除状态的更新。上述擦除状态可以从逻辑扇区的预设擦除状态地址中读取。
当然,在一种实施方式中,出队过程可以包括上述S401、S501和S502,即仅确定可读物理块,但并不读取数据而是直接删除数据。相应地,先读取数据而后删除数据的方式在断电等异常情况下不易丢失数据。
参照图5b所示,从另一个角度说明擦除过程,具体地,包括:
D1、设置要擦除的逻辑扇区的擦除标志为0;当整个扇区擦除完成后,擦除标志会自动恢复为1;
D2、计算起始地址和终止地址;起始地址=Flash循环队列存储空间起始地址+擦除逻辑扇区号×逻辑扇区大小;终止地址=起始地址+逻辑扇区大小;
D3、初始化擦除地址为起始地址;
D4、擦除擦除地址所在的物理扇区;
D5、新的擦除地址=擦除地址+物理扇区大小;然后判断新的擦除地址是否小于终止地址,若是则执行D4;若否则擦除完成,返回擦除完成结果。
参照图5c所示,从另一个角度说明出队过程(读取并删除的过程),具体地,包括:
E1、查找Flash循环队列队头,如果返回结果为找到队头结果,则执行判断是否需要读数据(根据读取模式判断),并在需要读数据时执行E2,在不需要读数据时执行E4;如果返回结果为队列已空结果,则返回队列已空结果;
E2、计算队头物理块起始地址;起始地址=Flash循环队列存储空间起始地址+front所在逻辑扇区号×逻辑扇区大小+可读位在读位图的偏移量×物理块大小;
E3、读物理块的队列元素数据;读出地址为C2计算出的起始地址,读出大小由应用决定,不得大于物理块保存队列元素大小(物理块大小-4);E2和E3是需要读取的时候才执行;
E4、把front所在逻辑扇区读位图和备份读位图的可读位设置为0;
E5、判断front所在的逻辑扇区无数据可读且无空间可写;若是,则执行E6;无数据可读是一个逻辑扇区里不存在读位图和备份读位图的同一位都是未读,写位图和备份写位图对应位都是已写的物理块;无空间可写是一个逻辑扇区里不存在写位图和备份写位图的都是未写的物理块;
E6、擦除front所在逻辑扇区;
E7、判断front逻辑扇区是否是rear所在的扇区;若否,则执行E8;若是,则返回出队成功结果;
E8、front移向下一个逻辑扇区,front=(front+1)%逻辑扇区总数,返回出队成功结果。
需要着重说明的是,在本实施例中,参照图6所示,在所述根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作之前,所述方法还包括初始化过程,主要是对因各类异常导致未擦除完的逻辑扇区进行擦除,具体包括:
S601,从所述存储空间的各逻辑扇区的预设擦除状态地址中读取各逻辑扇区的擦除状态。
各逻辑扇区的擦除状态同样可以存储在各逻辑扇区的预设擦除状态地址中,可以存储在任一物理块中;可选地,所述逻辑扇区的擦除状态存储在所述逻辑扇区的最后一个物理块中,甚至所述最后一个物理块的最后Y个字节中,甚至是最后一个地址中。具体地,擦除状态可以用至少一位来表示,“0”表示未擦除状态,“1”表示已擦除状态。
可选地,所述预设擦除状态地址为所述逻辑扇区的最后一个物理块的最后一个地址。在本实施例中,采用非易失性存储器的默认数据状态,如“1”,表示已擦除状态,当整个逻辑扇区被擦除时,预设擦除状态地址的擦除状态为默认数据状态“1”,与已擦除状态相匹配。假使预设擦除状态地址为所述逻辑扇区中除所述最后一个物理块的最后一个地址以外的其它地址时,即该逻辑扇区中在预设擦除地址之后尚存在其它地址时,如果在擦除过程中突然断电,且已经擦除了预设擦除地址,则意味着在未擦除完的情况下擦除状态为默认数据状态,即已擦除状态,即难以判断是否出现了未擦除完的情况;相应地,当预设擦除状态地址为所述逻辑扇区的最后一个物理块的最后一个地址时,即使出现了上述擦除状态突然断电的情况,当擦除到预设擦除状态地址时,表明已经擦除完成整个逻辑扇区,且擦除状态为已擦除状态,因此上述预设擦除状态地址可以确定逻辑扇区已擦除完成,避免因为断电等异常造成误以为已擦除完成,导致数据读写出错的问题。
S602,当所述逻辑扇区的写位图中各物理块的写状态均为已写状态且读位图中各物理块的读状态均为已读状态时,或者当所述逻辑扇区的擦除状态为未擦除状态时,确定所述逻辑扇区为未擦除完逻辑扇区。
即所述逻辑扇区中所有物理块已写已读,应该已经被擦除,相应地,读位图中各物理块的读状态应该为未读状态,写位图中各物理块的写状态应该为未写状态,因此这种情况下意味着未擦除完成;当擦除状态为未擦除状态时,意味着该逻辑扇区为未擦除完逻辑扇区。
S603,对所述未擦除完逻辑扇区进行擦除。
参照上述擦除过程的描述,对所述未擦除完逻辑扇区的整个逻辑扇区进行擦除。如此,可以对未擦除完的逻辑扇区进行擦除,避免进行读取操作或写入操作时出错。
可以理解的是,最开始时所述单片机的flash的所有逻辑扇区的所有物理块均为未写未读状态;此时队头所在扇区和队尾所在扇区可以均为逻辑扇区0,具体地,队头和队尾均为逻辑扇区0的物理块0;然后,进行写入操作时,从队尾插入相应的1个队列元素,更新逻辑扇区0的写位图和备份写位图,队尾指向下一个物理块;进行读取操作时,从队头读取相应的一个队列元素,更新逻辑扇区0的读位图和备份读位图,队头便指向下一个物理块,如果逻辑扇区0中无数据可读且无物理块可写,则擦除逻辑扇区0。相应地,当逻辑扇区0不存在可写物理块时,队尾可以移向下一个逻辑扇区;当逻辑扇区0不存在可读物理块时,队头可以移向下一个逻辑扇区。当存储空间对应逻辑扇区0~逻辑扇区M-1时,逻辑扇区M-1的下一个逻辑扇区为逻辑扇区0。
应该理解的是,虽然图1a,2a,3a-6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1a,2a,3a-6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种存储管理装置,包括:读写位图获取模块701和读写操作模块702,其中:
读写位图获取模块701,用于从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
读写操作模块702,用于根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
可选地,在所述存储空间中数据以循环队列结构存储,所述读写操作模块702可以包括:
队列定位单元,用于根据所述各逻辑扇区的读位图和写位图,确定所述存储空间中循环队列的队尾所在的队尾扇区,以及队头所在的队头扇区;
入队单元,用于根据所述队尾扇区,对所述存储空间进行入队操作;
出队单元,用于根据所述队头扇区,对所述存储空间进行出队操作。
可选地,所述队列定位单元具体用于根据所述各逻辑扇区的读位图和写位图,当存在逻辑扇区满足队尾条件时,确定所述逻辑扇区为队尾扇区;当存在逻辑扇区满足队头条件时,确定所述逻辑扇区为队头扇区;当所有逻辑扇区的写位图中各物理块的写状态均为未写状态时,确定起始逻辑扇区为队头扇区和队尾扇区;其中,所述队尾条件包括:所述逻辑扇区的写位图中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态;或,所述逻辑扇区的写位图中各物理块的写状态均为未写状态且所述逻辑扇区的上一逻辑扇区的写位图中各物理块的写状态均为已写状态;所述队头条件包括:所述逻辑扇区的读位图中部分物理块的读状态为已读状态且部分物理块的读状态为未读状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、所述逻辑扇区的写位图中部分或全部物理块的写状态为已写状态且所述逻辑扇区的上一逻辑扇区中各物理块的写状态均为未写状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、除所述逻辑扇区以外的其它所有逻辑扇区的写位图中各物理块的写状态均为已写状态、所述逻辑扇区中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态。
可选地,所述装置还可以包括:备份位图获取模块,用于从所述存储空间的各逻辑扇区的预设备份读写位图地址中读取各逻辑扇区的备份读位图和备份写位图。
可选地,所述入队单元具体用于根据所述队尾扇区的写位图和备份写位图,确定所述队尾扇区中满足可写条件的一个可写物理块;根据所述队尾扇区的扇区号以及所述可写物理块在所述队尾扇区中的排序,确定所述可写物理块的写入起始地址;根据所述写入起始地址,向所述可写物理块中写入入队数据;其中,所述可写条件包括:所述队尾扇区的写位图中所述物理块的写状态为未写状态、备份写位图中所述物理块的写状态为未写状态,且所述物理块的数据区已擦除。
可选地,所述入队单元具体用于从所述队尾扇区的写位图中最低位对应的物理块开始至最高有效位对应的物理块为止,确定所述队尾扇区中满足可写条件的第一个可写物理块。
可选地,所述入队单元还用于当所述队尾扇区中不存在满足所述可写条件的可写物理块时,判断所述队尾扇区的下一个逻辑扇区是否为队头扇区;当所述队尾扇区的下一个逻辑扇区是队头扇区时,确定队列已满;当所述队尾扇区的下一个逻辑扇区不是队头扇区时,确定所述队尾扇区的下一个逻辑扇区为新的队尾扇区。
可选地,所述入队单元还用于在所述根据所述写入起始地址,向所述可写物理块中写入入队数据之前,将所述队尾扇区的写位图中所述可写物理块的写状态设置为已写状态;在所述根据所述写入起始地址,向所述可写物理块中写入出队数据之后,将所述队尾扇区的备份写位图的写状态中所述可写物理块设置为已写状态。
可选地,所述入队单元具体用于根据所述队头扇区的读位图、备份读位图、写位图和备份写位图,确定所述队头扇区中满足可读条件的一个可读物理块;根据所述队头扇区的扇区号以及所述可读物理块在所述队头扇区中的排序,确定所述可读物理块的读取起始地址;根据所述读取起始地址,从所述可读物理块中读取出队数据;其中,所述可读条件包括:所述队头扇区的读位图和备份读位图中所述物理块的读状态为未读状态,写位图和备份写位图中所述物理块的写状态为已写状态。
可选地,所述入队单元还用于当所述队头扇区中不存在满足所述可读条件的可读物理块时,判断所述队头扇区是否为队尾扇区;当所述队头扇区是队尾扇区时,确定队列已空;当所述队头扇区不是队尾扇区时,确定所述队头扇区的下一个逻辑扇区为新的队头扇区。
可选地,所述入队单元还用于将所述队头扇区中读位图和备份读位图中所述可读物理块的读状态设置为已读状态;当所述队头扇区中所有物理块均不满足空间可写条件和所述可读条件时,擦除所述队头扇区;其中,所述空间可写条件包括:所述队头扇区的写位图和备份写位图中所述物理块的写状态为未写状态。
可选地,所述入队单元具体用于设置所述队头扇区的擦除状态为未擦除状态;根据所述队头扇区的扇区号,确定所述队头扇区的擦除起始地址和擦除终止地址;擦除从所述擦除起始地址至所述擦除终止地址之间的所有物理扇区;所述队头扇区的擦除状态转变为已擦除状态。
可选地,当前逻辑扇区为所述队尾扇区或所述队头扇区;所述当前逻辑扇区的下一个逻辑扇区的确定方式包括:获取所述当前逻辑扇区的当前扇区号;对所述当前扇区号加1得到中间扇区号,并将所述中间扇区号对逻辑扇区总数进行取余操作,得到所述当前逻辑扇区的下一个逻辑扇区的扇区号。
可选地,所述装置还包括:
擦除状态读取模块,用于从所述存储空间的各逻辑扇区的预设擦除状态地址中读取各逻辑扇区的擦除状态;
未擦除完逻辑扇区确定模块,用于当所述逻辑扇区的写位图中各物理块均为已写状态且读位图中各物理块均为已读状态时,或者当所述逻辑扇区的擦除状态为未擦除状态时,确定所述逻辑扇区为未擦除完逻辑扇区;
擦除模块,用于对所述未擦除完逻辑扇区进行擦除。
本实施例中的存储管理装置中,单片机的flash的各逻辑扇区的预设读写位图地址中存储有各逻辑扇区的读位图和写位图,所述读位图和写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,即使在断电等异常情况下,单片机仍可以从flash的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图,并根据各逻辑扇区的读位图和写位图,获知存储空间中的数据存储情况,例如数据存储的起始位置和终止位置,便与后续根据各逻辑扇区中各物理块的读写状态,进行合理的读写操作。
关于存储管理装置的具体限定可以参见上文中对于存储管理方法的限定,在此不再赘述。上述存储管理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种单片机,其内部结构图可以如图8所示。该单片机可以包括第一存储器801、第二存储器802和处理器803,所述第一存储器为非易失性存储器,可以存储计算机程序;所述第二存储器用于缓存数据。该计算机程序被处理器执行时以实现一种存储管理方法。本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种单片机,包括第一存储器、第二存储器和处理器,所述第一存储器为非易失性存储器且存储有计算机程序,所述第二存储器用于缓存数据,该处理器执行计算机程序时实现以下步骤:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
在一个实施例中,提供了一种可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (17)
1.一种存储管理方法,其特征在于,所述方法包括:
从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
在所述存储空间中数据以循环队列结构存储,根据所述各逻辑扇区的读位图和写位图,当存在逻辑扇区满足队尾条件时,确定所述逻辑扇区为队尾扇区;
当存在逻辑扇区满足队头条件时,确定所述逻辑扇区为队头扇区;
当所有逻辑扇区的写位图中各物理块的写状态均为未写状态时,确定起始逻辑扇区为队头扇区和队尾扇区;
根据所述队尾扇区,对所述存储空间进行入队操作;
或者,
根据所述队头扇区,对所述存储空间进行出队操作;
其中,所述队尾条件包括:所述逻辑扇区的写位图中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态;或,所述逻辑扇区的写位图中各物理块的写状态均为未写状态且所述逻辑扇区的上一逻辑扇区的写位图中各物理块的写状态均为已写状态;
所述队头条件包括:所述逻辑扇区的读位图中部分物理块的读状态为已读状态且部分物理块的读状态为未读状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、所述逻辑扇区的写位图中部分或全部物理块的写状态为已写状态且所述逻辑扇区的上一逻辑扇区中各物理块的写状态均为未写状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、除所述逻辑扇区以外的其它所有逻辑扇区的写位图中各物理块的写状态均为已写状态、所述逻辑扇区中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
从所述存储空间的各逻辑扇区的预设备份读写位图地址中读取各逻辑扇区的备份读位图和备份写位图。
3.根据权利要求2所述的方法,其特征在于,所述根据所述队尾扇区,对所述存储空间进行入队操作,包括:
根据所述队尾扇区的写位图和备份写位图,确定所述队尾扇区中满足可写条件的一个可写物理块;
根据所述队尾扇区的扇区号以及所述可写物理块在所述队尾扇区中的排序,确定所述可写物理块的写入起始地址;
根据所述写入起始地址,向所述可写物理块中写入入队数据;
其中,所述可写条件包括:所述队尾扇区的写位图中所述物理块的写状态为未写状态、备份写位图中所述物理块的写状态为未写状态,且所述物理块的数据区已擦除。
4.根据权利要求3所述的方法,其特征在于,所述根据所述队尾扇区的写位图,确定所述队尾扇区中满足可写条件的一个可写物理块,包括:
从所述队尾扇区的写位图中最低位对应的物理块开始至最高有效位对应的物理块为止,确定所述队尾扇区中满足可写条件的第一个可写物理块。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
当所述队尾扇区中不存在满足所述可写条件的可写物理块时,判断所述队尾扇区的下一个逻辑扇区是否为队头扇区;
当所述队尾扇区的下一个逻辑扇区是队头扇区时,确定队列已满;
当所述队尾扇区的下一个逻辑扇区不是队头扇区时,确定所述队尾扇区的下一个逻辑扇区为新的队尾扇区。
6.根据权利要求3所述的方法,其特征在于,
在所述根据所述写入起始地址,向所述可写物理块中写入入队数据之前,所述方法还包括:
将所述队尾扇区的写位图中所述可写物理块的写状态设置为已写状态;
在所述根据所述写入起始地址,向所述可写物理块中写入入队数据之后,所述方法还包括:
将所述队尾扇区的备份写位图中所述可写物理块的写状态设置为已写状态。
7.根据权利要求1所述的方法,其特征在于,所述根据所述队头扇区,对所述存储空间进行出队操作,包括:
根据所述队头扇区的读位图、备份读位图、写位图和备份写位图,确定所述队头扇区中满足可读条件的一个可读物理块;
根据所述队头扇区的扇区号以及所述可读物理块在所述队头扇区中的排序,确定所述可读物理块的读取起始地址;
根据所述读取起始地址,从所述可读物理块中读取出队数据;
其中,所述可读条件包括:所述队头扇区的读位图和备份读位图中所述物理块的读状态为未读状态,写位图和备份写位图中所述物理块的写状态为已写状态。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当所述队头扇区中不存在满足所述可读条件的可读物理块时,判断所述队头扇区是否为队尾扇区;
当所述队头扇区是队尾扇区时,确定队列已空;
当所述队头扇区不是队尾扇区时,确定所述队头扇区的下一个逻辑扇区为新的队头扇区。
9.根据权利要求7所述的方法,其特征在于,所述方法还包括:
将所述队头扇区中读位图和备份读位图中所述可读物理块的读状态设置为已读状态;
当所述队头扇区中所有物理块均不满足空间可写条件和所述可读条件时,擦除所述队头扇区;
其中,所述空间可写条件包括:所述队头扇区的写位图和备份写位图中所述物理块的写状态为未写状态。
10.根据权利要求9所述的方法,其特征在于,所述擦除所述队头扇区,包括:
设置所述队头扇区的擦除状态为未擦除状态;
根据所述队头扇区的扇区号,确定所述队头扇区的擦除起始地址和擦除终止地址;
擦除从所述擦除起始地址至所述擦除终止地址之间的所有物理扇区;所述队头扇区的擦除状态转变为已擦除状态。
11.根据权利要求5或8所述的方法,其特征在于,当前逻辑扇区为所述队尾扇区或所述队头扇区;所述当前逻辑扇区的下一个逻辑扇区的确定方式包括:
获取所述当前逻辑扇区的当前扇区号;
对所述当前扇区号加1得到中间扇区号,并将所述中间扇区号对逻辑扇区总数进行取余操作,得到所述当前逻辑扇区的下一个逻辑扇区的扇区号。
12.根据权利要求1所述的方法,其特征在于,在所述根据所述各逻辑扇区的读位图和写位图,对所述存储空间进行读操作和写操作之前,所述方法还包括:
从所述存储空间的各逻辑扇区的预设擦除状态地址中读取各逻辑扇区的擦除状态;
当所述逻辑扇区的写位图中各物理块的写状态均为已写状态且读位图中各物理块的读状态均为已读状态时,或者当所述逻辑扇区的擦除状态为未擦除状态时,确定所述逻辑扇区为未擦除完逻辑扇区;
对所述未擦除完逻辑扇区进行擦除。
13.根据权利要求12所述的方法,其特征在于,所述预设擦除状态地址为所述逻辑扇区的最后一个物理块的最后一个地址。
14.根据权利要求1所述的方法,其特征在于,针对64位的读位图和64位的写位图,所述预设读写位图地址包括:低32位的写位图地址,为所述逻辑扇区的第一个物理块的最后4个字节;高32位的写位图地址,为所述逻辑扇区的第二个物理块的最后4个字节;低32位的读位图地址,为所述逻辑扇区的第三个物理块的最后4个字节;高32位的读位图地址,为所述逻辑扇区的第四个物理块的最后4个字节。
15.一种存储管理装置,其特征在于,所述装置包括:
读写位图获取模块,用于从存储空间的各逻辑扇区的预设读写位图地址中读取各逻辑扇区的读位图和写位图;所述逻辑扇区对应至少一个物理扇区,所述物理扇区包括多个物理块,所述读位图和所述写位图中分别存储有所述逻辑扇区对应的各物理块的读状态和写状态,所述读状态包括未读状态和已读状态,所述写状态包括未写状态和已写状态;所述存储空间对应非易失性存储器;
读写操作模块,用于根据所述各逻辑扇区的读位图和写位图,当存在逻辑扇区满足队尾条件时,确定所述逻辑扇区为队尾扇区,当存在逻辑扇区满足队头条件时,确定所述逻辑扇区为队头扇区,当所有逻辑扇区的写位图中各物理块的写状态均为未写状态时,确定起始逻辑扇区为队头扇区和队尾扇区,根据所述队尾扇区,对所述存储空间进行入队操作,或者,根据所述队头扇区,对所述存储空间进行出队操作;
其中,所述队尾条件包括:所述逻辑扇区的写位图中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态;或,所述逻辑扇区的写位图中各物理块的写状态均为未写状态且所述逻辑扇区的上一逻辑扇区的写位图中各物理块的写状态均为已写状态;
所述队头条件包括:所述逻辑扇区的读位图中部分物理块的读状态为已读状态且部分物理块的读状态为未读状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、所述逻辑扇区的写位图中部分或全部物理块的写状态为已写状态且所述逻辑扇区的上一逻辑扇区中各物理块的写状态均为未写状态;或,所有逻辑扇区的读位图中各物理块的读状态均为未读状态、除所述逻辑扇区以外的其它所有逻辑扇区的写位图中各物理块的写状态均为已写状态、所述逻辑扇区中部分物理块的写状态为已写状态且部分物理块的写状态为未写状态。
16.一种单片机,包括第一存储器、第二存储器和处理器,其特征在于,所述第一存储器为非易失性存储器且存储有计算机程序,所述第二存储器用于缓存数据,所述处理器执行所述计算机程序时实现权利要求1至14中任一项所述方法的步骤。
17.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至14中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148056.4A CN109918024B (zh) | 2019-02-28 | 2019-02-28 | 存储管理方法、装置、单片机设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910148056.4A CN109918024B (zh) | 2019-02-28 | 2019-02-28 | 存储管理方法、装置、单片机设备和可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109918024A CN109918024A (zh) | 2019-06-21 |
CN109918024B true CN109918024B (zh) | 2022-07-05 |
Family
ID=66962662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910148056.4A Active CN109918024B (zh) | 2019-02-28 | 2019-02-28 | 存储管理方法、装置、单片机设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109918024B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111061649B (zh) * | 2019-10-28 | 2023-09-29 | 宁波三星智能电气有限公司 | 一种存储器的存储空间自适应分配方法 |
CN110795275A (zh) * | 2019-10-28 | 2020-02-14 | 深圳忆联信息系统有限公司 | 基于异常掉电过程中的异常块识别方法和装置 |
CN112181725B (zh) * | 2020-09-25 | 2023-07-25 | 江苏恒宝智能系统技术有限公司 | 一种嵌入式系统的片内外数据掉电防拔备份方法及系统 |
CN114063910B (zh) * | 2021-10-28 | 2024-04-02 | 武汉光迅科技股份有限公司 | 文件处理方法及装置、文件处理系统及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5065354A (en) * | 1988-09-16 | 1991-11-12 | Compaq Computer Corporation | Queued posted-write disk write method with improved error handling |
CN1193410A (zh) * | 1995-06-15 | 1998-09-16 | 英特尔公司 | 在多处理器系统中的处理器之间传送消息的方法与装置 |
CN101075211A (zh) * | 2007-06-08 | 2007-11-21 | 马彩艳 | 基于sector访问的flash存储器的存储管理 |
CN101446921A (zh) * | 2008-12-23 | 2009-06-03 | 青岛海信宽带多媒体技术股份有限公司 | 一种Flash存储器的动态存储方法 |
CN103853669A (zh) * | 2014-03-21 | 2014-06-11 | 北京国芯威电子科技股份有限公司上海分公司 | 一种基于NOR Flash的存储管理方法 |
CN103902695A (zh) * | 2014-03-28 | 2014-07-02 | 山西奥克斯电子系统工程中心 | 存储文件加密保护及快速销毁的方法 |
CN108304331A (zh) * | 2018-01-30 | 2018-07-20 | 浙江鸿泉车联网有限公司 | 基于NorFlash的环形队列式数据存储方法及装置 |
-
2019
- 2019-02-28 CN CN201910148056.4A patent/CN109918024B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5065354A (en) * | 1988-09-16 | 1991-11-12 | Compaq Computer Corporation | Queued posted-write disk write method with improved error handling |
CN1193410A (zh) * | 1995-06-15 | 1998-09-16 | 英特尔公司 | 在多处理器系统中的处理器之间传送消息的方法与装置 |
CN101075211A (zh) * | 2007-06-08 | 2007-11-21 | 马彩艳 | 基于sector访问的flash存储器的存储管理 |
CN101446921A (zh) * | 2008-12-23 | 2009-06-03 | 青岛海信宽带多媒体技术股份有限公司 | 一种Flash存储器的动态存储方法 |
CN103853669A (zh) * | 2014-03-21 | 2014-06-11 | 北京国芯威电子科技股份有限公司上海分公司 | 一种基于NOR Flash的存储管理方法 |
CN103902695A (zh) * | 2014-03-28 | 2014-07-02 | 山西奥克斯电子系统工程中心 | 存储文件加密保护及快速销毁的方法 |
CN108304331A (zh) * | 2018-01-30 | 2018-07-20 | 浙江鸿泉车联网有限公司 | 基于NorFlash的环形队列式数据存储方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN109918024A (zh) | 2019-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109918024B (zh) | 存储管理方法、装置、单片机设备和可读存储介质 | |
US10552311B2 (en) | Recovery for non-volatile memory after power loss | |
US8041884B2 (en) | Controller for non-volatile memories and methods of operating the memory controller | |
US8775874B2 (en) | Data protection method, and memory controller and memory storage device using the same | |
US8046530B2 (en) | Process and method for erase strategy in solid state disks | |
CN108733510A (zh) | 数据储存装置及映射表重建方法 | |
US20130219106A1 (en) | Trim token journaling | |
US20080250188A1 (en) | Memory Controller, Nonvolatile Storage, Nonvolatile Storage System, and Memory Control Method | |
US8489942B1 (en) | Memory management method, and memory controller and memory storage device using the same | |
TWI436369B (zh) | 記憶裝置之使用壽命量測方法及系統內編程碼置換方法、及其資料儲存系統 | |
US20090037646A1 (en) | Method of using a flash memory for a circular buffer | |
JP2006285600A (ja) | 記憶装置、メモリ管理装置、メモリ管理方法及びプログラム | |
US9383929B2 (en) | Data storing method and memory controller and memory storage device using the same | |
CN103106143A (zh) | 固态储存装置及其逻辑至实体对应表建立方法 | |
US20080052444A1 (en) | Method for page random write and read in blocks of flash memory | |
CN107045423B (zh) | 存储器装置及其数据存取方法 | |
CN107291374A (zh) | 纪录数据区块的使用时间的方法及其装置 | |
US8762685B2 (en) | Data writing method, memory controller and memory storage apparatus | |
CN113885808A (zh) | 映射信息记录方法以及存储器控制电路单元与存储装置 | |
US10162540B2 (en) | Storage in flash memory | |
JP2006003966A (ja) | フラッシュメモリの書込方法 | |
JP4661369B2 (ja) | メモリコントローラ | |
CN116185563B (zh) | 一种基于车规级微控制器数据闪存的软件模拟算法 | |
EP2267725A1 (en) | Memory device for managing the recovery of a non volatile memory | |
JP3826115B2 (ja) | 記憶装置、メモリ管理方法及びプログラム |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 518000 Guangdong science and technology innovation and Research Institute, Shenzhen, Shenzhen, Nanshan District No. 6, science and technology innovation and Research Institute, Shenzhen, D 10, 1004, 10 Patentee after: Shenzhen Hetai intelligent home appliance controller Co.,Ltd. Address before: 518051 1004, 10th floor, block D, Shenzhen Institute of aerospace technology innovation building, no.6, South Keji Road, high tech Zone, Nanshan District, Shenzhen City, Guangdong Province Patentee before: SHENZHEN H&T DATA RESOURCES AND CLOUD TECHNOLOGY Ltd. |