3120|0

103

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

单片机之防止PC指针的弹飞 [复制链接]

下面就由福州卓跃教育为您具体介绍单片机编程经验之用“软件陷阱+程序口令”对付PC指针的弹飞。
       当CPU受到外界干扰,有时PC指针会飞到另一段程序中,或跳到空白段去。其实,如果PC指针飞到空白段去,倒也好处理。只要在空白段设立软件陷阱(拦截指令),将程序拦截到初始化段或程序错误处理段。但是,如果PC指针飞到另一段程序中去了,系统如何办?小匠在这里推荐一种方法——程序口令,思路如下:
       1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。
       2、设立一个模块(子程序)ID寄存器。
       3、为每个子程序配置一个唯一的ID号码。
       4、每当子程序执行完毕,要返回(RET)之前,先将本子程序的ID号送入 ID寄存器。
       5、返回到上级程序后,先判断ID寄存器中的ID号。
       如果正确,则继续执行;如果不正确,则表示PC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初始化段或程序错误处理段。
       这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。
       仅以一条代码来揭示程序飞跑的本质!750102H  ;MOV 01H,#02H  ,如当前PC不是指向75H,而是指向01H或02H,那么51内的指令译码器将把她们忠实地翻译成AJMP X01H 或 LJMP XXXXH  而XX01H XXXXH又是什么呢?天知道!这样恶性飞跑下去那还不死定!改革一下:
       CLR A ;0C4H
       INC A ;04H
       MOV R1,A ;0F9H
       INC A ;04H
       MOV @R1,A  ;86H

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表