控制工程师论坛

工控机

工控机主程序相互监视法

guai
guai

2014-03-17

计算机正常运行,其PC值一定在程序区内。如果PC值跑出程序区,计算机肯定已发生了程序跑飞。检查程序计数器PC值是否在程序区内的方法,是在一个经常要产生外部中断的某个中断服务程序中,读取转入该中断时压入堆栈的断点地址。如果该地址在程序区内,则认为PC值正常,否则一定是程序跑飞了。此时,程序跳转到机器的重启动入口或者复位入口,机器重新启动。于是机器又自救活了。如果没有一个这样合适的中断源,可以专门设置一个定时中断或者几个定时中断,在中断服务程序中检查PC值是否合法,一旦发现不对就立即转入机器的重启动入口。定时器中断的时间常数,可视机器的繁忙程度和重要性设定,一般从几个毫秒到几十毫秒都可以。
       这个方法的局限性是不能查出PC值在程序区内的乱跳,即此时PC值虽受干扰却并没有超出程序区,而是错位乱拼指令而构成一些莫名其妙的操作,或者死循环。

每个工控机的主循环程序和中断服务程序都有一定的运行规律可循。因此可以设计出主循环程序与各中断服务程序、各中断服务程序之间的相互监视。每个监视对要定义一个RAM单元,依靠对其计数/清零的方法表达相互监视信息。例如,某工控机的主循环程序循环一次最长时间为80 ms,它的一个定时中断时间常数为10 ms,当我们安排该定时中断监视主循环程序运行时,可以每次10 ms中断对该RAM单元加1计数,而主循环程序每循环一次对该RAM单元清零。因此,正常运行时,这个监视计数RAM单元的计数值不可能≥9,如果10 ms定时中断服务程序发现其计数值≥9,就知道主循环程序已经被干扰跑飞或出现死循环,于是就跳转到机器的重启动入口,重新恢复运行。使用这个方法,如果设计得当的话,是非常有效的。我们多年的经验是:主循环程序被干扰跑飞可能性最大,中断服务程序越短小越不易跑飞。主循环程序和中断服务程序以及中断服务程序之间的相互监视,应当多设计几个监视对会更好。


回帖

评论0

首页 | 登录 | 注册 | 返回顶部↑
手机版 | 电脑版
版权所有 Copyright(C) 2016 CE China