用定时器定时吧,又准又节省MCU时间<br />我们不能一直做一个初学者,一定要向高手转变,<br />什么时候转变呢,就是现在,也就是随时,只要有机会<br />一般来讲,除非对外部IO存取等需要短时间延时的地方用到延时语句<br />在系统刚刚启动需要初始化设备时也可以用延时,但是这些延时都是很短的,而且没有准确度要求的,且长延时等待到一定时候是可以跳出的。<br />剩下的地方都尽量用定时器,可以1个定时器多用,当然程序会复杂些,<br />但是这样才会写出功能更多性能更好的程序。<br /><br />我以我的拙作来举一下例子。<br />我的程序里,定时器固定跑在20kHz的定时上,当然不同系统可能会有些差异,低的可能在8K左右,高的可能到40kHz抑或是80KHz以上,这里就用20Khz举例,<br />那么定时周期就是50uS,凡是需要延时时间超过50uS的,一律用定时器来完成。<br />而一般的外部IO操作所需要的延时还不到1uS,剩下很多MCU时间来进行多任务处理,实时性也能达到要求。凡是需要定时的,都是从20KHz分频得到。<br />另外,如果有两个任务1个需要1mS执行一次,每次执行10uS,另一个需要每2mS执行一次,每次需要执行20uS,但是每个的定时误差都要求不能超过5uS,怎么安排这两个任务的顺序呢,这个问题看起来不好解决,其实可以用定时中断的不同相位来解决,任务1在每0mS,1mS,2mS,...执行,而任务2在每0.5mS,2.5mS,4.5mS...执行,这样就能同时满足两个任务的实时性要求。<br /><br />延时本身是不能精确的,即使在这个系统上精确,但是到别的系统也不精确了,移植性太差,而且,如果中断也会影响延时的准确度,如果想准确,就一定要屏蔽中断,但是这样一来,系统就丧失也实时性性能。<br />所以有一说“短的用延时,长的用定时”
|