1、指令冗余
CPU取指令进程是先取操作码,再取操作数。在程序的要害当地人为的刺进一些单字节指令,或将有用单字节指令重写称为指令冗余,一般是在双字节指令和三字节指令后刺进两个字节以上的NOP指令。这样即便跑飞程序飞到双字节指令和三字节指令操作数上。由于窄操作指令NOP的存在,防止了后边的指令被过错地履行,为程序归入正轨做好预备。此外,对体系流向起重要作用的指令,如RET、RETI、LCALI.、LJMP,JC等,能够在这些指令之后刺进两条NOP指令,可将跑飞程序归入正轨,以确保这些重要指令的履行。指令冗余只能使CPU不再将操作数当作操作码过错地履行,却不能主动地将程序的过错履行方向改动过来,要想纠止程序的过错履行方向,就需求下面的技能。
2、规划软件“圈套”
一般在程序存储器中未运用的EPROM空间填入窄操作指令NOP,最终再填入一条跳转指令,跳转到跑飞处理程序,或许直接填入指令LJMP 0000H,当跑飞程序落到此区域。即可在履行一段空操作后转入正轨。假如未运用的EPROM空间比较大,能够均匀地填入几条空操作指令和跳转指令,这种几条空操作指令加一条跳转指令的结构咱们称之为“软件圈套”.
软件圈套的一般结构为:
NOP
NOP
LJMP FLY
FLY为跑飞处理子程序,假如程序正常履行,软件圈套部分是永久也履行不到的,只需在程序跑飞到圈套里,软件圈套会马上将程序跳转到正常轨迹。即便程序没有跑飞到圈套里,也能够在程序履行一段过错操作后遇到一个软件圈套,然后转入正轨。除了程序存储器的空白区域,程序的数据表结束也应该设置软件圈套,假如数据表比较大,应该在数据表的中心也设置软件圈套,以确保程序跑飞到数据区能及时转入正轨。别的,假如程序存储器的空间足够大的话,能够在每两个子程序中心设 置一个软件圈套。当运用的中止因搅扰而敞开时,在对应的中止服务程序中设置软件圈套,能及时捕获过错的中止。软件圈套的数量要依据实践遭到搅扰的状况和程序存储器的容量来确认,假如太少不能进行有用的跑飞阻拦,假如太多又会占用很多的程序存储器空间。
3、软件“看门狗”技能
跑飞的程序在履行一些过错操作之后,常常会进入“死循环”,也就足常说的“死机”.一般选用“软件看门狗”技能使程序脱离“死循环”,软件“看门狗”技能的原理是经过不断检测程序循环运转时刻,若发现程序循环时刻超越最大循环运转时刻,则以为体系堕入“死循环”,需求进行犯错处理。在实践运用中,一般用守时中止服务程序守时地查看主程序的运转状况。例如,在RAM区挑选一个字节作为软件看门狗寄存器,主程序每循环一次将该寄存器加l,守时器TO的中止服务程序每中止一次将该寄存器减l并查看一次,假如程序履行正常。看门狗寄存器不会改动或改动不大,假如看门狗寄存器发生了改动或改动很大,则阐明体系堕入“死循环”.需求进行犯错处理。在工业运用中,严峻的搅扰有时会损坏中止办法操控字,封闭中止,形成看门狗失效,这时能够选用环形中止监督体系。用守时器TO监督守时器Tl,用守时器Tl监督丰程序,主程序监督守时器T0.
选用这种环形结构的软件“看门狗”具有杰出的抗搅扰功用,大大进步了体系可靠性。关于需常常运用Tl守时器进行串口通讯的测控体系,则守时器Tl不能进行中止,可改由串口中止进行监控。当然,对主程序最大循环周期、守时器T0和Tl守时周期应于全盘合理考虑。软件“看门狗”技能需求运用守时器,而在大多数的操控程序中,守时器都是紧俏的资源。这就使“软件看门狗”技能的实践运用遭到了约束,咱们能够采纳一些技巧性的处理,将软件“看门狗”程序与其它守时程序复用同一个守时器,这样既完结守时功用又完结软件“看门狗”的功用。
4、查看RAM区标志数据及时发现严峻搅扰
这种办法是在RAM区中挑选几个固定单元,在初始化程序中将其设置成固定的数据,只需程序正常运转,这些单元的内容是不会改动的。假如由于程序“跑飞”或其它搅扰导致这些RAM单元中的任何单元的数据发生了改动,阐明单片机系统现已遭到了严峻的搅扰,不能可靠地运转下去了。咱们能够在程序履行的进程中适时地查看这些RAM单元的内容,一旦发现有数据改动,马上履行LJMP 0000 H句子,强制单片机复位。
5、改写输出端口
扫除严峻搅扰,当单片机系统遭到严峻搅扰时,输出端口的状况也或许因搅扰而改动,在程序的履行进程中适时地依据相关程序模块的运算成果改写输出端口,能够扫除搅扰对输出端口状况的影响,使过错的输出状况及时得到纠正。
6、进行屡次输入采样
防止严峻搅扰,激烈的搅扰会影响单片机的输入信号,形成输入信号瞬间采样的差错或误读,要防止搅扰的影响,一般采纳重复采样,加权均匀的办法。
总结
进步单片机运用体系的可靠性要从软硬件下手,进步体系的本身防护行为,以上所说到几种进步可靠性的办法,都不是独自运用的,只需依据实践状况将这些办法有用地结合起来,才干到达最佳抗搅扰作用,使咱们的单片机系统安稳可靠地作业。当然,单片机体系运转的可靠性也会受其他不确认要素的搅扰。