一种利用flash存储数据的方法技术

技术编号:27434365 阅读:41 留言:0更新日期:2021-02-25 03:16
本发明专利技术提出了一种利用flash存储数据的方法,从flash中划出两个扇区,其中一个扇区存储数据,另一个扇区的固定几个字节被设定为存储最后一次写入的地址的偏移量;根据最后一次写入的地址的偏移量确定写入地址,读取最后一次的写入数据;比较当前数据和最后一次写入数据,判断是否可以直接写入;不可以的话,将写入地址往后偏移,并在另一个扇区记录写入地址;将要存储的数据存储于该写入地址。本发明专利技术提出的映射关系实现简单,转换速度快,大大降低应用程序的复杂性。用程序的复杂性。用程序的复杂性。

【技术实现步骤摘要】
一种利用flash存储数据的方法


[0001]本专利技术属于数据存储技术,具体为一种利用flash存储数据的方法。

技术介绍

[0002]flash闪存是属于内存器件的一种,以下简称为flash。闪存则是一种非易失性(Non-Volatile)内存,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。flash芯片一般分为若干个块(block),每个块又分为若干个扇区(sector),一般每个扇区有512字节~4096字节。在对flash写入过程中,不能将扇区中的任何一个位(bit)从0变成1,只能从1变成0。擦除操作可以将整个扇区的数据全部变为1,但是flash的扇区是有寿命限制的,一般每个扇区的擦除次数不能超过10万次。
[0003]当flash存储递增/递减量时,比如存储售票机票箱中的票数,票箱的票数一般情况是一直减少的,如果每次写入的时候,都擦除这个扇区,将会大大降低这个扇区的寿命。在实际操作过程中,读取flash的事件为纳秒级,而擦除flash扇区的时间为毫秒级甚至秒级,这段时间会使程序一直处于阻塞状态。因此,擦除扇区既耗费时间,又减少了flash的寿命。
[0004]另一种办法是把数据存储在缓冲区中,每隔一段时间写入一次,这种方法从某种程度上解决了问题,但是如果突然断电,未写入flash的数据将会丢失。

技术实现思路

[0005]本专利技术的目的在于提供一种利用flash存储数据的方法。
[0006]实现本专利技术目的的技术方案为:一种利用flash存储数据的方法,具体步骤为:
[0007]从flash中划出两个扇区,其中一个扇区存储数据,另一个扇区的固定几个字节被设定为存储最后一次写入的地址的偏移量;
[0008]根据最后一次写入的地址的偏移量确定写入地址,读取最后一次的写入数据;
[0009]比较当前数据和最后一次写入数据,判断是否可以直接写入;若可以,直接写入写入地址;若不可以,将写入地址往后偏移,并在另一个扇区记录写入地址,将要存储的数据存储于该写入地址。
[0010]优选地,其中一个扇区存储数据具体为:
[0011]将其中一个扇区划分成若干个单元,每个单元存储一个递增/递减数据。
[0012]优选地,根据最后一次写入的地址的偏移量确定写入地址的具体方法为:
[0013]每次断电重启后,从另一个扇区读取最后一次写入的地址的偏移量的映射;程序正常运行时,读取程序缓存的写入地址;
[0014]根据写入地址的偏移量和实际存储于另一个扇区的数据的转换关系,将实际存储于另一个扇区的数据转换为写入地址的偏移量,并且将偏移量乘以每个单元的大小size得到写入地址addr。
[0015]优选地,比较当前数据和最后一次写入数据,判断是否可以直接写入;不可以的话,将写入地址往后偏移,并在另一个扇区记录写入地址的具体步骤为:
[0016]根据要存储的递增/递减数据和实际存储于其中一个扇区数据的转换关系,将写入地址addr的内容转换为实际的数据,记为preData;
[0017]比较preData和要写入的数据的每四位,如果要写入的数据每四位都比preData的小,把要写入的数据转换为flash数据写入到扇区A的addr处,完成此次写入过程;如果要写入的数据的某个四位大于preData,则将写入地址往后偏移,即写入addr+=size处;
[0018]如果写入地址addr已经超过了其中一个扇区的大小,则擦除两个扇区内容并且使得写入地址addr等于0;
[0019]把写入地址addr除以size得到偏移量,把偏移量转换为flash数据,然后写入到另一个扇区。
[0020]优选地,将要存储的数据存储于写入地址的具体方法为:
[0021]根据要存储的递增/递减数据和实际存储于其中一个扇区的数据的转换关系,把要写入的数据转换为flash数据,然后写入到其中一个扇区的addr处,完成此次写入过程。
[0022]优选地,存储前擦除两个扇区,使两个扇区的数据每个bit都为1。
[0023]优选地,其中一个扇区的每个单元大小为size,将一个扇区的总大小除以size得到n,另一个扇区选用固定的n个位来保存写入地址的偏移量。
[0024]本专利技术与现有技术相比,其显著优点:
[0025](1)当flash用于存储的递增/递减数据时,利用本专利技术提出的方法,不需要每次先擦除扇区,满足条件下可以直接写入,不满足条件下可以把写入地址往后偏移后再写入,以flash数据的16位代表十进制的0~15,如果数据每次减1时,每8192次写入才需要擦除扇区,flash扇区的使用寿命足足提高到8192倍。
[0026](2)本专利技术提出的映射关系实现简单,转换速度快,大大降低应用程序的复杂性。
[0027]下面结合附图对本专利技术作进一步详细描述。
附图说明
[0028]图1是本专利技术的流程图。
具体实施方式
[0029]一种利用flash存储数据的方法,当flash存储递增/减量时,可以减少flash扇区擦除的次数,大幅度提高flash的寿命,包括如下步骤:
[0030]从flash中划出两个扇区,记为扇区A、B,扇区A存储递增/递减数据,扇区B的固定几个字节存储最后一次写入的地址的偏移量的映射,因为写入地址的变化是按倍数变化的,所以只需要记录偏移量即可。
[0031]将扇区A划分成若干个单元,每个单元足以存储一个递增/递减数据,记每个单位的大小为size,单位为字节。
[0032]使用前,先擦除两个扇区,使两个扇区的数据每个bit都为1。
[0033]需要定义两种映射关系,记为映射关系Ⅰ和映射关系Ⅱ。映射关系Ⅰ为要存储的递增/递减数据和实际存储于扇区A的数据的转换关系,表现为flash的数据的多个bit重新定
义一种新的数据,以存储递减数据为例,flash数据的二进制中“1”越少,代表的实际数据越小;映射关系Ⅱ为记录的写入地址的偏移量和实际存储于扇区B的数据的转换关系,映射关系Ⅱ和映射关系Ⅰ是同一个原理,例如,映射关系Ⅰ是flash数据的每16位代表十进制的0~15,映射关系Ⅱ是flash数据的每512位代表十进制的0~511。
[0034]以存储递减/递增数据为例,写入数据的过程具体包括以下步骤:
[0035]每次断电重启后,从扇区B读取最后一次写入的地址的偏移量的映射;程序正常运行时,不需要每次读取扇区B的内容,只需读取全局变量记录的写入地址。
[0036]根据映射关系Ⅱ,将写入地址的偏移量的映射转换为写入地址的偏移量,并且将偏移量乘以每个单元的大小size得到写入地址addr;
[0037]读取扇区A中addr的内容,根据定义的映射关系Ⅰ,将写入地址addr的内容转换为实际的数据,记为preData。
[0038]步本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种利用flash存储数据的方法,其特征在于,具体步骤为:从flash中划出两个扇区,其中一个扇区存储数据,另一个扇区的固定几个字节被设定为存储最后一次写入的地址的偏移量;根据最后一次写入的地址的偏移量确定写入地址,读取最后一次的写入数据;比较当前数据和最后一次写入数据,判断是否可以直接写入;若可以,直接写入写入地址;若不可以,将写入地址往后偏移,并在另一个扇区记录写入地址,将要存储的数据存储于该写入地址。2.根据权利要求1所述的利用flash存储数据的方法,其特征在于,其中一个扇区存储数据具体为:将其中一个扇区划分成若干个单元,每个单元存储一个递增/递减数据。3.根据权利要求1所述的利用flash存储数据的方法,其特征在于,根据最后一次写入的地址的偏移量确定写入地址的具体方法为:每次断电重启后,从另一个扇区读取最后一次写入的地址的偏移量的映射;程序正常运行时,读取程序缓存的写入地址;根据写入地址的偏移量和实际存储于另一个扇区的数据的转换关系,将实际存储于另一个扇区的数据转换为写入地址的偏移量,并且将偏移量乘以每个单元的大小size得到写入地址addr。4.根据权利要求1所述的利用flash存储数据的方法,其特征在于,比较当前数据和最后一次写入数据,判断是否可以直接写入;不可以的话,将写入地址往后偏移,并在另一个扇区记录写入地址的具体步骤为:根据要存储的递...

【专利技术属性】
技术研发人员:徐骏善郑银锋
申请(专利权)人:南京理工大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1