FreeRTOS 软定时器

本文深入探讨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()

在这里插入图片描述

示例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值