FreeRTOS软件定时器的使用

时间:2021-06-12 23:34:04

先贴上一个创建的代码,先声明一个句柄

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)