发明内容
本发明的目的在于针对上述现有技术中的数据存储检错和纠错复杂的问题,提出一种数据存储检错纠错方法及数据存储装置,复杂性较低,适用于低速单片机。
一种数据存储检错纠错方法,包括:
获取原始存储数据,并根据所述原始存储数据生成第一校验数据和第二校验数据;
将所述原始存储数据、第一校验数据和第二校验数据分别存储至第一存储单元、第二存储单元和第三存储单元;
检测是否接收到数据读取指令;
如果是,则分别从所述第一存储单元、第二存储单元和第三存储单元读取第一数据、第二数据和第三数据;
将所述第二数据、第三数据与第一数据进行比较,根据比较结果判断所述第一数据是否为原始存储数据。
进一步地,所述第一校验数据由所述原始存储数据的低四位数据和位“1”的个数构成。
进一步地,所述第二校验数据由所述原始存储数据的高四位数据和位“1”的个数构成。
进一步地,将所述第二数据、第三数据与第一数据进行比较,根据比较结果判断所述第一数据是否为原始存储数据,包括:
如果所述第一数据的低四位数据与所述第二数据的低四位数据相同,且第一数据的高四位数据与所述第三数据的高四位数据相同,则确定所述第一数据为所述原始存储数据。
进一步地,如果所述第一数据的低四位数据与所述第二数据的低四位数据不同,和/或,第一数据的高四位数据与所述第三数据的高四位数据不同,则判断所述第二数据中所示的原始存储数据位“1”的个数和所述第三数据中所示的原始存储数据位“1”的个数是否相同,如果个数不相同,则确定所述第一数据为原始存储数据。
进一步地,如果所述第二数据中所示的原始存储数据位“1”的个数和所述第三数据中所示的原始存储数据位“1”的个数相同,则将所述第二数据和第三数据进行与操作和或操作,形成构造数据。
进一步地,形成构造数据之后,计算所述第一数据中位“1”的个数以及所述构造数据中位“1”的个数;
如果所述第一数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,则所述第一数据为原始存储数据;
如果所述构造数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,则所述构造数据为原始存储数据。
一种数据存储装置,包括单片机和存储区域,所述存储区域内设置有多个存储单元,所述单片机用于执行:
获取原始存储数据,并根据所述原始存储数据生成第一校验数据和第二校验数据;
将所述原始存储数据、第一校验数据和第二校验数据分别存储至第一存储单元、第二存储单元和第三存储单元;
检测是否接收到数据读取指令;
如果是,则分别从所述第一存储单元、第二存储单元和第三存储单元读取第一数据、第二数据和第三数据;
将所述第二数据、第三数据与第一数据进行比较,根据比较结果判断所述第一数据是否为原始存储数据。
本发明提供的数据存储检错纠错方法及数据存储装置,计算简单,只需要简单的与、或、移位计算,即可对存储数据进行检错和纠错,特别适用于系统中单片机主频低、无法做大量运算的情况。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
实施例一
参考图1和图2,本实施例提供一种数据存储检错纠错方法,包括:
步骤S101,获取原始存储数据,并根据所述原始存储数据生成第一校验数据和第二校验数据;
步骤S102,将所述原始存储数据、第一校验数据和第二校验数据分别存储至第一存储单元、第二存储单元和第三存储单元;
步骤S103,检测是否接收到数据读取指令;
步骤S104,如果是,则分别从所述第一存储单元、第二存储单元和第三存储单元读取第一数据、第二数据和第三数据;
步骤S105,将所述第二数据、第三数据与第一数据进行比较,根据比较结果判断所述第一数据是否为原始存储数据。
进一步地,步骤S101中,假设原始存储数据为A,第一校验数据为B、第二校验数据为C,第一校验数据B由原始存储数据A的低四位数据和位“1”的个数构成,第二校验数据C由原始存储数据A的高四位数据和位“1”的个数构成。
第一校验数据B和第二校验数据C通过以下方法计算:
X=A&0xOF;
Y=A&0xFO;
Z为A中位“1”的个数;
B=(Z<<4)|X;
C=Z|Y。
假设原始存储数据为11000001,原始存储数据的高四位为“1100”,低四位为“0001”,位“1”的个数为3,因此,第一校验数据为00110001,第一校验数据的高四位“0011”表示原始存储数据中位“1”的个数3,第一校验数据的低四位“0001”与原始存储数据的低四位相同。第二校验数据为11000011,第二校验数据的高四位“1100”与原始存储数据的高四位相同,第二校验数据的低四位“0011”表示原始存储数据中位“1”的个数3。
进一步地,步骤S104中,从第一存储单元、第二存储单元和第三存储单元中分别读出的第一数据为α、第二数据为β、第三数据为γ。
进一步地,步骤S105中,将第二数据β、第三数据γ与第一数据α进行比较,根据比较结果判断所述第一数据α是否为原始存储数据,包括:
如果第一数据α的低四位数据与第二数据β的低四位数据相同,且第一数据α的高四位数据与第三数据γ的高四位数据相同,即α==(β&0xOF)|(γ&0xFO),则确定第一数据α为原始存储数据A。
进一步地,如果第一数据α的低四位数据与第二数据β的低四位数据不同,和/或,第一数据α的高四位数据与第三数据γ的高四位数据不同,则判断第二数据β中所示的原始存储数据位“1”的个数m和第三数据γ中所示的原始存储数据位“1”的个数n是否相同,如果个数不相同,即((β&0xF0)>>4)==(γ&0x0F)不成立,则认为第一校验数据和第二校验数据至少有一个被改写,因此确定第一数据α为原始存储数据A。
具体地,((β&0xF0)>>4)==(γ&0x0F)不成立,则第二数据β和第三数据γ应该相同的地方却不相同,
(α&0x0F)==(β&0x0F)(1)
(α&0xF0)==(γ&0xF0)(2)
等式(1)和等式(2)中至少一个不成立,如果等式(1)成立而等式(2)不成立,则第三数据γ和第一数据α、第二数据β相同的地方都无法对应,而第一数据α和第二数据β相同的地方都可以对应,所以认为第二校验数据被改写,第一数据α为原始存储数据A。
如果等式(1)不成立而等式(2)成立,则第二数据β和第一数据α、第三数据γ相同的地方都无法对应,而第一数据α和第三数据γ相同的地方可以对应,所以认为第一校验数据被改写,第一数据α为原始存储数据A。
如果等式(1)和等式(2)都不成立,即第一数据α、第二数据β、第三数据γ之间应该相同的地方都无法对应,则认为第一校验数据和第二校验数据都被改写,第一数据α即为原始存储数据A。
进一步地,如果所述第二数据中所示的原始存储数据位“1”的个数和所述第三数据中所示的原始存储数据位“1”的个数相同,即((β&0xF0)>>4)==(γ&0x0F)成立,则将第二数据和第三数据进行与操作和或操作,形成构造数据((β&0x0F)|(γ&0xF0))。
进一步地,形成构造数据之后,计算所述第一数据中位“1”的个数s以及所述构造数据中位“1”的个数t;
如果第一数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,即|s-m|<|t-m|,则所述第一数据为原始存储数据;
如果所述构造数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,即|s-m|>|t-m|,则所述构造数据为原始存储数据。
本实施例提供的数据存储检错纠错方法,计算简单,只需要简单的与、或、移位计算,即可对存储数据进行检错和纠错,特别适用于系统中单片机主频低、无法做大量运算的情况。
实施例二
参考图3,本实施例提供一种数据存储装置,包括单片机201和存储区域202,存储区域202内设置有多个存储单元,单片机201用于执行:
获取原始存储数据,并根据所述原始存储数据生成第一校验数据和第二校验数据;
将所述原始存储数据、第一校验数据和第二校验数据分别存储至第一存储单元、第二存储单元和第三存储单元;
检测是否接收到数据读取指令;
如果是,则分别从所述第一存储单元、第二存储单元和第三存储单元读取第一数据、第二数据和第三数据;
将所述第二数据、第三数据与第一数据进行比较,根据比较结果判断所述第一数据是否为原始存储数据。
进一步地,所述第一校验数据由所述原始存储数据的低四位数据和位“1”的个数构成。
进一步地,所述第二校验数据由所述原始存储数据的高四位数据和位“1”的个数构成。
进一步地,单片机201还用于执行:
如果所述第一数据的低四位数据与所述第二数据的低四位数据相同,且第一数据的高四位数据与所述第三数据的高四位数据相同,则确定所述第一数据为所述原始存储数据
如果所述第一数据的低四位数据与所述第二数据的低四位数据不同,和/或,第一数据的高四位数据与所述第三数据的高四位数据不同,则判断所述第二数据中所示的原始存储数据位“1”的个数和所述第三数据中所示的原始存储数据位“1”的个数是否相同,如果个数不相同,则确定所述第一数据为原始存储数据;
如果所述第二数据中所示的原始存储数据位“1”的个数和所述第三数据中所示的原始存储数据位“1”的个数相同,则将所述第二数据和第三数据进行与操作和或操作,形成构造数据;
形成构造数据之后,计算所述第一数据中位“1”的个数以及所述构造数据中位“1”的个数;
如果所述第一数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,则所述第一数据为原始存储数据;
如果所述构造数据中位“1”的个数与所述第二数据中所示的原始存储数据位“1”的个数更接近或相等,则所述构造数据为原始存储数据。
本实施例提供的数据存储装置,只需要简单的与、或、移位计算,即可对存储数据进行检错和纠错,特别适用于系统中单片机主频低、无法做大量运算的情况。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。