相关技术专题 Correlation
您现在所在的位置:首页 > 相关技术专题 > 怎样提高软件的可靠性
万思简介从事电力无功补偿技术开发与应用近三十年,喜欢接受新生事物,以钻研为乐趣...一贯主张:把简单的事做到极致,成为不简单!风风雨雨这些年,成功与失败并存,愉悦与痛苦共尝...所有的人生经历成就了今天的自己..

怎样提高软件的可靠性

发布时间:2023-09-28 11:37:31 相关技术专题 作者:wangspower浏览:

提到单片机系统的可靠性,人们几乎不约而同地会想到看门狗,似乎只要有了看门狗就可以万事大吉,其实看门狗只能保证单片机死机时可以产生一个复位信号,有了看门狗并不能够提供足够的可靠性。因此才引出软件的可靠性问题。

计算机的死机相当于程序跑飞而进入了一个死循环。而如果程序跑飞之后没有进入死循环而又返回到正常程序循环当中,那么就不会出现死机现象,于是看门狗就不会起作用,但是程序跑飞之后究竟干了些什么是不可预计的,可能会影响单片机系统的正常运行,因此软件的可靠性设计工作就是要保证在程序跑飞之后尽可能弥补程序跑飞造成的问题。

比如,在中断服务程序中发生跑飞而又返回主循环,这时CPU认为中断服务程序没有完成,仍然处于关中断状态,于是进一步的中断就不会产生,导致系统运行异常。弥补这个缺陷的作法就是在主循环中要开中断,并且清理中断标志,因为既然程序已经在主循环中运行,就必然已经脱离了中断服务程序,所以在主循环中开中断就是一种提高软件可靠性的方法。

再比如,大部分人都喜欢在复位初始程序中将一些常数值放在RAM中,以后不再对这些常数进行设置。如果在程序跑飞过程中修改了这些常数而又返回主循环,于是系统运行就会发生异常。弥补这个缺陷的办法就是在主循环中反复设置这些常数,这样就保证了只要程序进入主循环这些常数就是正确的,于是就提高了软件的可靠性。

再比如,大部分人都喜欢在复位程序中对一些功能部件(在新型单片机中这类功能部件是很多的)进行初始设置,以后不再进行设置。如果在程序跑飞过程中修改了这些设置而又返回主循环,于是系统运行就会发生异常。弥补这个缺陷的办法就是在主循环中反复对这些功能部件进行初始设置。但是千万要注意:对一些功能部件的初始设置可能会对功能部件的运行造成影响。例如对A/D转换器进行初始设置可能会导致A/D转换器停止正在进行的转换过程而重新开始新的转换过程,这可能会导致问题。处理这个问题的办法是不在主循环中对A/D转换器进行初始设置,而是设计一个定时器中断,在定时器中断服务程序中检测A/D转换器的工作状态,如果异常,则对A/D转换器重新进行初始设置,如果正常,则返回主程序。这就保证了A/D转换器的异常状态不会超过一个定时器周期。总之,只在程序的初始过程中进行功能部件的初始设置不能够保证可靠性。

大部分程序的主循环运行时间都很长,特别是一些延时程序可能超出看门狗的延时时间,于是很多人喜欢在主程序中多次喂狗或者在延时程序中喂狗,这就可能会造成一些隐患,因为程序跑飞后可能会在一些局部小循环中运行,如果这个局部小循环中存在喂狗指令序列,则看门狗就不会起作用,导致可靠性降低。最可靠的办法是在整个程序中只在主循环中的一处喂狗,这种作法可能会使程序设计的难度加大,但确实物有所值。

提高软件的可靠性是一项难度很大的工作,认真的思考与丰富的经验是做好这项工作的前提,没有捷径可循。