一种高效定时器模块的设计与实现
软件定时器只有在有嘀嗒发生且自身状态为RUNNING的情况下才会运行,其计时时间-duration随嘀嗒而累加,如果duration达到超时值,则置overow_ag,然后判断该定时器是否周期定时器,是则重启定时-清零duration,否则判断是否多次定时,定时次数计数未满则重启定时,计数满后停止该定时器。
本文引用地址:https://www.eepw.com.cn/article/118088.htm定时器应用
定时器模块在软件系统中是一个基本功能单元,它为其他模块或上层应用提供超时、计时服务[5]。以门锁的驱动为例讲述下定时器的应用。
在门锁闭锁时,BCM对门锁电机的闭锁驱动控制需要保持200ms的时间,在逻辑上便是输出一个200ms的控制脉冲,该部分代码如下:
...
DrivePort(ALLDR_LK_OUT,DRIVEON);
TimerStart(ALLDR_LOCK_200MS,200,0,1);
if(1==TM[ALLDR_LOCK_200MS].overow_ag)
{
DrivePort(ALLDR_LK_OUT,DRIVEOFF);
TM[ALLDR_LOCK_200MS].overow_ag=0;
}
...
可见,在设计良好的定时器驱动以后,实现某种定时应用非常简单,其他应用示例在此不再赘述。
结语
本文设计的定时器模块,逻辑清晰,使用方便,做为一个稳定的底层驱动,在实际应用中得到了很好的应用。
评论