在FLASH存储器上实现电表电量小数的按位存储的方法与流程

文档序号:14056795阅读:898来源:国知局
在FLASH存储器上实现电表电量小数的按位存储的方法与流程

本发明涉及电能表电能小数存储技术领域,尤其是涉及一种保证了电量小数0.01度的累计精度,节省了存储空间,同时具有数据备份作用的在flash存储器上实现电表电量小数的按位存储的方法。



背景技术:

目前大多厂家都是把小数按字节存储在eeprom中,但由于电表使用寿命10年以及0.01度的存储精度的原因,往往需要分配非常大的存储空间,这样就需要采用大容量的eeprom,从而增加产品成本。也有个别厂家是把电量小数按字节存储在flash中,因flash存储器寿命较低以及整页擦写的原因,也无法得到减少存储空间的目的。



技术实现要素:

本发明为了克服现有技术中保证电量小数0.01度累计精度存储需要的存储空间大的不足,提出了一种保证了电量小数0.01度的累计精度,节省了存储空间,同时具有数据备份作用的在flash存储器上实现电表电量小数的按位存储的方法。

为了实现上述目的,本发明采用了以下技术方案:

一种在flash存储器上实现电表电量小数的按位存储的方法,包括如下步骤:

(1-1)将电量小数的所有存储空间分为m页,每一页有i块,共有n块,其中,n=m×i;

(1-2)每一块为99个位,将电量的小数0.01到0.99分别分配给上述99个位;

(1-3)从第一块开始存储,每增加0.01度按从高位到低位的顺序写入1,写满99位即写完第一块;

(1-4)当第一块写完后换到第二块,第二块写完后换到第三块,直到写到第n块后转入(1-3)。

本发明通过为每0.01度分配一个位来存储电量小数,并通过分页分块的方式来进行写入和擦除,节省了空间,保证了0.01度的累计精度。

作为优选,还包括如下步骤:

(2-1)当写到第一页的第i块时,擦除第二页数据,当写到第二页的第i块时,擦除第三页数据,当写到第m页的第i块时,擦除第一页数据,当第m页的第i块写完后转入(1-3)。

作为优选,还包括如下步骤:

(3-1)当电量小数出现异常时,进行数据校验和恢复。

作为优选,数据校验和恢复的具体步骤如下:

(4-1)进行正向搜索,从第1位开始搜索,直到搜索到某位为0为止,得到值为1的位的个数为n1;

(4-2)进行反向搜索,从第99位开始搜索,直到搜索到某位为1为止,得到值为0的位的个数为n2;

(4-3)如果n1+n2=99时,认为数据有效,恢复数据记录;如果n1+n2≠99,则认为数据无效,将电量小数置为0。

作为优选,当进行电量数据写入时,根据当前小数x计算字节偏移量y、位偏移量z和当前写入的字节数据l,计算公式如下:

y=(x×100-1)÷8,y向上取整;

z=(x×100)%8;

如果z=0,将十六进制数0x80右移7位作为当前写入的字节数据l;

如果z≠0,将十六进制数0x80右移(z-1)位作为当前写入的字节数据l。

因此,本发明具有如下有益效果:(1)为每0.01度分配一个位来存储电量小数,节省了存储空间,保证了累计精度;(2)采用分页分块的方式擦除和写入,克服了flash需擦除后才能写的缺点,同时能够进行数据备份;(3)通过正向搜索和反向搜索相结合校验数据正确性,提高了可靠性。

附图说明

图1是本发明的所有电量小数的存储空间;

图2是本发明的一块电量小数的存储空间;

图3是本发明的实施例的一种流程图。

具体实施方式

下面结合附图与具体实施方式对本发明做进一步描述:

如图1、图2和图3所示的实施例是一种在flash存储器上实现电表电量小数的按位存储的方法,包括如下步骤:

步骤100,对电量小数的所有存储空间进行分页分块

如图1所示,将电量小数的所有存储空间分为8页,每一页有16块,共有128块,其中,n=m×i=8×16=128;

步骤200,分配一块电量小数的存储空间

如图2所示,每一块为99个位,将电量的小数0.01到0.99分别分配给上述99个位;

步骤300,电量小数的存储与擦除

步骤301,从第一块开始存储,每增加0.01度按从高位到低位的顺序写入1,写满99位即写完第一块;

步骤302,当第一页的第一块写完后换到第一页的第二块,第一页的第二块写完后换到第一页的第三块,当写到第一页的第16块时,擦除第二页数据,当第一页的第16块写完后换到第二页的第一块,直到写到第8页的第16块时,擦除第一页数据,当第8页的第16块写完后转入步骤301。

如果电量小数为0.34时出现异常,进行数据校验,具体步骤如下:

进行正向搜索,从第1位开始搜索,直到搜索到某位为0为止,得到值为1的位的个数为34;

进行反向搜索,从第99位开始搜索,直到搜索到某位为1为止,得到值为0的位的个数为65;

n1+n2=34+65=99,数据有效,恢复数据记录。

当进行电量数据写入时,根据当前小数0.34计算字节偏移量y、位偏移量z和当前写入的字节数据l,计算公式如下:

如果z=0,将十六进制数0x80右移7位作为当前写入的字节数据l;

如果z≠0,将十六进制数0x80右移(z-1)位作为当前写入的字节数据l。

y=(x×100-1)÷8=(0.34×100-1)÷8=5,y向上取整,字节偏移量为5;

z=(x×100)%8=(0.34×100)%8=2,z≠0,将十六进制数0x80右移(z-1)=2-1=1位作为当前写入的字节数据l,当前写入的字节数据l为01000000。

应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于

本技术:
所附权利要求书所限定的范围。



技术特征:

技术总结
本发明公开了一种在FLASH存储器上实现电表电量小数的按位存储的方法,包括如下步骤:将电量小数的所有存储空间分为M页,每一页有I块,共有N块,其中,N=M×I;每一块为99个位,将电量的小数0.01到0.99分别分配给上述99个位;从第一块开始存储,每增加0.01度按从高位到低位的顺序写入1,写满99位即写完第一块;当第一块写完后换到第二块,第二块写完后换到第三块,直到写到第N块后换到第一块继续写。本发明具有如下有益效果:节省了存储空间,保证了累计精度;采用分页分块的方式擦除和写入,克服了FLASH需擦除后才能写的缺点,同时能够进行数据备份,提高了可靠性。

技术研发人员:朱宏斌;郜波;景程;顾小峰
受保护的技术使用者:华立科技股份有限公司;中国电力科学研究院;国家电网公司
技术研发日:2017.10.13
技术公布日:2018.03.30
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1