头文件#include "freertos/timers.h"
总体过程:申请→启动→定时
0.初始化/注册:
Delay_Turnoff_timer_init();
Delay_Turnoff_timer_init();函数内容:
/*-------------------------------------------------------------------------------------------
软件定时器创建函数
pcTimerName:软件定时器名字,文本形式,纯粹是为了调试(FreeRTOS使用定时器时通过句柄,而不是名字)
xTimerPeriodInTicks:软件定时器的周期,单位为系统节拍周期(即 tick)
uxAutoReload:设置为pdTURE使用周期模式,设置pdFALSE使用单次模式
pvTimerID:软件定时器ID,数字形式
pxCallbackFunction:软件定时器的回调函数(用户自己实现)
返回值是一个TimerHandle_t类型的句柄
----------------------------------------------------------------------------------------------*/
static void Delay_Turnoff_timer_init(void)
{
xTimer_delay_turnoff = xTimerCreate("delay_turn_off_light",
/*定时溢出周期, 单位是任务节拍数*/
pdMS_TO_TICKS(10000), //这边设置定时的时间
/*是否自动重载, 此处设置周期性执行*/
pdFALSE,
/*定时器ID*/
(void *) 1,
/*回调函数*/
vtimer_delay_callback);
}
TimerHandle_t xTimer_delay_turnoff = NULL;
2.给定时器申明一个指针变量xTimer_delay_turnoff,后面注册和启动,停止都会用到。
3.在所要开始定时的位置
xTimerStart(xTimer_delay_turnoff,0);
4.回调函数中处理内容
static void vtimer_delay_callback(xTimerHandle pxTimer)
{
}
5. 结束软件定时
xTimerStop(xTimer_delay_turnoff,0);
参考总结:
1.FreeRTOS一天一个小知识之任务延时函数vTaskDelay_simplemethane的博客-CSDN博客_vtaskdelay最小间隔多少