MTK打印之:定时器设计两式比较
前言:
终于完成在MTK模块与单片机通讯实现打印功能,打印虽只是一个与单片机通讯功能,但做完后,把东西整理后,发现还是有很多东西。这次我把做过的两次版本的定时器整出来。
正文:
在第一次开发过程,从简单的处理,这种方式逻辑简单,这也是很多人一拿来到项目就想到的方式吧。这种定时器是根据发送数据后只有两种状态。
1.接收到数据
2.数据超时
这种定时器方式的频率和发送数据次有关,例如:发送N次数据,就startTime和stopTimeN次。
设计过程图如下:
模拟代码如下:
//模拟代码 int g_timeout = 3; void SendData() { StartTimer(SCM_TIME_ID, TimeOut, SCM_SendDataTimeOut); //... } void Handle_RecvData() { g_timeout --; StopTimer(SCM_TIME_ID); //接收到数据后,再发送下帧数据 SendData(); } void SCM_SendDataTimeOut() { if(g_timeout ==0) Exit_Print();//超时次数达到3次,退出打印 g_timeout --; //重发数据 SendData(); }
方式2
这种定时器的设计是大众使用比较多的方式通过这种方式可以减少打开和关闭定时器的次数,这种定时器打关的次数与设置的超时时间有关。
int g_timeout = 3; int TimeOut = 1000; void TaskStart() { g_timeout = 3; StartTimer(SCM_TIME_ID,TimeOut,SCM_SendDataTimeOut); } void SendData() { //这里只做发送数据,就没有打开定时器的操作 //.... } void SCM_Handle_RecvData() { g_timeout = 3; //接收到数据后,再发送下帧数据 SendData(); } void SCM_SendDataTimeOut() { if(g_timeout==0) Exit_Print();//超时计数为0,退出打印 g_timeout--; StartTimer(SCM_TIME_ID,TimeOut,SCM_SendDataTimeOut); }