一文读懂FreeRTOS软件定时器
一文读懂FreeRTOS软件定时器
软件定时器
定时器概述
软件定时器(定时器)用于在将来一个固定的时间点执行一个功能函数,该功能函数即是定时器的回调函数,定时器开始到回调函数执行的时间即是定时器的周期。
回调函数要点
定时器回到函数运行在定时服务任务的上下文中,因此回调函数绝不可以被阻塞。例如,定时器的回调函数不能调用vTaskDelay(),vTaskDelayUntil(),或者特别是访问非零阻塞时间的队列和信号量;
定时器服务任务
计时器功能是可选的,而不是FreeRTOS内核的一部分。 相反,它由计时器服务(或守护程序)任务提供。FreeRTOS提供了一组相关的API函数,许多这种函数使用了标准的FreeRTOS队列向定时器服务任务发送命令。如下图所示:
定时任务配置
- configUSE_TIMERS: 是否启动定时器;
- configTIMER_TASK_PRIORITY:定时服务任务的优先级;
- configTIMER_QUEUE_LENGTH:队列长度,定时器任务同一时间能容纳的定时器命令个数;
- configTIMER_TASK_STACK_DEPTH:定时器任务的栈空间深度,单位字(4Bytes);
单次和周期定时器
定时器1和2同时从0时刻运行,定时器1位单次类型定时器,定时器2位周期定时器,区别如下:
复位定时器
定时器1开启之后,周期为5,应在6时刻执行回调,在时刻5进行复位后,在10时刻执行回调,如下图所示。