发明内容
本发明提供一种基于FLASH存储器的文件追加写操作方法,以解决现有技术中FLASH存储器存在的数据写入效率低、安全性差以及降低FLASH存储器使用寿命的问题。
本发明一个方面提供一种基于FLASH存储器的文件追加写操作方法,包括:
接收文件的追加写请求,根据所述追加写请求获取所述文件的第一目录信息;
根据文件的第一目录信息,确定所述文件的末端数据在FLASH存储器内的存储位置;
根据预设容量,读取所述预设容量的所述末端数据;
将所述预设容量的所述末端数据写入缓存,并将所述文件的所述第一目录信息中的编辑位设置为使能状态;所述编辑位的状态用于向所述追加写请求指明何时开始写入数据;以所述文件末端作为追加写的起始位置,接收所述追加写的数据内容;
所述追加写完成后,生成所述文件的第二目录信息。
可选的,所述第一目录信息包括:
所述文件的描述卷信息、所述文件的存储页卷信息;
相应的,所述根据文件的第一目录信息,确定所述文件的末端数据在FLASH存储器内的存储位置,包括:
根据所述描述卷信息,确定所述文件的起始端在FLASH存储器内的首端位置标识;
根据所述首端位置标识,在所述存储页卷信息中确定所述文件的末端在FLASH存储器内的末端位置标识;
根据所述末端位置标识,确定所述文件的末端数据在FLASH存储器内的存储位置。
可选的,所述追加写完成后,还包括:
对所述文件的所述第一目录信息进行更新;
所述更新包括:将所述第一目录信息中的文件状态位设置为无效状态;
相应的,所述方法还包括:
对所述第一目录信息中的文件状态位进行识别,若文件状态位为无效状态,则释放所述第一目录信息所占用的FLASH存储器的存储空间。
可选的,所述预设容量包括以下容量类型中的任意一种:以页为计算单位的容量、以块为计算单位的容量、以字节为计算单位的容量。
可选的,若所述预设容量以页为计算单位,且所述预设容量为一页的数据容量,则相应的,所述根据预设容量,读取所述预设容量的所述末端数据,将所述预设容量的所述末端数据写入缓存,包括:
读取所述文件的末页数据,将所述文件的末页数据写入缓存;
相应的,所述接收所述追加写的数据内容包括:以页为单位在FLASH存储器中连续写入所述追加写的数据内容;
或者,包括:以页为单位,在FLASH存储器中每写入一页数据内容,在所述存储页卷信息中对所述文件的所述末端位置标识进行一次更新,并在所述缓存中对写入的所述末端数据进行一次更新后,继续在FLASH存储器中写入下一页内容。
可选的,所述方法还包括:
在所述接收所述追加写的数据内容的过程中,若发生通信中断,则在通信恢复后,根据所述缓存中存储的末端数据,擦除所述FLASH存储器内的对应的末端数据以及所述末端数据后所追加写入的数据内容;
将缓存中当前存储的末端数据写入所述FLASH存储器,再在所述末端数据后追加数据内容。本发明还一个方面提供一种基于FLASH存储器的文件追加写操作装置,包括:接收模块,用于接收文件的追加写请求;
获取模块,用于根据所述追加写请求获取所述文件的第一目录信息;
确定模块,用于根据文件的第一目录信息,确定所述文件的末端数据在FLASH存储器内的存储位置;
读取模块,用于根据预设容量,读取所述预设容量的所述末端数据;
写入模块,用于将所述预设容量的所述末端数据写入缓存,并将所述文件的所述第一目录信息中的编辑位设置为使能状态;所述编辑位的状态用于向所述追加写请求指明何时开始写入数据;
所述接收模块,还用于以所述文件末端作为追加写的起始位置,接收所述追加写的数据内容;
生成模块,用于在所述追加写完成后,生成所述文件的第二目录信息。
可选的,所述第一目录信息包括:
所述文件的描述卷信息、所述文件的存储页卷信息;
相应的,所述确定模块,具体用于根据所述描述卷信息,确定所述文件的起始端在FLASH存储器内的首端位置标识;根据所述首端位置标识,在所述存储页卷信息中确定所述文件的末端在FLASH存储器内的末端位置标识;根据所述末端位置标识,确定所述文件的末端数据在FLASH存储器内的存储位置。
可选的,所述装置还包括:
更新模块,用于对所述文件的所述第一目录信息进行更新,具体用于将所述第一目录信息中的文件状态位设置为无效状态;
相应的,所述装置还包括:
识别模块,用于对所述第一目录信息中的文件状态位进行识别,若文件状态位为无效状态,则释放所述第一目录信息所占用的FLASH存储器的存储空间。
可选的,所述预设容量包括以下容量类型中的任意一种:以页为计算单位的容量、以块为计算单位的容量、以字节为计算单位的容量。
可选的,若所述预设容量以页为计算单位,且所述预设容量为一页的数据容量,则相应的,
所述读取模块,具体用于读取所述文件的末页数据;
所述写入模块,具体用于将所述文件的末页数据写入缓存;
所述接收模块,具体用于以页为单位在FLASH存储器中连续写入所述追加写的数据内容;或者,具体用于以页为单位,在FLASH存储器中每写入一页数据内容,在所述存储页卷信息中对所述文件的所述末端位置标识进行一次更新,并在所述缓存中对写入的所述末端数据进行一次更新后,继续在FLASH存储器中写入下一页内容。
可选的,所述装置还包括:
擦除模块,用于在所述接收模块接收所述追加写的数据内容的过程中,若发生通信中断,则在通信恢复后,根据所述缓存中存储的末端数据,擦除所述FLASH存储器内的对应的末端数据以及所述末端数据后所追加写入的数据内容;
所述写入模块,还用于将缓存中当前存储的末端数据写入所述FLASH存储器,再在所述末端数据后追加数据内容。
由上述技术方案可知,本发明提供的基于FLASH存储器的文件追加写操作方法及装置,该方法通过接收追加写请求,并根据文件的第一目录信息,确定出文件的末端数据在FLASH存储器内的存储位置;然后根据预设容量,读取出预设容量的末端数据;将读取出的末端数据写入缓存中,并将文件的第一目录信息中的编辑位设置为使能状态,以启动追加写的操作。其中,以文件末端作为追加写的起始位置开始接收追加写的数据内容,并在追加写操作完成后,生成文件的第二目录信息。上述对FLASH存储器进行追加写的方法简单、便捷、高效。通过对文件末端进行准确定位,可以精准地仅将文件末端数据进行缓存保护,相较于现有技术对全部文件数据进行缓存保护,节省了文件移动的数量和时间,且极大降低了追加过程中数据丢失的概率,同时,减少了对FLASH的擦除区域面积和次数,在数据通讯不中断的情况下,无需对FLASH内的文件数据存储区进行擦除操作,保证了FLASH存储器的使用寿命。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一示例性实施例示出的基于FLASH存储器的文件追加写操作方法的流程图,本发明实施例的基于FLASH存储器的文件追加写操作方法可以应用于各种使用闪存作为存储信息介质的***。如图1所示,本实施例提供一种基于FLASH存储器的文件追加写操作方法,包括:
步骤101、接收文件的追加写请求,根据追加写请求获取文件的第一目录信息。
FLASH存储器接收用户对文件进行追加写的请求,在该请求中会包含有需要进行追加写的文件的存储信息,例如,文件名等标识信息,根据该存储信息,FLASH存储器确认该需要被追加写的文件存储在该存储器内,并获取该文件的目录信息,所谓目录信息就是记载该文件详细的存储信息的目录文件,例如,可以包括:文件名、文件存储位置、文件大小、文件类型、文件描述等等。为了与后面追加写操作完成后重新建立的目录信息以示区别,在该步骤中,目录信息以第一目录信息进行标识。
步骤102、根据文件的第一目录信息,确定文件的末端数据在FLASH存储器内的存储位置。
根据该第一目录信息中记载的文件存储信息,可以定位到该文件在存储器中的存储位置,也就是定位到文件的末端数据在存储器中的存储位置,之所以要定位文件末端数据,主要考虑追加写操作一般都是从该文件的末端继续记录数据内容,因此,精确定位到文件末端,而不需要对文件的其他段落进行准确定位,可以加快文件定位的效率,节省文件定位操作的处理资源。
步骤103、根据预设容量,读取预设容量的末端数据。
步骤104、将预设容量的末端数据写入缓存,并将文件的第一目录信息中的编辑位设置为使能状态。
所谓预设容量,指的是预设的数据容量,容量最小衡量单位为比特Bit。对于存入缓存的文件末端的数据容量,可以以预设的容量进行截取,例如,预设容量为若干个字节Byte、若干块block或若干页Page。因此,该预设容量可以包括以下容量类型中的任意一种:以页为计算单位的容量、以块为计算单位的容量、以字节为计算单位的容量。通常来说,1比特、1字节的数据容量太小,可以定义比字节大很多的页作为衡量数据容量的单位,FLASH存储器在进行擦除等操作时,可以以页为单位进行一页一页的内容擦除。例如,有些FLASH存储器分为大页(每页2048+64字节)和小页(每页512+16字节)等。还可以定义块,以块作为容量衡量单位,如有些FLASH存储器包含2048个块,则可以以块为擦除的最小单位,每个块还可以包含64个页,每页有2048+64个字节等。需要说明的是,预设容量的大小及衡量单位可以由本领域技术人员根据存储器的处理性能自行进行设定,本发明对此不作具体限定。根据预设容量,将文件末端的数据写入缓存,例如,将文件末端最后一页的数据量写入缓存中,进行备份保护,然后将文件的第一目录信息中的编辑位设置为使能状态。所谓编辑位就是用于向追加写请求指明何时开始写入数据,指示其现在可以开始对文件进行追加写入的操作了。以下内容中,未做特殊说明的,均以页作为衡量文件数据量的单位,并以页来描述下述的具体实施方案。
步骤105、以文件末端作为追加写的起始位置,接收追加写的数据内容。
步骤106、追加写完成后,生成文件的第二目录信息。
在步骤101中提到过,目录信息就是用于记录文件的各项存储信息的文档,而第一目录信息是文件在进行追加写操作前的存储信息,第二目录信息则是对文件发生改变后,也就是追加写入进一步数据内容后,新生成的描述该文件存储信息的目录信息。因此,此时在存储器中针对该文件存在两份目录信息,第一目录信息和第二目录信息。之所以不根据追加写后的文件对第一目录信息进行更新,而要新生成一份第二目录信息,是因为FLASH存储器自身的写特征所决定的,也就是在背景技术中提到过的,FLASH存储器进行写操作时,只能把相应的位由1写为0,在FLASH中写数据不能像RAM一样可以随意改写,写过数据的地方要擦除后才能写。因此,对于第一目录信息中写为0的位,必须先擦除,得到均为1的位,才能再次写入。然而,擦除操作通常比写入操作耗时长,因此,为了提升追加写的处理效率,可以新生成一个目录信息,也就是第二目录信息,以标识追加写操作后的文件存储信息。
本实施例提供的基于FLASH存储器的文件追加写操作方法,通过接收追加写请求,并根据文件的第一目录信息,确定出文件的末端数据在FLASH存储器内的存储位置;然后根据预设容量,读取出预设容量的末端数据;将读取出的末端数据写入缓存中,并将文件的第一目录信息中的编辑位设置为使能状态,以启动追加写的操作。其中,以文件末端作为追加写的起始位置开始接收追加写的数据内容,并在追加写操作完成后,生成文件的第二目录信息。上述对FLASH存储器进行追加写的方法简单、便捷、高效。通过对文件末端进行准确定位,可以精准地仅将文件末端数据进行缓存保护,相较于现有技术对全部文件数据进行缓存保护,节省了文件移动的数量和时间,且极大降低了追加过程中数据丢失的概率;同时,减少了对FLASH的擦除区域面积和次数,在数据通讯不中断的情况下,无需对FLASH内的文件数据存储区进行擦除操作,保证了FLASH存储器的使用寿命。
图2为本发明另一示例性实施例示出的基于FLASH存储器的文件追加写操作方法的流程图,如图2所示,基于上述实施例,本实施例提供一种基于FLASH存储器的文件追加写操作方法,包括:
步骤201、接收文件的追加写请求,根据追加写请求获取文件的第一目录信息。
该第一目录信息包括:文件的描述卷信息、文件的存储页卷信息。其中,卷表示用于保存一类数据的一个或多个连续页。
步骤202、根据描述卷信息,确定文件的起始端在FLASH存储器内的首端位置标识。
步骤203、根据首端位置标识,在存储页卷信息中确定文件的末端在FLASH存储器内的末端位置标识。
步骤204、根据末端位置标识,确定文件的末端数据在FLASH存储器内的存储位置。
具体的,如图3所示,可以将FLASH存储结构分为文件的目录信息和文件的数据存储区,文件的目录信息包括用于描述文件信息的文件描述卷信息和用于指示页的分配使用情况的存储页卷信息,文件的目录信息仅占用少数的存储页资源;文件的数据存储区用于存储文件数据,占用FLASH的大部分存储页资源。
其中,文件描述卷,用于描述存储文件的信息,其每一项对应FLASH中保存的一个文件的文件描述,内容是文件信息及文件的起始页号,每项结构如表1所示:
表1
名称 |
占用字节 |
文件描述长度 |
2 |
文件属性 |
2 |
文件生成时间 |
8 |
文件起始页号 |
2 |
文件长度 |
4 |
文件校验字 |
16 |
保留区 |
16 |
文件名长度 |
2 |
文件名 |
不定 |
从表1中可以看出文件的描述卷信息用于记录存储文件的信息,主要的内容包括:文件属性、文件起始页号、文件长度、文件名以及其它信息。其中,文件名、文件起始页号和文件长度对于FLASH文件数据的写入、读取和擦除起重要的索引作用,能准备快速地定位到执行任务的地址区域,有助于快速响应指令。文件属性用于描述文件的状态,占用两个字节共16位。其中,占用2字节的文件属性的结构如图4所示,第0位标识此文件是否为可读的标志位,第1位标识此文件是否为可写的标识位,第15位为之前提到的编辑位,若此位被设置为使能状态,即写入0,则表示此文件可以开始编辑、或此文件当前正在编辑,则可以在此文件的末页后写入新的内容。其它位为保留位,可供本领域技术人员对文件属性进行其他功能设定之用。通过第15位的标识状态,可以识别该文件目前的状态,实现在FLASH文件中直接追加文件数据。
存储页卷(如图5、图6所示),用于指示页的分配使用情况,表示了文件数据保存的页的链表结构。存储页卷包括项号和内容,存储页卷内的每一项是一个16位的整数,占用两个8位字节,所以从存储页起始点开始的编址是项序号的两倍(如图5所示)。每个项保存的地址顺序与序号一致,如图5所示,项号0在0编址处,项号1在2编址处......项号100在200编址处,每个项号与对应的存储页的页码一一对应,即项号0对应页0,项号1对应页1,项号2项对应页2。图6中的项的“内容”表示文件数据的下一个存储页的页号,则该存储页卷的一级一级链表结构显示了文件从第一页到最后一页的线索表,例如第000BH项的内容为0010H,则表示第000BH页的下一页是0010H页,而0010H页的下一页是0013H页;再例如,若第100H项的地址是第200H字节,若此两字节的内容是70H,这表示所在文件使用了第100H页的数据区,此文件所用的下一页号为70H。这样,通过文件描述卷获知文件起始页号,再通过存储页卷的链表确定出文件的末页页号,从而可以精准地找到文件的末端位置标识,即末页的存储地址。此外,对每个项的“内容”还可以作如下限定:1)0x0000表示此项对应页的数据已无效;2)0xFFFF表示对应页没写数据;3)0x7FFF表示文件的结尾;4)0x0006表示***区;5)0x0003表示此页是坏页。由于每个项保存的地址顺序与序号一致,每个项的项号与存储页页号一一对应,项的内容只是文件数据的下一个存储页的页号,因此,通过项号和FLASH存储区编址的映射关系、项号与页号的对应关系,在文件描述卷中读出文件的起始页号后,能快速定位文件在FLASH存储器中的起始地址以及根据存储页卷的文件链表结构,获取文件下一个存储页的页号和地址,按顺序读取存储在FLASH中的文件数据。如图6所示的FALSH文件存储结构的例子,将FLASH存储区分为文件目录区(A)和文件存储区(B),目录区(A)包括文件描述卷(A1)和存储页卷(A2)。从文件描述卷(A1)可知,本文件的文件名为test.txt,文件长度为0x0900,文件起始页号为:0x000b,文件属性为0xC003,即1100 0000 00000011,根据文件属性定义可知,第0位和第1位置1,可用于标识此文件不可读不可写;若文件属性为0xC000,即1100 0000 0000 0000,则对应的第0位和第1位被写入0,可用于标识此文件可读可写;其中,编辑位第15位为1,表示此文件状态正常,暂时没有追加写的请求;第14位的1可以用来标识文件的状态,“1”表示该文件没有进行过追加写操作,“0”表示该文件完成了追加写操作。例如,若该文件还没有被进行过追加写操作,意味着没有新的目录信息(即第二目录信息)生成,则该文件当前仅有一个目录信息(即第一目录信息),且该第一目录信息是有效的。若该文件进行过了追加写操作,则相应的,第15位应该被写入0,追加写完成后,再将第14位写入0,以表示有新的第二目录信息生成,该第一目录信息无效,可以考虑擦除该第一目录信息所占用的FLASH存储器的空间,对于该无效位的说明在后续的内容中将会有详细的描述。从存储页卷(A2)可知,文件的初始存储页页号为0x000B,第二页页号为0x0010,第三页页号为0x0013,由于在存储页卷中,0x0013项的内容为0x0001,表示文件数据已写完,则文件test.txt的文件数据依次存储在0x000B、0x0010和0x0013页内,0x0013为文件的末页存储数据。
步骤205、根据预设容量,读取预设容量的末端数据。
步骤206、将预设容量的末端数据写入缓存,并将文件的第一目录信息中的编辑位设置为使能状态。
在首次将文件数据写入FLASH存储器后,当需要继续对该文件追加文件数据时,根据上述步骤根据文件描述卷的文件起始页号搜索文件的起始页,并根据存储页卷的文件存储页链表搜索文件的末页数据地址,然后,就可以将文件的末页数据写入缓存Buffer中进行保存了,并且在识别到文件属性的第15位编辑位被设置为使能状态的情况下,开始执行下面的追加写入操作。
步骤207、以文件末端作为追加写的起始位置,接收追加写的数据内容。
具体的,在读取文件的末页数据,并将文件的末页数据写入缓存后,追加写的具体写入过程可以有如下两种方式:
方式一、以页为单位在FLASH存储器中连续写入追加写的数据内容,具体为:
S1、在FLASH存储器的文件数据末页开始追加写数据;
S2、文件追加写的内容全部写入后,生成此文件的新的文件目录(即第二目录信息),其中包含新的文件描述和新的存储页卷,还可以将原来的文件目录设置为无效。
方式二、以页为单位,在FLASH存储器中每写入一页数据内容,在存储页卷信息中对文件的末端位置标识进行一次更新,并在缓存中对写入的末端数据进行一次更新后,继续在FLASH存储器中写入下一页内容,直到接收全部追加的数据内容,具体为:
S1、在FLASH存储器的文件数据末页开始追加写数据;
S2:文件追加写满一页,更新第一目录信息的文件存储页卷,即存储页卷所显示的末页的位置标识被更新为新追加的一页的页码所在的位置,同时将当前新写入的末页数据存入缓存Buffer中覆盖原来的末页数据,然后继续在下一空页中追加写入数据;
S3:重复S2直至全部文件追加写完成。
S4:文件追加写完成,生成此文件的新的文件描述卷和存储页卷,设置原来的文件目录无效,这样无效文件目录所占的目录区位置可以释放并重新使用。
在上述任一种接收追加写的数据内容的过程中,若发生通信中断,则在通信恢复后,可以根据缓存中存储的末端数据,擦除FLASH存储器内的对应的末端数据以及末端数据后所追加写入的数据内容;并将缓存中当前存储的末端数据写入该FLASH存储器,再在末端数据后追加数据内容。
具体的,针对第一种追加写方式,若中途出现通讯中断或断电中断,则需要并将末页数据及后续追加写的数据所在的页擦除,再从缓存中取出之前存入的末页数据,再在末页数据后重新开始追加写过程。针对第二种追加写方式,由于末页数据随着追加写过程在被不断的更新,因此,若发生中断的情况,从缓存中取出的是最新的末页数据,则需要擦除及重新追加写的数据内容会相较于第一种方式数据量少。
步骤208、追加写完成后,对文件的第一目录信息进行更新。
步骤209、对第一目录信息中的文件状态位进行识别,若文件状态位为无效状态,则释放第一目录信息所占用的FLASH存储器的存储空间。
具体的,对文件的第一目录信息进行更新包括:将第一目录信息中的文件状态位设置为无效状态。在之前提到的文件属性中给出第14位,用于标识此文件的目录是否有效。若文件目录已无效该位为0,若文件目录是有效的该位为1。也就是说,当追加写完成后,将追加写前的文件目录,也就是第一目录中的第14位写入0,以表示该第一目录信息已经无效,可以将该第一目录信息占用的FLASH存储器的存储空间释放。因此,该第14位指示了是否需要对该存储区域进行擦除的指示,以及时清理无效的文件内容。
步骤210、追加写完成后,生成文件的第二目录信息。
其中,步骤208、步骤210不分先后顺序,也可以同时执行。
通过在文件属性中设置第14位标识文件目录是否无效,以及第15位当前文件是否正在进行追加写的编辑状态,从而使得在上述的两种追加写过程中,如果写过程通讯中断则***可以根据追加的文件目录的情况进行判断和处理:1)若文件的追加写操作正常处理完,已建立同名的新的文件目录(即文件的第二目录信息已经生成),则此时新的文件目录的文件属性中第15位编辑位的状态应该为1(没有追加写请求)、文件目录的文件属性中第14位无效位的状态应该为1(该文件目录有效,该文件没有被追加写过);同时,该文件原先的文件目录(即文件的第一目录信息)的文件属性中的第15位编辑位的状态应该为0,表示此文件可以被追加写入内容;第14位无效位的状态应该为0,表示此文件已经被追加写并且生成了新的文件目录,因此该目录已无效。2)如果文件在追加写过程中出现通讯中断,则原文件的编辑位为0(正在追加写中),此时,由于中断因此新的文件描述卷还没有被建立,待通讯恢复后,擦除文件末页数据,并依据之前写入Buffer的内容重新写入文件末页数据,重新开始追加写入数据。3)如果通讯中断时,文件的新文件目录已建立,原文件目录的编辑位为0(该文件执行过追加写),目录无效位为1(由于中断,则***还未来得及将原文件的无效位置0),若识别得到新的文件目录正确,则将原文件目录的无效位置0,无效原文件目录即可。
本实施例,在通讯可能出错的情况下,可以保证高效地追加文件数据,并且在不出错的情况下不需要擦除FLASH文件数据存储区域,即使文件数据在追加过程中出现通讯中断的情况,也只需擦除末页文件数据即可重新追加写入,此方法使得在追加过程中数据不会丢失,并且保证了FLASH的使用寿命。由于FLASH文件的擦除时间比读取数据的时间长,因此,写满一页后更新缓存Buffer的数据,使得在通讯中断的情况下,只需擦除末页文件数据,节省时间,减少擦除的区域,并且每次存入缓存中的数据仅为一页,只需较小的容量的缓存即可,保证了FLASH的使用寿命。
图7为本发明一示例性实施例示出的基于FLASH存储器的文件追加写操作装置的结构示意图,如图7所示,该基于FLASH存储器的文件追加写操作装置,包括:
接收模块1,用于接收文件的追加写请求。获取模块2,用于根据追加写请求获取文件的第一目录信息。确定模块3,用于根据文件的第一目录信息,确定文件的末端数据在FLASH存储器内的存储位置。读取模块4,用于根据预设容量,读取预设容量的末端数据。写入模块5,用于将预设容量的末端数据写入缓存,并将文件的所述第一目录信息中的编辑位设置为使能状态;该编辑位的状态用于向追加写请求指明何时开始写入数据。该接收模块1,还用于以文件末端作为追加写的起始位置,接收追加写的数据内容。该装置还包括:生成模块6,用于在追加写完成后,生成文件的第二目录信息。
该实施例的实现原理与上述图1所示方法实施例的实现原理相似,在此不再赘述。
本实施例提供的基于FLASH存储器的文件追加写操作装置,通过接收追加写请求,并根据文件的第一目录信息,确定出文件的末端数据在FLASH存储器内的存储位置;然后根据预设容量,读取出预设容量的末端数据;将读取出的末端数据写入缓存中,并将文件的第一目录信息中的编辑位设置为使能状态,以启动追加写的操作。其中,以文件末端作为追加写的起始位置开始接收追加写的数据内容,并在追加写操作完成后,生成文件的第二目录信息。上述对FLASH存储器进行追加写的方法简单、便捷、高效。通过对文件末端进行准确定位,可以精准地仅将文件末端数据进行缓存保护,相较于现有技术对全部文件数据进行缓存保护,节省了文件移动的数量和时间,且极大降低了追加过程中数据丢失的概率;同时,减少了对FLASH的擦除区域面积和次数,在数据通讯不中断的情况下,无需对FLASH内的文件数据存储区进行擦除操作,保证了FLASH存储器的使用寿命,在数据通讯可能中断的情况下,保证了追加写数据的安全和稳定性。
图8为本发明另一示例性实施例示出的基于FLASH存储器的文件追加写操作装置的结构示意图,如图8所示,在上述实施例的基础上,第一目录信息包括:文件的描述卷信息、文件的存储页卷信息。相应的,确定模块3,具体用于根据描述卷信息,确定文件的起始端在FLASH存储器内的首端位置标识;根据首端位置标识,在存储页卷信息中确定文件的末端在FLASH存储器内的末端位置标识;根据末端位置标识,确定文件的末端数据在FLASH存储器内的存储位置。
可选的,该装置还包括:更新模块7,用于对文件的第一目录信息进行更新,具体用于将第一目录信息中的文件状态位设置为无效状态。识别模块8,用于对第一目录信息中的文件状态位进行识别,若文件状态位为无效状态,则释放第一目录信息所占用的FLASH存储器的存储空间。
可选的,预设容量包括以下容量类型中的任意一种:以页为计算单位的容量、以块为计算单位、以字节为计算单位的容量。
可选的,若预设容量以页为计算单位,且预设容量为一页的数据容量,则相应的,读取模块4,具体用于读取文件的末页数据。写入模块5,具体用于将文件的末页数据写入缓存。接收模块1,具体用于以页为单位在FLASH存储器中连续写入追加写的数据内容;或者,具体用于以页为单位,在FLASH存储器中每写入一页数据内容,在存储页卷信息中对文件的末端位置标识进行一次更新,并在缓存中对写入的末端数据进行一次更新后,继续在FLASH存储器中写入下一页内容。
可选的,该装置还包括:擦除模块9,用于在接收模块1接收追加写的数据内容的过程中,若发生通信中断,则在通信恢复后,根据缓存中存储的末端数据,擦除FLASH存储器内的对应的末端数据以及末端数据后所追加写入的数据内容;写入模块5,还用于将缓存中当前存储的末端数据写入FLASH存储器,再在末端数据后追加数据内容。
该实施例的实现原理与上述图2所示方法实施例的实现原理相似,在此不再赘述。
通过上述各个实施例,本发明克服了现有的FLASH文件数据追加写入方法效率低、安全性差以及降低FLASH芯片寿命的问题。通过在FLASH芯片的文件目录部分使用两个标识位,分别表示此文件正在编辑和此文件目录已无效,根据标识位的状态,实现在FLASH文件中直接追加文件数据,并且写过程中如果通讯中断,则***可根据追加的文件目录的情况进行判断和处理,提高FLASH文件数据追加的效率、安全性和稳定性,并减少FLASH芯片的擦除次数。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。