STM32 FreeRTOS软件定时器

ops/2025/1/23 20:38:51/

软件定时器的简介

FreeRTOS 中的软件定时器是一种轻量级的时间管理工具,用于在任务中创建和管理定时器。软件定时器是基于FreeRTOS 内核提供的时间管理功能实现的,允许开发者创建、启动、停止、删除和管理定时器,从而实现在任务中对时间的灵活控制。

软件定时器与硬件定时器的主要区别如下:

软件定时器

硬件定时器

FreeRTOS提供的功能来模拟定时器,依赖系统的任务调度器来进行计时和任务调度

芯片微控制器提供,独立于 CPU,可以在后台运行,不受任务调度器的影响

精度分辨率可能受到任务调度的影响

具有更高的精度分辨率

不需要额外的硬件资源,但可能会增加系统的负载

占用硬件资源不会增加 CPU 的负载

软件定时器能够让函数在未来的设定时间执行。由定时器执行的函数称为定时器的回调函数。从定时器启动到其回调函数执行之间的时间被称为定时器的周期。简而言之,当定时器的周期到期时,定时器的回调函数会被执行。

定时器回调函数在定时器服务任务的上下文中执行,在定时器回调函数中不能调用导致阻塞的API函数

软件定时器服务任务是任务调度器中的一个特殊任务,专门用于管理和维护软件定时器的正常运行。如果configUSE_TIMERS 设置为1,在开启任务调度器的时候,会自动创建软件定时器服务的任务。它主要负责软件定时器超时的逻辑判断、调用超时软件定时器的超时回调函数、处理软件定时器命令队列

软件定时器的状态

FreeRTOS 中的软件定时器有三种状态,分别是:

1、未创建(Uncreated):软件定时器被创建之前的状态。在这个状态下,定时器的数据结构已经被定义,但尚未通过 xTimerCreate() 函数创建

2、已创建(Created):软件定时器已被成功创建,但尚未启动。在这个状态下,可以对定时器进行配置,如设置定时器的周期、回调函数等,但定时器并未开始计时。

3、已运行(Running):软件定时器已经被启动,正在运行中。在这个状态下,定时器会按照预定的周期定时触发超时事件,执行注册的回调函数

单次定时器和周期定时器

在 FreeRTOS 中,软件定时器主要有两种类型:一次性定时器周期性定时器

1、一次性定时器(One-shot Timer): 这种定时器在触发一次超时后就会停止,不再执行。适用于只需在特定时间执行一次任务或动作的场景。

2、周期性定时器(Periodic Timer): 这种定时器会在每个超时周期都触发一次,循环执行。适用于需要在固定的时间间隔内重复执行任务或动作的场景。

FreeRTOS软件定时器相关API函数

软件定时器相关函数如下:

函数

描述

xTimerCreate()

动态方式创建软件定时器

xTimerCreateStatic()

静态方式创建软件定时器

xTimerStart()

开启软件定时器定时

xTimerStartFromISR()

中断中开启软件定时器定时

xTimerStop()

停止软件定时器定时

xTimerStopFromISR()

中断中停止软件定时器定时

xTimerReset()

复位软件定时器定时

xTimerResetFromISR()

中断中复位软件定时器定时

xTimerChangePeriod()

更改软件定时器的定时超时时间

xTimerChangePeriodFromISR()

中断中更改定时超时时间


http://www.ppmy.cn/ops/152557.html

相关文章

数据清洗新利器:自动化数据清洗工具的探秘

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…

C# HTTP/HTTPS 请求测试小工具

这是一个使用 C# 语言开发的实用小工具,旨在帮助用户轻松测试 HTTP 和 HTTPS 请求。 该工具可以发送各种 HTTP 和 HTTPS 请求,包括但不限于 GET、POST、PUT、DELETE 等常见的请求类型。通过简洁明了的界面或命令行操作,用户可以方便地输入目…

Golang笔记——GPM调度器

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的GPM调度器,包括底层源码及其实现,以及一些相关的补充知识。 文章目录 前情提要并发与并行并行 (Parallel)并发 (…

Python毕业设计选题:基于django+vue的智能租房系统的设计与实现

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 租客注册 添加租客界面 租客管理 房屋类型管理 房屋信息管理 系统管理 摘要 本文首…

数据结构基础之《(15)—排序算法小结》

一、排序算法的稳定性 1、稳定性是指同样大小的样本再排序之后不会改变相对次序 2、对基础类型来说,稳定性毫无意义 比如:3和3没有区别。《潜伏》里说同样两个一百元大钞,你能告诉我哪一个是高尚的那一个是龌龊的么 3、对非基础类型来说&a…

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…

web路径问题和会话技术(Cookie和Session)

一.Base 1.base介绍①base是HTMl语言的基准网址标签,是一个单标签,位于网页头部文件的head标签内②一个页面最多使用一个base元素,用来提供一个指定的默认目标,是一种表达路径和连接网址的标记③常见的url路径分别有相对路径和绝对路径,如果base标签指定了目标,浏览器将通过这个…

自动化实现的思路变化

阶段一&#xff1a; 1、成功调用。第一步&#xff0c;一般是用现用的工具&#xff0c;或者脚本成功调用接口 2、解决关联接口的参数传递。有的接口直接&#xff0c;存在参数的传递&#xff0c;一般的思路&#xff0c;就是将这个参数设置为变量。 3、简化代码。总会有些东西是重…