原创 单片机编程经验

2011-8-18 08:48 1830 6 7 分类: MCU/ 嵌入式
       经验之一:用“软件陷阱+程序口令”对付PC指针的弹飞

       当CPU受到外界干扰,有时PC指针会飞到另一段程序中,或跳到空白段去。其实,如果PC指针飞到空白段去,倒也好处理。只要在空白段设立软件陷阱(拦截指令),将程序拦截到初始化段或程序错误处理段。但是,如果PC指针飞到另一段程序中去了,系统如何办?小匠在这里推荐一种方法——程序口令,思路如下:

       1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。

       2、设立一个模块(子程序)ID寄存器。

       3、为每个子程序配置一个唯一的ID号码。

       4、每当子程序执行完毕,要返回(RET)之前,
先将本子程序的ID号送入 ID寄存器。

       5、返回到上级程序后,先判断ID寄存器中的ID号。

       如果正确,则继续执行;如果不正确,则表示PC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初始化段或程序错误处理段。

       这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。到了程序错误处理段,要杀要剐(冷启动还是热启动)就由您了。


        经验之二、不要轻信软件狗

       关于软件狗的讨论,论坛上多矣。匠人也曾经查阅过许多关于软件狗的文章。有些大师确实提出了一些比较有技巧性的方法。但是,匠人的忠告是:不要轻信软件狗!其实,软件狗相当于软件的一种自律行为。一般的思路都是通过设立一个计数器,在计时中断中对其+1,在主程序的适当地方对其清零。如果程序失控了,清零指令未被执行,但中断造常发生,则计数器溢出(狗狗叫了)。但是这里有个问题:万一干扰导致中断被屏蔽了,那软件狗就永远不会叫了!——针对这种可能,有人提出在主程序中反复刷新中断使能标志,保证不让中断被屏蔽。——但万一程序飞到某个死循环中去了,不再执行“刷新中断使能标志”这一功能了,还是有可能把狗狗活活饿死。

   

文章评论1条评论)

登录后参与讨论

xucun915_925777961 2011-8-18 13:24

嗯,不错,学习了^_^
相关推荐阅读
用户1616823 2014-05-06 16:09
RS485通讯中,为什么波特率越高,能够传输的距离越短?
      波特率越高,代表传输信号频率越高。相同的电缆,信号频率越高时,感抗越大,信号在传输线上的损...
用户1616823 2011-08-12 15:47
模块化编程的分层设计经验
标题:模块化编程的分层设计经验(转)   模块化编程的分层设计经验 和文档管理办法(xwj)xwj 发表于 2006-2-26 23:28:00 模块化编程的分层设计经验 操作要点:1、每一层直接...
用户1616823 2011-08-11 10:02
不要做浮躁的嵌入式系统工程师【转载】
  每天读一遍,思考一下:我是否浮躁? 1、不要看到别人的回复,第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,就会知道自己和别人思路的差异。 <?xm...
用户1616823 2011-08-09 18:30
c8051f单片机总结出来的经验
  1. c8051f单片机速度快,时钟频率可达到25,50甚至100Mhz!内部资源丰富!推荐用c8051f330d 芯片,价格便宜,20pin dip封装,上手快! 2. 电源用计算机的usb接...
用户1616823 2011-08-09 16:22
单片机程序中为什么要禁止看门狗
单片机程序中为什么要禁止看门狗 2011-01-09 14:56:35| 分类: ARM学习 | 标签:单片机程序中为什么要禁止看门狗 |字号大中小 订阅 设置看门狗定时器的时候,必须先关闭它才...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条