FreeRTOS 软定时器

FreeRTOS 软定时器

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

配置

使用软定时器需要进行如下配置:
在这里插入图片描述

回调函数 Software Timer Callback Functions

在这里插入图片描述
注意,回调函数不能包含可能造成阻塞态的任务,比如说延时函数!
当调用xQueueReceive()队列接收函数时,需要将等待时间设置为0!

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

定时器周期 Period of a Software Timer

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

  • One-shot
    开启后,只能执行一次
  • Auto-reload
    开启后,以周期重新加载计数值
    在这里插入图片描述

状态 Software Timer States

  • Dormant
    句柄存在但是回调函数不可用
  • Running
    句柄存在且回调函数正常执行
    在这里插入图片描述

上下文 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设置。
在这里插入图片描述

Daemon 任务调度 Daemon Task Scheduling

Daemon task只处理命令或者时定时器回调函数,他以最高优先级运行。
在这里插入图片描述

创建和启用定时器

xTimerCreate()

在这里插入图片描述
在这里插入图片描述

xTimerStart()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述

定时器ID The Timer ID

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

vTimerSetTimerID() 设置定时器ID

在这里插入图片描述

pvTimerGetTimerID() 获取ID

在这里插入图片描述
在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述

改变定时器周期

xTimerChangePeriod()

用来改变已经创建的定时器的周期
比如说,LED运行状态指示灯等
在这里插入图片描述

示例

在这里插入图片描述

重置定时器 Resetting a Software Timer

重置定时器就是重置其计数值,如图
在这里插入图片描述

xTimerReset()

在这里插入图片描述

示例

在这里插入图片描述
在这里插入图片描述

发布了85 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lun55423/article/details/105707637
今日推荐