FreeRTOS 软定时器

软定时器不需要硬件支持,完全由FreeRTOS内核控制。软件定时器不会占用任何处理时间除非调用。

配置

使用软定时器需要进行如下配置:
FreeRTOS 软定时器

回调函数 Software Timer Callback Functions

FreeRTOS 软定时器
注意,回调函数不能包含可能造成阻塞态的任务,比如说延时函数!
当调用xQueueReceive()队列接收函数时,需要将等待时间设置为0!

属性和状态 Attributes and States of a Software Timer

定时器周期 Period of a Software Timer

单次/周期定时器 One-shot and Auto-reload Timers

  • One-shot
    开启后,只能执行一次
  • Auto-reload
    开启后,以周期重新加载计数值
    FreeRTOS 软定时器

状态 Software Timer States

  • Dormant
    句柄存在但是回调函数不可用
  • Running
    句柄存在且回调函数正常执行
    FreeRTOS 软定时器

上下文 The Context of a Software Timer

The RTOS Daemon (Timer Service) Task

在调度器启动后,系统会自动创建一些任务。比如说,Idle Task;
Daemon Task也是系统自动创建的任务,他负责软定时器功能的实现。

软定时器命令队列 The Timer Command Queue

软定时器API通过定时器命令队列(timer command queue)从调用任务发指令给Daemon Task。这个队列是自动创建的。队列长度通过configTIMER_QUEUE_LENGTH设置。
FreeRTOS 软定时器

Daemon 任务调度 Daemon Task Scheduling

Daemon task只处理命令或者时定时器回调函数,他以最高优先级运行。
FreeRTOS 软定时器

创建和启用定时器

xTimerCreate()

FreeRTOS 软定时器
FreeRTOS 软定时器

xTimerStart()

FreeRTOS 软定时器
FreeRTOS 软定时器
FreeRTOS 软定时器

示例

FreeRTOS 软定时器
FreeRTOS 软定时器

定时器ID The Timer ID

当定时器创建时,会被分配一个初始ID,可以通过API进行修改。

vTimerSetTimerID() 设置定时器ID

FreeRTOS 软定时器

pvTimerGetTimerID() 获取ID

FreeRTOS 软定时器
FreeRTOS 软定时器

示例

FreeRTOS 软定时器
FreeRTOS 软定时器

改变定时器周期

xTimerChangePeriod()

用来改变已经创建的定时器的周期
比如说,LED运行状态指示灯等
FreeRTOS 软定时器

示例

FreeRTOS 软定时器

重置定时器 Resetting a Software Timer

重置定时器就是重置其计数值,如图
FreeRTOS 软定时器

xTimerReset()

FreeRTOS 软定时器

示例

FreeRTOS 软定时器
FreeRTOS 软定时器

相关文章:

  • 2022-12-23
  • 2021-03-31
  • 2022-12-23
  • 2022-02-14
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-06-24
猜你喜欢
  • 2021-11-17
  • 2021-10-31
  • 2021-11-17
  • 2021-11-17
  • 2021-05-21
  • 2021-11-27
  • 2021-11-17
相关资源
相似解决方案