今天被教育了,以前我编程的时候,确实很少考虑可靠性的问题,今天问了同事两个问题,得出两条:
1、凡是外部输入都是不可靠的。
有一个模块里,FPGA会周期性的产生中断请求给ARM,但程序中用了ARM内部定时器来监视这个FPGA中断,若长时间没有中断,将显示错误,并关闭输出。我刚看时就这觉得这样的代码多余,经解释之后发现至少有两点必要:
1)在最终的产品中,FPGA可能坏了,不能正常工作了,但是系统必须保证输出在此时被关闭,避免重大事故发生的可能。
2)在生产过程中,FPGA可能出现,未烧逻辑或烧写了错误的逻辑或虚焊了,必须能够快速地定位出是FPGA的问题,以便及时地修正。
2、输出不变时,仍然要周期性的输出。
为什么外部输出未改变值时,仍要执行输出操作呢。我们这个输出还是在中断中完成,我乍一看,感觉如果输出不变,干脆就不要输出了,节约CPU时间。但是其实不然,为了增加可靠性,即时输出未改变,仍然要周期性的执行输出操作。因为:
在工况中,外部的寄存器(273)很可能被干扰,发生误动作,此时若能及时停止这个误动作,很可能就避免了一些悲剧的发生。若认为输出无变化,就不执行输出操作,误动作就没有机会修正。
作为工控行业,关于可靠性设计真的要多想想,今天北京4号线发生电梯倒退致人死亡的事故,值得我们吸取教训。感觉教育我的同事!!