基本概念
- 软件定时器的回调函数类似硬件的中断服务函数,所以,回调函数也要快进快出,而且回调函数中不能有任何阻塞任务运行的情况,例如不可以使用vTaskDelay()
- FreeRTOS 提供的软件定时器支持单次模式和周期模式
- FreeRTOS 通过一个 prvTimerTask 任务(也叫守护任务 Daemon)管理软定时器
- 只有设置 FreeRTOSConfig.h 中的宏定义 **configUSE_TIMERS **设置为 1 ,将相关代码编译进来
- 以系统节拍周期为计时单位
- 定时器消息队列的长度由宏 configTIMER_QUEUE_LENGTH 定义,
- FreeRTOS 是采用队列的方式发送一个消息给软件定时器任务,任务被唤醒从而执行接收到的命令
- 软件定时器任务是在系统开始调度(vTaskStartScheduler()函数)的时候就被创建的
注意事项
- 软件定时器的回调函数中应快进快出,绝对不允许使用任何可能引软件定时器起任务挂起或者阻塞的 API 接口,在回调函数中也绝对不允许出现死循环。
- 软件定时器使用了系统的一个队列和一个任务资源,软件定时器任务的优先级默认为 configTIMER_TASK_PRIORITY,为了更好响应,该优先级应设置为所有任务中最高的优先级。
- 创建单次软件定时器,该定时器超时执行完回调函数后,系统会自动删除该软件定时器,并回收资源。
- 定时器任务的堆栈大小默认为 configTIMER_TASK_STACK_DEPTH 个字节。