freeRtos学习笔记 (6)软件定时器
生活随笔
收集整理的这篇文章主要介绍了
freeRtos学习笔记 (6)软件定时器
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
freeRtos学习笔记
freeRtos软件定时器
软件定时器需要注意事项
软件定时器创建
TimerHandle_t xTimerCreate(const char * const pcTimerName, /* 定时器名称 方便调试*/const TickType_t xTimerPeriod, /* 定时器周期 单位系统节拍*/const UBaseType_t uxAutoReload, /* 定时器模式 是否周期性*/void * const pvTImerID, /* 定时器ID 方便多个定时器使用相同回调函数时,进行区分*/TImerCallbackFunction_t pxCallbackFunction); /* 回调函数*/定时器创建函数
- 第一个参数时定时器名称,方便调试时识别不同定时器
- 第二个参数为定时器周期,单位为系统节拍
- 第三个参数为定时器模式,如果为pdTRUE 则该定时器为周期模式 如果为pdFALSE 则为单次模式
- 第四个参数为定时器ID,当多个定时器公用同一个回调函数时,回调函数中可以根据ID进行区分当前为那个定时器
- 第五个参数为定时器回调函数。
- 返回值:创建成功会返回定时器句柄,否则如果heap内存不够返回NULL
软件定时器开始
BaseType_t xTimerStart(TimerHandle_t xTimer, /* 定时器句柄 */TickType_t xBlockTime); /* 成功启动定时器前的最大等待时间 单位系统节拍 */BaseType_t xTimerStartFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken);软件定时器启动函数
- 第一个参数是定时器句柄
- 第二个参数是成功启动定时器前的最大等待时间 单位系统节拍,软件定时器底层也是一个任务,定时器启动其实最终是给定时器任务发送一个消息,消息队列长度通过 configTIMER_QUEUE_LENGTH配置,当消息队列已满,则会进行等待。定时器任务实际执行消息队列发来的命令依赖于定时器任务的优先级,如果定时器任务是高优先级会及时得到执行, 如果是低优先级,就要等待其余高优先级任务释放 CPU 权才可以得到执行,此参数就是设置最大等待时间的。
- 第二个参数在中断中的定时器启动函数其实就是给定时器任务发送一条消息,发送该任务后,定时器任务从堵塞态进入就绪态,如果定时器任务优先级比当前运行的任务优先级高,则pxHigherPriorityTaskWoken为pdTRUE,在中断结束时可以进行任务切换。
- 返回值 返回 pdFAIL 表示此函数向消息队列发送消息失败,返回 pdPASS 表示此函数向消息队列发
送消息成功。
软件定时器停止
BaseType_t xTimerStop( TimerHandle_t xTimer,TickType_t xBlockTime );BaseType_t xTimerStopFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken);软件定时器停止函数
- 第一个参数是定时器句柄
- 第二个参数是成功启动定时器前的最大等待时间 单位系统节拍,软件定时器底层也是一个任务,定时器启动其实最终是给定时器任务发送一个消息,消息队列长度通过 configTIMER_QUEUE_LENGTH配置,当消息队列已满,则会进行等待。定时器任务实际执行消息队列发来的命令依赖于定时器任务的优先级,如果定时器任务是高优先级会及时得到执行, 如果是低优先级,就要等待其余高优先级任务释放 CPU 权才可以得到执行,此参数就是设置最大等待时间的。
- 第二个参数在中断中的定时器启动函数其实就是给定时器任务发送一条消息,发送该任务后,定时器任务从堵塞态进入就绪态,如果定时器任务优先级比当前运行的任务优先级高,则pxHigherPriorityTaskWoken为pdTRUE,在中断结束时可以进行任务切换。
- 返回值 返回 pdFAIL 表示此函数向消息队列发送消息失败,返回 pdPASS 表示此函数向消息队列发
送消息成功。
软件定时器复位
BaseType_t xTimerReset( TimerHandle_t xTimer,TickType_t xBlockTime );BaseType_t xTimerResetFromISR(TimerHandle_t xTimer,BaseType_t *pxHigherPriorityTaskWoken);软件定时器复位函数
- 第一个参数是定时器句柄
- 第二个参数是成功启动定时器前的最大等待时间 单位系统节拍,软件定时器底层也是一个任务,定时器启动其实最终是给定时器任务发送一个消息,消息队列长度通过 configTIMER_QUEUE_LENGTH配置,当消息队列已满,则会进行等待。定时器任务实际执行消息队列发来的命令依赖于定时器任务的优先级,如果定时器任务是高优先级会及时得到执行, 如果是低优先级,就要等待其余高优先级任务释放 CPU 权才可以得到执行,此参数就是设置最大等待时间的。
- 第二个参数在中断中的定时器启动函数其实就是给定时器任务发送一条消息,发送该任务后,定时器任务从堵塞态进入就绪态,如果定时器任务优先级比当前运行的任务优先级高,则pxHigherPriorityTaskWoken为pdTRUE,在中断结束时可以进行任务切换。
- 返回值 返回 pdFAIL 表示此函数向消息队列发送消息失败,返回 pdPASS 表示此函数向消息队列发
送消息成功。
本文参考 freertos官方文档 https://freertos.org/a00110.html
《安富莱 STM32-V6 开发板 FreeRTOS 教程》
总结
以上是生活随笔为你收集整理的freeRtos学习笔记 (6)软件定时器的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: freeRtos学习笔记 (5)事件组
- 下一篇: keil 使用AC6 中文警告解决办法