我正在将ASF4 API hal_timer用于ARM Cortex M4。我正在使用计时器驱动程序来计时数据序列。为什么不存在复位功能?我在TIMER_TASK_ONE_SHOT模式下使用计时器,想在需要时将其重置。
我认为很简单
timer_start(&TIMER_0);
timer_stop(&TIMER_0);
可以解决问题,但似乎不起作用。
是否需要为每个计时事件重新初始化计时器?
我可能缺少明显的东西。我是否错误地解决了此问题,原因是为什么timer_reset()方法不存在?
我没有这个API的经验,但是从文档中可以明显看出,单个计时器可以在不同的时间段执行多个任务,因此重置TIMER_0
几乎没有语义。相反,您需要重置与计时器关联的单个计时器任务-其中可能有多个。
从documentation(较差且包含错误),到更可靠的source code:
timer_task_instance.time_label = TIMER_0.time ;
其中timer_task_instance
是您要重置的struct timer_task
实例。这会将开始时间设置为当前时间。
可能最好将其包装在函数中:
// Restart current interval, return interval.
uint32_t timer_restart( struct timer_descriptor* desc, struct timer_task* tsk )
{
tsk->time_label = desc->time
return tsk->interval ;
}
然后:
timer_restart( &TIMER_0, &timer_task_instance ) ;
Clifford。我发现您对嵌入式系统感兴趣,我在哪里可以私下与您交谈?我可以在哪个网站找到您?