FreeRTOS软件定时器的使用
先贴上一个创建的代码,先声明一个句柄
TimerHandle_t pump_wakeup_timer_handle = NULL;
创建定时器和启动定时器,第三个参数,pdFALSE是只定时一次,pdTRUE是自动重载定时器,也就是一直循环。
if(pump_wakeup_timer_handle == NULL)
{
//定时器的第一个参数,字符串,定时器的名字
//第二个参数,是定时时间,毫秒级别
//第三个参数,只定时一次,还是自动加载
//第4个参数吗,定时器的ID,一般为0
//第5个参数,定时到了的回调函数
pump_wakeup_timer_handle = xTimerCreate(NULL, (15000), pdFALSE, NULL, pump_wakeup_timeout_callback);
//启动定时器
//reset这个定时器
if(xTimerStart(pump_wakeup_timer_handle, 0) != pdPASS)
{
Report("timer start fail");
}
}
定时器回调函数,比如上面定时了15S,那么15S之后到了就会调用这个函数。
void pump_wakeup_timeout_callback(TimerHandle_t xTimer)
{
if (pump_wakeup_timer_handle != NULL)
{
xTimerDelete(pump_wakeup_timer_handle, 0);
pump_wakeup_timer_handle = NULL;
}
Report("task suspend");
}
问题记录,实际测试发现定时器启动函数,只能启动一次,如果启动之后,再次启动会产生问题,导致时间异常,总结起来就是定时器启动函数不会在内部检查是否已经启动了。我犯过这个错误,需要注意。
if(xTimerStart(pump_wakeup_timer_handle, 0) != pdPASS)