!p7kV,mLt0 1、 指令冗余技术;电子园51单片机学习网(Uc#TH.e+D
8t^#Z`)K)g0 2、 软件陷阱技术;电子园51单片机学习网n'?{ fP9k0HM W)Kg
x%{3rV a0 3、 看门狗技术。电子园51单片机学习网#T(@/[!U1D[u
电子园51单片机学习网 I"fhm;?5u.h~3qj我们以MCS-51单片机来做以说明。电子园51单片机学习网S _6JA3x:T
电子园51单片机学习网(o.V.N2Xu(l.~$AL)s一、指令冗余技术
[BH.U.@:OyQ(C.d j0Ajp,C2J]0 我们知道,指令由操作码和操作数组成,操作码指明CPU要完成什么样的操作,而操作数是操作码的对象。单字节指令只有操作码,隐含操作数;双字节指令,第一个字节是操作码,第二个字节是操作数;三字节指令第一个字节是操作码,后二个字节是操作数。CPU在取指令的时候是先取操作码再取操作数,如何判断是操作码还是操作数就是通过取指令的顺序。而取指令的顺序完全由指令计数器PC来控制,因此,一旦PC受干扰出现错误程序便会脱离正常轨道,出现“乱飞”,这样就会使得把操作数当作操作码,或者把操作码当作操作数的情况。但只要PC指针落在单字节指令上程序就可纳入正轨,所以为了快速的将程序纳入正轨,我们应该多用单字节指令,并在关键的地方人为的插入一些单字节指令NOP,或将有效的单字节指令重写,这就称之为指令冗余。
&fpQt H7f#s$n06}&K l LX,h9X0 常用的方法就是在一些双字节,三字节指令后面插入两个单字节指令NOP,或在一些对程序的流向起决定作用的指令前面插入两条NOP指令。还可对一些重要的指令进行重复放置。电子园51单片机学习网E1| v W%w|
wZ\5BoFEKK `0 但采用指令冗余技术将程序纳入正轨的条件是:乱飞的PC必须指向程序运行区。
F:x.A aT6T6T:~0-D1BE6ZT0二、软件陷阱技术电子园51单片机学习网|'p#lu[,lKm
2z`Qe1xL}#B"w0 当乱飞的程序进入非程序区的时候, 我们就可设定软件陷阱对乱飞的程序进行拦截从而将程序引向一个固定的位置。这样我们就可将捕获的程序重新纳入正轨。电子园51单片机学习网5E_#UHk^UU'YL6@
IQPP gH4q'Z)f4{0 软件陷阱主要就是把程序从新引入它的复位入口处,也就是说我们在适当的地方设置这样的指令:
1u K"^aEK#@0电子园51单片机学习网1o2Y#w2l^vNOP
{JDx7Br g @0电子园51单片机学习网 nX#{}p(@5WtNOP电子园51单片机学习网/Sf~RiMO
电子园51单片机学习网4` M'Vi;T n|LJMP 0000H
9r:l'u'X@ W%v0TtkJ;{'C4u0 对于软件陷阱的安排,我们主要安排在这样一些区域,未使用的中断区,未使用的EPROM空间及非EPROM空间。程序运行区,及中断服务程序区。在这里我们主要来看前三种:
#GO8v8x-I.k0电子园51单片机学习网ZF'} F1V0o Y&q1、 未使用的中断区
@Xs }.V%Oo0K'}f5w['GR0 如果对于未使用的中断因干扰而开放的话,我们可以把中断服务程序这样来写:电子园51单片机学习网5m#Idp&}%j&h6|
电子园51单片机学习网;h)cypW NNOP
4R0VPiiGZ0cVh{4Yn0 NOP
-r|`Cgf1?0&R"F0G@)I c'A8U T0 POP D1 ;将原来的错误断点弹出
N_ ~&Kwu3q2p _0电子园51单片机学习网~5z4fmy.~POP D2 ;将原来的错误断点弹出电子园51单片机学习网.Km0`BQ3d-o8VXfS
电子园51单片机学习网;Rx|e}.U8Yk5MPUSH 00H
eG$S D+B2M ni0q0D:|qPP p5g0 PUSH 00H ;将断点地址重写为0000H
(j&` owzWf0!@ vU#Q9FDB(kTW0 RETI
+v,hB}sc:i0电子园51单片机学习网,|h'bLu3R0OK6Mn2、 未使用的EPROM区电子园51单片机学习网p*lzU5@c U
电子园51单片机学习网:U-y%Qqwo5a)GR C假设我们用了一片2764,但并没有用完整个存储区。这时候就可在未用的区域里填充上020000数据,这样当程序飞入其中时就会很快的走入正轨。这条指令其实是“LJMP 0000H”的机器码。
sQ-`:w'}Gd5n0^!dCRP({wKNTM03、 非EPROM空间电子园51单片机学习网L,WU$V"zsw_Y
!]xP&O N4fZ0 单片机系统的程序空间是64K,正常情况下我们所使用的EPROM不会占用所有的空间,假设我们现在的EPROM占用16K的空间那么剩下的48K空间就被闲置不用了。当乱飞的PC落入这些空间时,读入的数据将为FFH,这是 :MOV R7,A 指令的机器码,将修改R7的内容。因此,当程序乱飞入非EPROM芯片区后,不仅无法导入正规,面且破坏了R7的内容。
`6`*x2Z,Q^0C!gL5Z^WN*rV0@D0 我们知道,当CPU读程序存储器的时候,伴随着会产生一个PSEN信号,我们就可利用这个信号,再加上一个非EPROM区的地址译码信号,构成一个选通信号来起动一个空闲的中断,再用软件陷井的方法从中断程序中把程序导入正规。我们可看下面的一个电子园51单片机学习网/uyj^!q^1^'A&x
电子园51单片机学习网e7U?:Gj1c}8O5h
X^R:{5`0INT0电子园51单片机学习网t]b8N.mP
:Q{TX6nh0b2[0 PSEN电子园51单片机学习网aZMbypNQ
电子园51单片机学习网V6YWhL4_非EPROM地址选通信号
\-F2[7q6|D7B,j2y0电子园51单片机学习网V q'N2V1h5uv|.HW我们也可通过硬件的方法用一个缓冲器直接给数据线写一个值,其原理与上述方法相同。电子园51单片机学习网'qFI$h V"J;?W2R
3t0J%A3n$]w,}5fd0三、 软件看门狗技术
^ e/e M-^4cw'\02aflR ~0 我们知道看门狗的作用就是防止程序发生死循环,或者说程序跑飞。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位如果出现死循环,或者说PC指针不能回来。那么定时时间到后就会使单片机复位。
-v)Zpc2lZ0电子园51单片机学习网B UJk9X#g"ed软件看门狗技术的原理和这差不多,只不过是用软件的方法实现,我们还是以51系列来讲,我们知道在51单片机中有两个定时器,我们就可以用这两个定时器来对主程序的运行进行监控。我们可以对T0设定一定的定时时间,当产生定时中断的时候对一个变量进行赋值,而这个变量在主程序运行的开始已经有了一个初值,在这里我们要设定的定时值要小于主程序的运行时间,这样在主程序的尾部对变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。电子园51单片机学习网!NW/je,Y4su gYJ6X
电子园51单片机学习网(J-Y7RDI j对于T1我们用来监控主程序的运行,我们给T1设定一定的定时时间,在主程序中对其进行复位,如果不能在一定的时间里对其进行复位,T1 的定时中断就会使单片机复位。在这里T1的定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。而T1的中断正常与否我们再由T0定时中断子程序来监视。这样就够成了一个循环,T0监视T1,T1监视主程序,主程序又来监视T0,从而保证系统的稳定运行。
N!M:`!@+C(l4\8^[0
文章评论(0条评论)
登录后参与讨论