避免非易失存储器过擦写的方法与流程

文档序号:17335383发布日期:2019-04-05 22:25阅读:340来源:国知局
避免非易失存储器过擦写的方法与流程

本发明涉及仪器仪表技术领域,尤其是涉及一种通过统计擦写次数避免非易失存储器过擦写的方法。



背景技术:

仪器仪表要保存大量的历史数据,因而需要大容量的非易失存储器,用来存放这些历史数据。大容量flash是目前仪器仪表上广泛使用的性价比高的非易失存储器,但flash(flash是存储芯片的一种,全名叫flasheeprommemory,flash存储器又称闪存,它结合了rom和ram的长处,不仅具备电子可擦除可编程的性能,还可以快速读取数据,使数据不会因为断电而丢失)的最大问题在于写新数据前,必须对原空间所在页(page)进行擦除处理,而每页的擦写次数是有限的,一般flash也就只有10万次的页擦写次数,有的更低。超过其允许的擦写次数,器件就会损坏,从而造成整机损坏。

每个程序员对非易失存储器flash的擦写操作非常谨慎,尽管想千方百计避免频繁擦写,但受程序员自身经验及水平所限,很容易出现过擦写现象。同时由于非易失存储器flash可以承受10万次的擦除次数,因而尽管由于规划或程序考虑不周会造成过擦写,但常规测试手段很难发现。往往都是运行了很长一段时间才出现问题,而此时设备已经不能正常运行了。本发明可以很好的解决这种困境,可以在内部测试期间就发现问题,从而将隐患消灭在出厂前。



技术实现要素:

有鉴于此,本发明的目的在于提供一种避免非易失存储器过擦写的方法。

为实现上述目的,本发明提出了一种避免非易失存储器过擦写的方法,该方法包括初始化,统计并锁定异常,信息外传。

初始化:上电或超过约定的时间t,对信息记录单元中的变量flash_erase执行初始化。

统计并锁定异常:筛选信息记录单元中的变量flash_erase中记录的非易失存储器flash页地址,从中锁定那些最多擦写的页地址。

信息外传:定时检查记录的数据,当页地址发生过擦除时,将异常地址信息外传;

作为优选,所述的筛选信息记录单元中的变量flash_erase中记录的非易失存储器flash页地址,从中锁定那些最多擦写的页地址包括如下步骤:

应用程序每次擦除非易失存储器flash的页时,调用统计函数;

判断该页地址是否包含在信任地址序列,如是信任地址,则跳出函数,正常返回;如不是信任地址,判断该页地址是否曾记录过;

判断该页地址是否曾记录过,如记录过,判断相应的擦写次数erase_num是否小于0xff,如小于0xff,则擦写次数erase_num加1,如加1后大于一定时间t内允许擦写的最多次数erasemax,异常返回,暂时终止对该地址的擦写;如等于0xff,则异常返回;如该页地址没有记录过,则判断flash_erase[pagemax]全范围内是否有擦写次数erase_num=0,所述flash_erase[pagemax]为定义的变量,用来记录最多锁定页数pagemax个擦写的页地址及擦写次数;

判断flash_erase[pagemax]全范围内是否有擦写次数erase_num=0的,为零,说明没有记录过,可将本次地址记录到该页地址page_addr,同时相应的擦写次数erase_num置为1;不为零,判断全部的擦写次数erase_num是否大于一定时间t内允许擦写的最多次数erasemax;

判断全部的擦写次数erase_num是否大于一定时间t内允许擦写的最多次数erasemax,如果是,则返回;如果否,则表明擦写次数erase_num全部非0,表示最多锁定页数pagemax全范围都有了统计记录,此时从flash_erase[pagemax]全范围中找出x(0<x<pagemax)个擦除次数最多的保留不变,从其余pagemax-x个找到最早记录的那个页地址page_addr,用新地址覆盖该空间,同时相应的erase_num置为1;

每次更新flash_erase后,重新排序,按照时间点由近到远依次排列,新更新的地址放在flash_erase[0]。

作为优选,所述的信息外传包括如下步骤:

定时检查flash_erase[pagemax]中记录的数据;

检索是否有页地址page_addr的擦写次数erase_num大于时间t内允许擦写的最多次数erasemax,如果有页地址的擦写次数erase_num大于erasemax,则说明有页地址发生了过擦除;

将异常地址信息外传。

作为优选,所述的异常地址信息外传方式有:主动上传异常模式,外设召读异常模式或显示异常模式。

如果仪器仪表具备主动上传的功能,此时可将异常地址信息通过主动上传异常模式上传;如果不具备主动上传功能,可通过外设召读异常模式上传,在其他外部设备召读数据仪表应答时,携带异常出错标志,外部设备在收到异常标志后,发起召读异常信息;如果不具备通讯功能,可通过显示异常模式上传,所述的显示异常模式可通过lcd输出或led提醒。

作为优选,所述的信任地址为特地时间内会进行频繁擦写的地址。

作为优选,所述的一定时间t内允许擦写的最多次数erasemax可根据下式计算:

erasemax<=max_erase/designlife*365

其中,max_erase为非易失存储器flash的最大擦写次数,designlife为仪器仪表设计寿命。

作为优选,所述的最多锁定页数pagemax取5到20页。

与现有技术相比本发明的有益效果在于:本发明通过实时统计非易失flash的擦写次数,从中锁定一些最频繁被擦写的地址,对于超过约定擦写次数的地址,可以暂时中止擦写,停止进一步对非易失flash的损伤,同时通过通讯、显示,将异常地址上报,从而便于程序员知道问题隐患并可及时定位问题所在,可以在内部测试期间就发现问题,从而将隐患消灭在出厂前,可提高非易失存储器的使用寿命,降低生产成本。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的避免非易失存储器过擦写的方法的总流程示意图;

图2是本发明实施例提供的避免非易失存储器过擦写的方法的初始化流程图;

图3为本发明实施例提供的避免非易失存储器过擦写的方法的统计并锁定异常流程图;

图4是本发明实施例提供的避免非易失存储器过擦写的方法的信息外传流程图;

图5是本发明实施例提供的避免非易失存储器过擦写的方法中的主动上传异常流程图;

图6是本发明实施例提供的避免非易失存储器过擦写的方法中的外设召读异常流程图;

图7是本发明实施例提供的避免非易失存储器过擦写的方法中的显示异常流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明上述的和另外的技术特征和优点作更详细的说明。

为了尽早知道问题隐患并及时定位问题所在,在内部测试期间就发现问题,从而将隐患消灭在出厂前,本发明提出了一种通过统计非易失存储器擦写次数,避免非易失存储器过擦写造成设备提早损坏的方法。

根据仪器仪表的设计使用寿命,计算出一段时间内允许擦写的最多次数erasemax。这里的一段时间t可以是一天,也可以是几天,也可以是1个月,但也不宜时间太长,以1天为宜。假设仪器仪表设计寿命是10年,以1天作为统计时间段,如非易失存储器flash的最大擦写次数max_erase为10万次,则一天内最大擦写次数erasemax<=max_erase/10*365=27.39,考虑一定的裕量,最大擦写次数erasemax选取为25。

非易失flash容量较大,一般都是以mbyte为基本单位,相应的页数量(page)也很多,如果对每个page的擦写都记录,消耗的mcu的资源就会很大,因而定义最多锁定页数pagemax。最多锁定页数pagemax可以任意定义,但也不宜定义太大,要综合考虑mcu的资源,定义为5页至20页中的任意数值比较适中。

定义一个结构:

typedefstruct__find_erase{

unsignedcharpage_addr[max_unit];

unsignedcharerase_num;

}stfind_erase。

该结构包含:页地址page_addr和对应该页的擦除次数erase_num。页地址长度根据非易失存储器flash的大小确定,如果非易失存储器flash的页数量小于0xffff,max_unit可以定义为2个字节,超过0xffff,根据实际情况定义为3个字节或4个字节等。这里之所以定义为unsignedchar而非定义为unsignedshort或unsignedint,是考虑到编译器的对齐特性,如定义为unsignedshort,同样的功能,编译后占用的ram资源却要多。定义变量stfind_eraseflash_erase[pagemax],用来记录pagemax个擦写的页地址及擦写次数。

由于在某段时间可能会对某些空间频繁擦写,比如在仪器仪表首次上电运行时,需要设置许多正常运行所必须的参数,相应的就会对存储参数的空间频繁写操作,擦写次数可能会超过规定的限制。因此,将特地时间内会进行频繁擦写的地址称为信任地址。根据实际情况,定义n(n为正整数)个可信任的地址,trust1、trust2…trustn,这n个地址需要程序员根据实际情况定义。对信任地址的擦写,不受限制。因为信任地址不会循环写,只在一段时间内擦写,其他时间并不会擦写。

完整的实现包含3部分,包括初始化,统计并锁定异常和信息外传三个模块。如图1所示,具体包括如下步骤:

s1:上电或超过约定的时间t,对信息记录单元中的变量flash_erase执行初始化;

s2:筛选信息记录单元中的变量flash_erase中记录的非易失存储器flash页地址,从中锁定那些最多擦写的页地址;

s3:定时检查记录的数据,当页地址发生过擦除时,将异常地址信息外传。

初始化流程如图2所示,上电或超过约定的时间t(t大于0)的点要对信息记录单元flash_erase执行初始化。比如时间t为1天,则过日要初始化信息记录单元flash_erase,将信息记录单元flash_erase内容全部置为0。

统计并锁定异常流程如图3所述,按照一定的算法,筛选信息记录单元中的变量flash_erase中记录的非易失存储器flash页地址,从中锁定那些最多擦写的页地址,具体包括如下步骤。

s201:应用程序每次擦除非易失存储器flash的页时,调用统计函数。

s202:判断该页地址是否包含在信任地址序列,如是信任地址,则跳出函数,正常返回;如不是信任地址,判断该页地址是否曾记录过。

s203:判断该页地址是否曾记录过,如记录过,判断相应的擦写次数erase_num是否小于0xff,如小于0xff,则擦写次数erase_num加1,如加1后大于一定时间t内允许擦写的最多次数erasemax,异常返回,暂时终止对该地址的擦写;如等于0xff,则异常返回;如该页地址没有记录过,则判断flash_erase[pagemax]全范围内是否有擦写次数erase_num=0,所述flash_erase[pagemax]为定义的变量,用来记录最多锁定页数pagemax个擦写的页地址及擦写次数。

s204:判断flash_erase[pagemax]全范围内是否有擦写次数erase_num=0的,为零,说明没有记录过,可将本次地址记录到该页地址page_addr,同时相应的擦写次数erase_num置为1;不为零,判断全部的擦写次数erase_num是否大于一定时间t内允许擦写的最多次数erasemax。

s205:判断全部的擦写次数erase_num是否大于一定时间t内允许擦写的最多次数erasemax,如果是,则返回;如果不是,则表明擦写次数erase_num全部非0,表示最多锁定页数pagemax全范围都有了统计记录,此时从flash_erase[pagemax]全范围中找出x(0<x<pagemax)个擦除次数最多的保留不变,从其余pagemax-x个找到最早记录的那个页地址page_addr,用新地址覆盖该空间,同时相应的erase_num置为1。

例如,所述的x=pagemax/2,则从flash_erase[pagemax]全范围中找出pagemax/2个擦除次数最多的保留不变,从其余pagemax/2个找到最早记录的那个页地址page_addr,采用先进先出原则,用新地址覆盖该空间,同时相应的erase_num置为1。

s206:每次更新flash_erase后,重新排序,按照时间点由近到远依次排列,新更新的地址放在flash_erase[0]。

信息外传流的流程如图4所示,包如下步骤:

s301:定时检查flash_erase[pagemax]中记录的数据;

s302:检索是否有页地址page_addr的擦写次数erase_num大于时间t内允许擦写的最多次数erasemax,如果有页地址的擦写次数erase_num大于erasemax,则说明有页地址发生了过擦除;

s303:将异常地址信息外传。

所述的异常地址信息外传方式有:主动上传异常模式,外设召读异常模式或显示异常模式。

如果仪器仪表具备主动上传的功能,此时可将异常地址信息通过主动上传异常模式上传;如果不具备主动上传功能,可通过外设召读异常模式上传,在其他外部设备召读数据仪表应答时,携带异常出错标志,外部设备在收到异常标志后,发起召读异常信息;如果不具备通讯功能,可通过显示异常模式上传,所述的显示异常模式可通过lcd输出或led提醒。

主动上传异常流程图如图5所示,定时检查flash_erase[pagemax],判断是否有检索是否有页地址page_addr的擦写次数erase_num大于时间t内允许擦写的最多次数erasemax,如果是,则主动上传异常信息,如果否,则返回。

外设召读异常流程图如图6所示,当外部设备召读数据仪表应答时,检查flash_erase[pagemax],判断是否有检索是否有页地址page_addr的擦写次数erase_num大于时间t内允许擦写的最多次数erasemax,如果是,则携带异常标志,外部设备在收到异常标志后,发出召读异常信息,如果否,则返回。

显示异常异常流程图如图7所示,显示异常信息时,检查flash_erase[pagemax],判断是否有检索是否有页地址page_addr的擦写次数erase_num大于时间t内允许擦写的最多次数erasemax,如果是,则显示异常地址信息,如果否,则返回。

一款仪器仪表采用了本发明,该仪表使用32mb的串行非易失flash存储参数及历史数据,没有lcd显示,采用4g无线通道,具备主动上报功能。针对本发明部分,选取1天作为统计时间段,仪表设计寿命10年,1天内允许擦写的最多次数erasemax选取为25,选取pagemax为8,max_unit取为2,设置了5个信任地址。仪表在批量生产前的内部测试时,开始几天,运行正常,也没有异常记录上报,但在运行8天后,有2个页地址被频繁擦除,严重超过了设计,后经跟踪及阅读源程序,发生程序上有个严重的bug。在最初间段,由于记录少,没有问题,后记录多了,程序有bug,分配的指针溢出了,造成寻址出错。正是通过本发明,及早发现了问题,将问题消灭在批量出厂前,避免了后续损失。

以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1