FreeRTOS 软件定时器组的时基是基于系统时钟节拍实现的,之所以叫软件定时器是因为它的实现不 需要使用任何硬件定时器,而且可以创建很多个

  1. 有回调函数
  2. 有单次模式和周期模式

定时器任务

FreeRTOS 的定时器组件,专门创建了一个定时器任务,或者称之为 Daemon 任务。

FreeRTOS 定时器组的大部分 API 函数都是通过消息队列给定时器任务发消息

使用软件定时器组注意事项

  1. 定时器回调函数是在定时器任务中执行的
  2. 实际应用中不可在定时器回调函数中调用任何将定时器任务挂起的函数,比如vTaskDelay(), vTaskDelayUntil()以及非零延迟的消息队列和信号量相关的函数。

定时器组 API 函数

  1. xTimerCreate()
  2. xTimerCreateStatic()
  3. xTimerIsTimerActive()
  4. xTimerStart()
  5. xTimerStop()
  6. xTimerChangePeriod()
  7. xTimerDelete()
  8. xTimerReset()
  9. xTimerStartFromISR()
  10. xTimerStopFromISR()
  11. xTimerChangePeriodFromISR()
  12. xTimerResetFromISR()
  13. pvTimerGetTimerID()
  14. vTimerSetTimerID()
  15. xTimerGetTimerDaemonTaskHandle()
  16. xTimerPendFunctionCall()
  17. xTimerPendFunctionCallFromISR()
  18. pcTimerGetName()
  19. xTimerGetPeriod()
  20. xTimerGetExpiryTime()

函数 xTimerCreate

TimerHandle_t xTimerCreate
     (  const char * const pcTimerName, /* 定时器名字 */
        const TickType_t xTimerPeriod, /* 定时器周期,单位系统时钟节拍 */
        const UBaseType_t uxAutoReload, /* 选择单次模式或者周期模式 */
        void * const pvTimerID, /* 定时器 ID */
        TimerCallbackFunction_t pxCallbackFunction ); /* 定时器回调函数 */

函数 xTimerCreate 用于创建软件定时器。

  • 第 1 个参数是定时器名字,用于调试目的,方便识别不同的定时器。
  • 第 2 个参数是定时器周期,单位系统时钟节拍。
  • 第 3 个参数是选择周期模式还是单次模式,若参数为 pdTRUE,则表示选择周期模式,若参数为 pdFALSE,则表示选择单次模式。
  • 第 4 个参数是定时器 ID,当创建不同的定时器,但使用相同的回调函数时,在回调函数中通过不同的 ID 号来区分不同的定时器。
  • 第 5 个参数是定时器回调函数。
  • 返回值,创建成功返回定时器的句柄,由于 FreeRTOSCongfig.h 文件中 heap 空间不足,或者定时 器周期设置为 0,会返回 NULL。

函数 xTimerStart

BaseType_t xTimerStart( TimerHandle_t xTimer, /* 定时器句柄 */
                        TickType_t xBlockTime ); 

函数 xTimerStart 用于启动软件定时器。

  • 第 1 个参数是定时器句柄。
  • 第 2 个参数是成功启动定时器前的最大等待时间设置,单位系统时钟节拍,定时器组的大部分 API 函数不是直接运行的(见 19.2 小节说明),而是通过消息队列给定时器任务发消息来实现的,此参 数设置的等待时间就是当消息队列已经满的情况下,等待消息队列有空间时的最大等待时间。
  • 返回值,返回 pdFAIL 表示此函数向消息队列发送消息失败,返回 pdPASS 表示此函数向消息队列发 送消息成功。定时器任务实际执行消息队列发来的命令依赖于定时器任务的优先级,如果定时器任务 是高优先级会及时得到执行,如果是低优先级,就要等待其余高优先级任务释放 CPU 权才可以得到 执行。

函数 pvTimerGetTimerID

void pvTimerGetTimerID( TimerHandle_t xTimer ); / 定时器句柄 */

函数 pvTimerGetTimerID 用于返回使用函数 xTimerCreate 创建的软件定时器 ID。

  • 第 1 个参数是定时器句柄。
  • 返回值,返回定时器 ID。

创建不同的定时器时,可以对定时器使用相同的回调函数,在回调函数中通过此函数获取是哪个定时 器的时间到了,这个功能就是此函数的主要作用。