da14531内核定时器:ke_timer_set()函数周期性定时和one-shot模式下,定时精度问题。

1、ke_timer_set()函数如何设置周期模式,或者one-shot模式?

2、在周期性模式下,能看到使用方法一般是使用二次封装函数app_easy_timer()在回调函数里面再次调用这个函数。

例如,我需要严格的100ms定时器触发一次,使用这种方法,首次调用过了100ms后,需要执行到回调以后才能再次设置100ms,从100ms触发到再次设置100ms需要一定的时间。在周期性循环模式下,会不会导致循环周期实际大于100ms?

如果有这个问题,那严格的100ms循环应该怎么实现?

Parents
  • Hi SML,

    1、ke_timer_set是一个底层函数,函数原型如下void ke_timer_set(ke_msg_id_t const timer_id, ke_task_id_t const task, uint32_t delay);

    这个函数并没有能够配置是周期性还是one-shot的。关于你提问的如何设置周期模式或者one-shot模式,通过ke_timer_set是无法实现的。

    关于kernel的timer,请参考如下链接的chapter2.3.6

    2. Software Platform Overview — DA14585/DA14531 SW Platform Reference Manual (renesas.com)

    2、你如果需要使用比较准确的定时的话,可以使用硬件timer/2,参考例程projects\target_apps\peripheral_examples\timer0\timer0_general

    BR,

    Tim

  • 您好,Tim:

    1、根据ke_timer_set()函数头的描述,它是可以支持周期性的定时(在回调函数里面二次调用?),因为不了解这个函数的内部实现方式,不确定这样调用会不会中间有一定的延时,实际测试准确性还是比较高的;

    2、因为我们应用比较注重低功耗,开启其他定时器会导致功耗相对较高,能兼容BLE的定时器最好。

Reply
  • 您好,Tim:

    1、根据ke_timer_set()函数头的描述,它是可以支持周期性的定时(在回调函数里面二次调用?),因为不了解这个函数的内部实现方式,不确定这样调用会不会中间有一定的延时,实际测试准确性还是比较高的;

    2、因为我们应用比较注重低功耗,开启其他定时器会导致功耗相对较高,能兼容BLE的定时器最好。

Children