【摘要】:解决的办法是设立软件陷阱,采取“看门狗”解决。软件陷阱是指用无条件转移指令强行将“跑飞”的程序转移到特定的地址,在该地址存放了程序出错处理子程序,从而使程序纳入正轨。4.程序区可以在LJMP、SJMP、AJMP、RET、RETI等指令后面设置陷阱,能有效地捕获“跑飞”的程序。
通过指令冗余使“跑飞”的程序纳入正轨的条件是“跑飞”的程序必须在程序区运行,而且必须执行到冗余指令,否则指令冗余方法失灵。解决的办法是设立软件陷阱,采取“看门狗”解决。
软件陷阱是指用无条件转移指令强行将“跑飞”的程序转移到特定的地址,在该地址存放了程序出错处理子程序,从而使程序纳入正轨。如果程序出错处理子程序的入口地址的标号为ERR,则软件陷阱实际为长跳转指令:LJMP ERR。为了提高其捕获效果,可在长跳转指令前面增加两条“空操作”指令,具体格式如下:
NOP
NOP
LJMP ERR
软件陷阱可置于以下位置:
1.未使用的中断向量区
如果未使用的中断因干扰被打开,程序错误地转移到中断处理服务程序的入口地址,必然导致程序执行混乱,则可以在这些地址设置陷阱,纠正错误的中断。(https://www.xing528.com)
2.未使用的ROM区
未使用的ROM区通常全部0FFH。OFFH实际为指令“MOV R7,A”,如果程序进入该区域,将发生混乱。只要在该区域适当插入一些陷阱,就可以捕获“跑飞”的程序。
3.表格区
只能在表格区的最后插入陷阱。
4.程序区
可以在LJMP、SJMP、AJMP、RET、RETI等指令后面设置陷阱,能有效地捕获“跑飞”的程序。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
