DA1458x使用之第三篇——定时器

用定时器可以实现一个周期性的任务,或者RTC,DA14580本身是不带RTC的。


1.首先是定义一个TIMER,在app_api.h文件的APP_MSG{}里,比如定义一个周期性任务的timer

APP_PERIOD_TASK_TIMER


2.定义timer的handler函数,也就是定时器唤醒时要执行的任务程序,如下所示,

int period_task_timer_handler(ke_msg_id_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
 
   /*
       add code here
  */
  
   return (KE_MSG_CONSUMED);
}
需要注意一点,return (KE_MSG_CONSUMED);不可省。

3.将定义的timer和handler关联起来,在app_task_handlers.h里的EXTERN const struct ke_msg_handler app_default_state[]中,程序如下
   {APP_PERIOD_TASK_TIMER,                  (ke_msg_func_t)period_task_timer_handler},

4.好,到现在我们就已经做好了一个定时器唤醒的周期性任务,下面我们启动定时器,并设置定时器的时间
  app_timer_set(APP_PERIOD_TASK_TIMER,TASK_APP,100);
  这里设置的第三个参数100的单位是10ms,也就是说定时器的时间是1s,当执行app_timer_set 1秒后,将会执行period_task_timer_handler()里的程序。

5.这样只是设计了一个定时器,set好时间后,当延时到了之后就会唤醒执行任务。假如想做一个周期性的任务,那么必须要在period_task_timer_handler()里重新启动定时器,程序如下
int period_task_timer_handler(ke_msg_id_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id)
{
   app_timer_set(APP_PERIOD_TASK_TIMER,TASK_APP,100);
   /*
       add code here
  */
  
   return (KE_MSG_CONSUMED);
}
这样一个周期性的定时器就做好了,当你想暂停这个定时器时,用下面的程序即可
ke_timer_clear(APP_PERIOD_TASK_TIMER,TASK_APP);



你可能感兴趣的:(DA14580)