MTK定时器使用

时间:2022-04-06 00:22:10

  本帖来自一篇博客,部分内容被修改!

   定时器事件是在指定的时间或时间间隔内反复触发指定的事件,这个指定的事件是通过一个注册的功能函数来实现的。在MTK平台中,操作定时器的具体流程如下:
   
在定义定时器ID的头文件TimerEvents.h中的MMI_TIMER_IDS枚举类型中定义一个自己的TimerID,实验中定义的IDMY_TIMER_ID。当然,要在MAX_TIMERS之前定义。
 
使用函数StartTimer(U16 TimerID,U16 delay,FuncPtr funcPtr)启动一个定时器,其中TimerID为时钟IDdelay为时间间隔,funcPtr为该定时器事件的回调函数。StartTimer 一经执行,当达到时间间隔delay时,系统就会通知执行funcPtr。如:StartTimer(MY_TIMER_ID,1000,my_funcPtr)其中,1000为间隔的时间,在MT622510001 s的定时。函数my_funcPtr为定时器到事件后你要做事情的函数。
  每当退出程序时,通过调用StopTimer(U16 TimerID)来停止TimerID所对应的定时器事件。实验中调用情况为StopTimer(MY_TIMER_ID)
    

这样解释应该清楚了吧。下面举个实例
my_app.c中:定义两个函数:程序入口函数my_app_entry(),还有一个就是定时器到时间后,StartTimer调用的函数my_funcPtr()。函数的参数按实际情况,自己看着办,这里就不用参数了。

下面是具体实现:
my_funcPtr()
{
    
gui_set_text_cursor(70,150);
    gui_print_text(L"Hello World");
}
my_app_entry()

{

    ……
 StartTimer(MY_TIMER_ID,1000,my_funcPtr);
}
 
 这个例子就是定时器最简单的使用,就是隔1秒钟后,在屏幕上显示Hello World 字符串my_funcPtr只会被调用一次。
 
  定时器循环:
 其实很简单,只要在my_funcPtr()中再次调用StartTimer就行了。如下(红色部分是变化的)
my_funcPtr()
{
    gui_set_text_cursor(70,150);
    gui_print_text(L"Hello World");

StopTimer(MY_TIMER_ID);
StartTimer(MY_TIMER_ID,1000,my_funcPtr);
}

在开启同样的TIMER_ID之前,一定要把这个ID关掉!所以先STOPTIMER(),再开启它。
当然,也可以不停止,方法就是再注册一个时间ID,开启它。