计算机内存程序代码和数据的自检方法

文档序号:6466735阅读:409来源:国知局
专利名称:计算机内存程序代码和数据的自检方法
技术领域
本发明属于存储器检测领域,主要用于对存储器中存储的程序代码和数据的内容进行故障检测。

背景技术
在计算机系统中,特别在一些嵌入式计算机系统中,核心程序代码和数据一般都保存在ROM、EPROM、E2PROM和FLASH等存储器件中,由于这些存储器件在使用过程中会受到电磁干扰、老化、挥发等因素的影响,长期存储的数据位可能发生丢失等故障,这肯定会影响计算机系统的正常运行,因此在运行前必须首先对存储的核心程序代码和数据的内容进行自检。
一些文章中介绍了对存储内容进行“累加求和”、“奇偶校验”来进行自检的方法,但是,该方法检测的错误类型少、检错概率低。为了克服这一不足,发明专利申请“一种只读存储器自检装置和方法”(公开号CN 1971763A)公开了一种利用Hash函数对ROM中存储的内容进行自检的方法,该方法利用Hash函数特性对ROM中存储的内容进行处理后,再与芯片外预先保存的参考Hash值进行比较来实现ROM自检。但是,这一专利申请需要在ROM芯片以外另用存储器件存放参考Hash值,给一些嵌入式系统的实际应用带来不便。


发明内容
为了克服现有技术需要外置存储器的不便,本发明提出了一种计算机内存程序代码和数据的自检方法,该方法把校验码、自检程序和被检测的程序代码和数据都存放在内存中,能够提高内存自检的检错类型和检错概率,既可以有效避免存储信息的泄露,又不必附加其他存储器件。
本发明的原理是假设被检验的二进制数代码(也称为信源码)A有n个数据位(an-1an-2……a0)(ai∈{0,1},(i=0,1,……,n-1)),其多项式表示为 A=an-1×2n-1+an-2×2n-2+……+a0×20 (1) 其中ai∈{0,1},(i=0,1,……,n-1); a0是信源码A的最低位,an-1是信源码A的最高位。
二进制校验码(也称为生成码)H有m个数据位(hm-1 hm-2……h0)(hi∈{0,1},(i=0,1,……,m-1)),其多项式表示为 H=hm-1×2m-1+hm-2×2m-2+……+h0×20(2) 其中hk∈{0,1},(k=0,1,……,m-1); h0是生成码H的最低位,hm-1是生成码H的最高位,且hm-1=1。
循环冗余校验(Cyclic Redundancy Checm,CRC)就是将信源码A乘上2m-1,然后除以生成码H,得到二进制余码R,采用二进制余码R来检测二进制信源码A的正确性。由于除数H有m个数据位,按照二进制除法规则,余码R的数据位最多有m-1个,即余码R可以表示为(rm-2 rm-3……r0)(rk∈{0,1},(k=0,1,……,m-2)),其多项式表示为 R=rm-2×2m-2+rm-3×2m-3+……+r0×20 (3) 其中rk∈{0,1},(k=0,1,……,m-2); r0是余码R的最低位,rm-2是余码R的最高位。
把信源码A和余码R组合,可以得到n+m-1个数据位的组合码C,组合码C可以表示为(an-1 an-2……a0 rm-2 rm-3……r0),其多项式表示为 C=an-1×2n+m-2+an-2×2n+m-3+……+a0×2m-1+rm-2×2m-2+rm-3×2m-3+……+r0×20(4) 其中a1∈{0,1},(i=0,1,……,n-1); a0是信源码A的最低位,an-1是信源码A的最高位。
rk∈{0,1},(k=0,1,……,m-2); r0是余码R的最低位,rm-2是余码R的最高位。
由CRC原理可知,用组合码C除以生成码H,如果得到的余码R中的数据位(rm-2rm-3……r0)全部为零,则说明组合码C通过循环冗余校验,认为信源码A正确;否则说明组合码C没有通过循环冗余校验,认为信源码A有错误。这样就可以根据组合码C是否通过循环冗余校验来判断信源码A是否正确。由于二进制数据CRC除法电路可以用具有反馈连接的模2加法器和移位寄存器来实现(如图1所示),这样就可以采用计算机程序实现循环冗余校验。
上述方法常用于串行数据校验中,由于微处理器一般以字节为单位存放程序代码和数据,因此需要对上述方法做如下推广 假定被校验的核心程序代码和数据是以字节为单位连续存放在首地址为P的某一存储区间中,其长度为n个字节,如表1所示,其中ai,j∈{0,1}表示第P+i单元的第j位数据,i∈{P,P+1,……,P+n-1},j∈{7,6,5,4,3,2,1,0}。
表1 被校验的核心程序和数据
按照数据位从D7到D0的顺序可以按列形成8个信源多项式,分别表示为 A7=a0,7×2n-1+a1,7×2n-2+……+an-1,7×20(5) A6=a0,6×2n-1+a1,6×2n-2+……+an-1,6×20(6) A5=a0,5×2n-1+a1,5×2n-2+……+an-1,5×20(7) A4=a0,4×2n-1+a1,4×2n-2+……+an-1,4×20(8) A3=a0,3×2n-1+a1,3×2n-2+……+an-1,3×20(9) A2=a0,2×2n-1+a1,2×2n-2+……+an-1,2×20(10) A1=a0,1×2n-1+a1,1×2n-2+……+an-1,1×20(11) A0=a0,0×2n-1+a1,0×2n-2+……+an-1,0×20 (12) 对8个信源A7、A6、……、A0选择相同的生成码H,将信源码Aj(j∈{7,6,5,4,3,2,1,0})乘上2m-1后,再分别除以相同的生成码H。一旦生成码H确定下来,由于生成码H有m个数据位,则余码最多有m-1个数据位,余码Rj可以表示为(rm-2,jrm-3,j……r0,j)(j∈{7,6,5,4,3,2,1,0})。得到的余码Rj(j∈{7,6,5,4,3,2,1,0})按先高位后低位的顺序依次存放在信源码Aj之后,就可以构成组合码Cj(j∈{7,6,5,4,3,2,1,0})(表2),而组合码Cj没有破坏信源码Aj的存储内容。
表2 组合码字节Ci

可以按照数据位存储地址从低到高、列由D7到D0的顺序形成8个组合码Cj(j∈{7,6,5,4,3,2,1,0}),多项式分别表示如下 C7=a0,7×2n+m-2+a1,7×2n+m-3+……+an-1,7×2m-1+rm-2,7×2m-2+rm-3,7×2m-3+……+r0,7×20 (13) C6=a0,6×2n+m-2+a1,6×2n+m-3+……+an-1,6×2m-1+rm-2,6×2m-2+rm-3,6×2m-3+……+r0,6×20 (14) C5=a0,5×2n+m-2+a1,5×2n+m-3+……+an-1,5×2m-1+rm-2,5×2m-2+rm-3,5×2m-3+……+r0,5×20 (15) C4=a0,4×2n+m-2+a1,4×2n+m-3+……+an-1,4×2m-1+rm-2,4×2m-2+rm-3,4×2m-3+……+r0,4×20 (16) C3=a0,3×2n+m-2+a1,3×2n+m-3+……+an-1,3×2m-1+rm-2,3×2m-2+rm-3,3×2m-3+……+r0,3×20 (17) C2=a0,2×2n+m-2+a1,2×2n+m-3+……+an-1,2×2m-1+rm-2,2×2m-2+rm-3,2×2m-3+……+r0,2×20 (18) C1=a0,1×2n+m-2+a1,1×2n+m-3+……+an-1,1×2m-1+rm-2,1×2m-2+rm-3,1×2m-3+……+r0,1×20 (19) C0=a0,0×2n+m-2+a1,0×2n+m-3+……+an-1,0×2m-1+rm-2,0×2m-2+rm-3,0×2m-3+……+r0,0×20 (20) 从表2横向可以看出,组合码Cj(j∈{7,6,5,4,3,2,1,0})可以按照字节进行编码,按照字节编码的组合码定义如下 第P单元代码字节APa0,7 a0,6 a0,5 a0,4 a0,3 a0,2 a0,1 a0,0 第P+1单元代码字节AP+1a1,7 a1,6 a1,5 a1,4 a1,3 a1,2 a1,1 a1,0 …… 第P+i单元代码字节AP+iai,7 ai,6 ai,5 ai,4 ai,3 ai,2 ai,1 ai,0 …… 第P+n-1单元代码字节AP+n-1an-1,7 an-1,6 an-1,5 an-1,4 an-1,3 an-1,2 an-1,1 an-1,0 第P+n单元余码字节Rm-2rm-2,7 rm-2,6 rm-2,5 rm-2,4 rm-2,3 rm-2,2 rm-2,1 rm-2,0 第P+n+1单元余码字节Rm-3rm-3,7 rm-3,6 rm-3,5 rm-3,4 rm-3,3 rm-3,2 rm-3,1 rm-3,0 第P+n+m-3单元余码字节R1r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1 r1,0 第P+n+m-2单元余码字节R0r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1 r0,0 因此,按照Rm-2、Rm-3、……、R0的顺序将余码字节放在被校验的核心程序代码和数据字节AP、AP+1、……、AP+n-1之后即可构成组合码字节。
由于上述8个信源码Aj(j∈{7,6,5,4,3,2,1,0})除以相同的生成码H,而除法电路只与生成码H有关,所以对上述8个信源码Aj(j∈{7,6,5,4,3,2,1,0})的除法电路就完全相同,如图2所示。在计算机程序实现时,可以采用汇编语言的字节异或逻辑运算指令和字节移位指令方便地实现除法电路功能。
因此,本发明解决其技术问题所采用的技术方案包括以下步骤 (1)校验码生成过程 第一步,根据CRC国际标准选择一种生成码H,生成码H有m个数据位(hm-1 hm-2……h0),假定被校验的核心程序代码和数据共有n个字节(AP,AP+1,……,AP+n-1),其存放的首地址为P,末地址为P+n-1。采用m-1个字节的寄存器分别存放余码字节,定义如下 Rm-2表示余码字节(rm-2,7 rm-2,6 rm-2,5 rm-2,4 rm-2,3 rm-2,2 rm-2,1 rm-2,0) Rm-3表示余码字节(rm-3,7 rm-3,6 rm-3,5 rm-3,4 rm-3,3 rm-3,2 rm-3,1 rm-3,0) …… R1表示余码字节(r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1 r1,0) R0表示余码字节(r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1 r0,0) 把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元Rm-2、Rm-3、……、R0的内容全部清零。
第二步,将被校验的核心程序代码和数据末地址P+n-1之后的m-1个字节单元的内容全部清零,即实现信源码Aj×2m-1(j∈{7,6,5,4,3,2,1,0})。
第三步,用Aj×2m-1(j∈{7,6,5,4,3,2,1,0})除以生成码H(图2),得到的余码字节Rm-2、Rm-3、……、R0的内容依次存储在核心程序代码和数据之后的单元(P+n,P+n+1,……,P+n+m-2)中,形成组合码Cj(j∈{7,6,5,4,3,2,1,0})。组合码Cj没有破坏信源码AP、AP+1、……、AP+n-1的内容。
(2)自检过程 第一步,把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元Rm-2、Rm-3、……、R0的内容全部清零。
第二步,用组合码Cj(j∈{7,6,5,4,3,2,1,0})除以生成码H,如果余码寄存器单元Rm-2、Rm-3、……、R0的内容全部为零,则认为组合码Cj中的信源码Aj正确,即AP、AP+1、……、AP+n-1正确;否则就认为组合码Cj中的信源码Aj有错误,即AP、AP+1、……、AP+n-1有错误。这样就实现了对存储区中核心程序和数据的自检。
本发明的有益效果是可以根据检错类型和检错概率的要求来选定循环校验生成码H,采用计算机程序求解循环校验余码,并将被校验的核心程序代码和数据,以及循环校验余码都存放在存储器中。循环冗余校验码生成程序和自检程序本身也可以与核心程序代码和数据一起作为被校验代码。因此,该方法既不泄漏被校验的核心程序代码和数据的内容,也不需要其他存储器件存放校验码值,有保密和方便的作用。



下面结合附图和具体实施方式
对发明进一步说明。
图1是位串数据通用CRC除法电路。
图2是字节数据通用CRC除法电路。
图3是字节数据CRC-12除法电路。
图4是字节数据CRC-12校验码生成程序和自检程序框图。
图5是字节数据CRC-16除法电路。
图6是字节数据CRC-16校验码生成程序和自检程序框图。
图7是字节数据CRC-CCITT除法电路。
图8是字节数据CRC-CCITT校验码生成程序和自检程序框图。

具体实施例方式 下面结合附图和CRC-12、CRC-16和CRC-CCITT三种常见的CRC生成码分别说明本发明的具体实施方式
。在以下三种实施方式中,均假定被校验的核心程序代码和数据共有n个字节(AP,AP+1,……,AP+n-1),其存放的首地址为P,末地址为P+n-1。
实施方式一采用CRC-12生成码进行自检 采用CRC-12生成码进行自检包括校验码生成和自检两个过程 (1)校验码生成过程 第一步,根据CRC-12码国际标准,选择的生成码有13个数据位,分别为(1100000001111),可以根据该数据位对除法电路进行简化,得到CRC-12除法电路(图3)。
采用12个单字节的寄存器分别存放余码字节,定义如下 R11表示余码字节(r11,7 r11,6 r11,5 r11,4 r11,3 r11,2 r11,1 r11,0) R10表示余码字节(r10,7 r10,6 r10,5 r10,4 r10,3 r10,2 r10,1 r10,0) R9表示余码字节(r9,7 r9,6 r9,5 r9,4 r9,3 r9,2 r9,1r9,0) R8表示余码字节(r8,7 r8,6 r8,5 r8,4 r8,3 r8,2 r8,1r8,0) R7表示余码字节(r7,7 r7,6 r7,5 r7,4 r7,3 r7,2 r7,1r7,0) R6表示余码字节(r6,7 r6,6 r6,5 r6,4 r6,3 r6,2 r6,1r6,0) R5表示余码字节(r5,7 r5,6 r5,5 r5,4 r5,3 r5,2 r5,1r5,0) R4表示余码字节(r4,7 r4,6 r4,5 r4,4 r4,3 r4,2 r4,1r4,0) R3表示余码字节(r3,7 r3,6 r3,5 r3,4 r3,3 r3,2 r3,1r3,0) R2表示余码字节(r2,7 r2,6 r2,5 r2,4 r2,3 r2,2 r2,1r2,0) R1表示余码字节(r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1r1,0) R0表示余码字节(r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1r0,0) 把被校验的核心程序代码和数据指针Pointer初始化为P,把12个存放余码字节的寄存器单元R11、R10、……、R0的内容全部清零。
第二步,将被校验的核心程序代码和数据末地址为P+n-1之后的12个字节单元的内容全部清零,即实现Aj×212(j∈{7,6,5,4,3,2,1,0})。
第三步,采用计算机程序实现Aj×212(j∈{7,6,5,4,3,2,1,0})除以CRC-12生成码(图4(a)),得到的余码字节R11、R10、……、R0的内容依次存储在核心程序代码和数据之后的单元(P+n,P+n+1,……,P+n+11)中,形成组合码Cj(j∈{7,6,5,4,3,2,1,0})。组合码Cj没有破坏信源码AP、AP+1、……、AP+n-1的内容。
(2)自检过程 第一步,把被校验的核心程序代码和数据指针Pointer初始化为P,把12个存放余码字节的寄存器单元R11、R10、……、R0的内容全部清零。
第二步,采用计算机程序实现组合码Cj(j∈{7,6,5,4,3,2,1,0})除以CRC-12生成码(图4(b)),如果余码寄存器单元R11、R10、……、R0的内容全部为零,则认为组合码Cj中的信源码Aj正确,即AP、AP+1、……、AP+n-1的内容正确;否则就认为组合码Cj中的信源码Aj有错误,即AP、AP+1、……、AP+n-1的内容有错误。这样就实现了对存储区中核心程序代码和数据的自检。
实施方式二采用CRC-16生成码进行自检 采用CRC-16生成码进行自检包括校验码生成和自检两个过程 (1)校验码生成过程 第一步,根据CRC-16码国际标准,选择的生成码有17个数据位,分别为(11000000000000101),可以根据该数据位对除法电路进行简化,得到CRC-16除法电路(图5)。
采用16个单字节的寄存器分别存放余码字节,定义如下 R15表示余码字节(r15,7 r15,6 r15,5 r15,4 r15,3 r15,2 r15,1 r15,0) R14表示余码字节(r 14,7 r14,6 r14,5 r14,4 r14,3 r14,2 r14,1 r14,0) R13表示余码字节(r13,7 r13,6 r13,5 r13,4 r13,3 r13,2 r13,1 r13,0) R12表示余码字节(r12,7 r12,6 r12,5 r12,4 r12,3 r12,2 r12,1 r12,0) R11表示余码字节(r11,7 r11,6 r11,5 r11,4 r11,3 r11,2 r11,1 r11,0) R10表示余码字节(r10,7 r10,6 r10,5 r10,4 r10,3 r10,2 r10,1r10,0) R9表示余码字节(r9,7 r9,6 r9,5 r9,4 r9,3 r9,2 r9,1 r9,0) R8表示余码字节(r8,7 r8,6 r8,5 r8,4 r8,3 r8,2 r8,1 r8,0) R7表示余码字节(r7,7 r7,6 r7,5 r7,4 r7,3 r7,2 r7,1 r7,0) R6表示余码字节(r6,7 r6,6 r6,5 r6,4 r6,3 r6,2 r6,1 r6,0) R5表示余码字节(r5,7 r5,6 r5,5 r5,4 r5,3 r5,2 r5,1r5,0) R4表示余码字节(r4,7 r4,6 r4,5 r4,4 r4,3 r4,2 r4,1 r4,0) R3表示余码字节(r3,7 r3,6 r3,5 r3,4 r3,3 r3,2 r3,1r3,0) R2表示余码字节(r2,7 r2,6 r2,5 r2,4 r2,3 r2,2 r2,1 r2,0) R1表示余码字节(r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1 r1,0) R0表示余码字节(r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1 r0,0) 把被校验的核心程序代码和数据指针Pointer初始化为P,把16个存放余码字节的寄存器单元R15、R14、……、R0的内容全部清零。
第二步,将被校验的核心程序代码和数据末地址为P+n-1之后的16个字节单元的内容全部清零,即实现Aj×216(j∈{7,6,5,4,3,2,1,0})。
第三步,采用计算机程序实现Aj×216(j∈{7,6,5,4,3,2,1,0})除以CRC-16生成码(图6(a)),得到的余码字节R15、R14、……、R0的内容依次存储在核心程序代码和数据之后的单元(P+n,P+n+1,……,P+n+15)中,形成组合码Cj(j∈{7,6,5,4,3,2,1,0})。组合码Cj没有破坏信源码AP、AP+1、……、AP+n-1的内容。
(2)自检过程 第一步,把被校验的核心程序代码和数据指针Pointer初始化为P,把16个存放余码字节的寄存器单元R15、R14、……、R0的内容全部清零。
第二步,采用计算机程序实现组合码Cj(j∈{7,6,5,4,3,2,1,0})除以CRC-16生成码(图6(b)),如果余码寄存器单元R15、R14、……、R0的内容全部为零,则认为组合码Cj中的信源码Aj正确,即AP、AP+1、……、AP+n-1的内容正确;否则就认为组合码Cj中的信源码Aj有错误,即AP、AP+1、……、AP+n-1的内容有错误。这样就实现了对存储区中核心程序代码和数据的自检。
实施方式三采用CRC-CCITT生成码进行自检 采用CRC-CCITT生成码进行自检包括校验码生成和自检两个过程 (1)校验码生成过程 第一步,根据CRC-CCITT码国际标准,选择的生成码有17个数据位,分别为(11000000000100001),可以根据该数据位对除法电路进行简化,得到CRC-CCITT除法电路(图7)。
采用16个单字节的寄存器分别存放余码字节,定义如下 R15表示余码字节(r15,7 r15,6 r15,5 r15,4 r15,3 r15,2 r15,1 r15,0) R14表示余码字节(r14,7 r14,6 r14,5 r14,4 r14,3 r14,2 r14,1 r14,0) R13表示余码字节(r13,7 r13,6 r13,5 r13,4 r13,3 r13,2 r13,1 r13,0) R12表示余码字节(r12,7 r12,6 r12,5 r12,4 r12,3 r12,2 r12,1 r12,0) R11表示余码字节(r11,7 r11,6 r11,5 r11,4 r11,3 r11,2 r11,1 r11,0) R10表示余码字节(r10,7 r10,6 r10,5 r10,4 r10,3 r10,2 r10,1 r10,0) R9表示余码字节(r9,7 r9,6 r9,5 r9,4 r9,3 r9,2 r9,1 r9,0) R8表示余码字节(r8,7 r8,6 r8,5 r8,4 r8,3 r8,2 r8,1 r8,0) R7表示余码字节(r7,7 r7,6 r7,5 r7,4 r7,3 r7,2 r7,1 r7,0) R6表示余码字节(r6,7 r6,6 r6,5 r6,4 r6,3 r6,2 r6,1 r6,0) R5表示余码字节(r5,7 r5,6 r5,5 r5,4 r5,3 r5,2 r5,1 r5,0) R4表示余码字节(r4,7 r4,6 r4,5 r4,4 r4,3 r4,2 r4,1 r4,0) R3表示余码字节(r3,7 r3,6 r3,5 r3,4 r3,3 r3,2 r3,1 r3,0) R2表示余码字节(r2,7 r2,6 r2,5 r2,4 r2,3 r2,2 r2,1 r2,0) R1表示余码字节(r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1 r1,0) R0表示余码字节(r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1 r0,0) 把被校验的核心程序代码和数据指针Pointer初始化为P,把16个存放余码字节的寄存器单元R15、R14、……、R0的内容全部清零。
第二步,将被校验的核心程序代码和数据末地址为P+n-1之后的16个字节单元的内容全部清零,即实现Aj×216(j∈{7,6,5,4,3,2,1,0})。
第三步,采用计算机程序实现Aj×216(j∈{7,6,5,4,3,2,1,0})除以CRC-CCITT生成码(图8(a)),得到的余码字节R15、R14、……、R0的内容依次存储在核心程序代码和数据之后的单元(P+n,P+n+1,……,P+n+15)中,形成组合码Cj(j∈{7,6,5,4,3,2,1,0})。组合码Cj没有破坏信源码AP、AP+1、……、AP+n-1的内容。
(2)自检过程 第一步,把被校验的核心程序代码和数据指针Pointer初始化为P,把16个存放余码字节的寄存器单元R15、R14、……、R0的内容全部清零。
第二步,采用计算机程序实现组合码Cj(j∈{7,6,5,4,3,2,1,0})除以CRC-CCITT生成码(图8(b)),如果余码寄存器单元R15、R14、……、R0的内容全部为零,则认为组合码Cj中的信源码Aj正确,即AP、AP+1、……、AP+n-1的内容正确;否则就认为组合码Cj中的信源码Aj有错误,即AP、AP+1、……、AP+n-1的内容有错误。这样就实现了对存储区中核心程序代码和数据的自检。
权利要求
1.计算机内存程序代码和数据的自检方法,其特征在于包括下述步骤
(a)校验码生成过程;
第一步,根据CRC国际标准选择一种生成码H,生成码H有m个数据位hm-1hm-2……h0,假定被校验的核心程序代码和数据共有n个字节AP,AP+1,……,AP+n-1,其存放的首地址为P,末地址为P+n-1;采用m-1个字节的寄存器分别存放余码字节,定义如下
Rm-2表示余码字节rm-2,rm-2,6 rm-2,5rm-2,4 rm-2,3 rm-2,2rm-2,1 rm-2,0
Rm-3表示余码字节(rm-3,7 rm-3,6 rm-3,5 rm-3,4 rm-3,3 rm-3,2 rm-3,1 rm-3,0
……
R1表示余码字节r1,7 r1,6 r1,5 r1,4 r1,3 r1,2 r1,1 r1,0
R0表示余码字节r0,7 r0,6 r0,5 r0,4 r0,3 r0,2 r0,1 r0,0
把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元Rm-2、Rm-3、……、R0的内容全部清零;
第二步,将被校验的核心程序代码和数据末地址P+n-1之后的m-1个字节单元的内容全部清零,即实现信源码Aj×2m-1,j∈{7,6,5,4,3,2,1,0};
第三步,用Aj×2m-1除以生成码H,得到的余码字节Rm-2、Rm-3、……、R0的内容依次存储在核心程序代码和数据之后的单元P+n,P+n+1,……,P+n+m-2中,形成组合码Cj;组合码Cj没有破坏信源码AP、AP+1、……、AP+n-1的内容;
(b)自检过程;
第一步,把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元Rm-2、Rm-3、……、R0的内容全部清零;
第二步,用组合码Cj除以生成码H,如果余码寄存器单元Rm-2、Rm-3、……、R0的内容全部为零,则认为组合码Cj中的信源码Aj正确,即AP、AP+1、……、AP+n-1正确;否则就认为组合码Cj中的信源码Aj有错误,即AP、AP+1、……、AP+n-1有错误。
全文摘要
本发明公开了一种计算机内存程序代码和数据的自检方法,选择一种生成码H,把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元内容全部清零;将被校验的核心程序代码和数据末地址之后的m-1个字节单元的内容全部清零,用Aj×2m-1除以生成码H,形成组合码Cj;把被校验的核心程序代码和数据指针Pointer初始化为P,把m-1个存放余码字节的寄存器单元的内容全部清零;用组合码Cj除以生成码H,完成自检。本发明既不泄漏被校验的核心程序代码和数据的内容,也不需要其他存储器件存放校验码值。
文档编号G06F11/10GK101369242SQ200810151188
公开日2009年2月18日 申请日期2008年9月28日 优先权日2008年9月28日
发明者刘卫东, 高立娥 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1