在论坛里看到如果谁的程序里延时程序里用的是使用这种for(i=0;i<DelayCnt;++);这种死等的的方法,就会很多人来指出,这种做法太没有效率了,太没有实时性了,太没有水平了,应该使用中断+标志位的方法等等这种做法就真的那么不堪吗?其实很多人都是人云亦云而已,对单片机系统没有真正的深入了解,单片机一般都是
完成控制功能,实时性真的很重要吗?对个别系统来说实时性可能很重要,但是对更多的系统来说实时性并不重要,但是不管任何系统的稳定性和可靠性都是最重要的,而这种循环方式的可靠性是高于采用中断方式的,中断方式数据要进栈,要出栈,程序计数器要跳转,其操作过程用受到干扰概率大大增加,在IEC61508标准里面就推荐尽量减少中断的使用,采用中断的方式还有一个缺点,就是程序的执行时间不是那么很可控,这个程序的执行时间宽度可能会很大,有可能这次需要1ms,下次就需要5ms,如果每个子程序都是这样的话,就会使整个程序的时间变得不可控,很难计算,很多人会问,运行时间不可控又有什么关系呢?在很多重要的控制系统中,常用的做法就是使程序运行时间是固定的,然后系统通过顺序逻辑监视的方法检测程序运行是否正常,其基本原理就是依靠程序的运行时间来判断某个程序是否在运行。所以说在程序中使用这种方法并不丢人,反而是一种返璞归真。 |