当前位置: 首页 > article >正文

STM32 FreeRTOS软件定时器

软件定时器的简介

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.kler.cn/a/511021.html

相关文章:

  • 【PyCharm】连接 Git
  • 封装Redis工具类
  • 免费使用 Adobe 和 JetBrains 软件的秘密
  • 【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格
  • 【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程
  • mono3d汇总
  • 力扣面试150 长度最小的子数组 滑动窗口
  • 【从算法小白到 csp-j 一等 第三节】递推与递归
  • Rust 的核心工具链
  • JS宏进阶:正则表达式的使用
  • windows蓝牙驱动开发-BLE音频(二)
  • ROS2 与机器人视觉入门教程(ROS2 OpenCV)
  • 高通8255 Android STR 启动失败要因分析调查
  • Linux 常用命令——文件目录篇(保姆级说明)
  • MySQL中的GROUP_CONCAT函数将分组后的多个行值合并成一个字符串,并用指定分隔符连接
  • 《论文阅读》通过思维链微调产生原因感知的同理心反应 2024
  • 规避路由冲突
  • 【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)
  • AI守护煤矿安全生产:基于视频智能的煤矿管理系统架构解析
  • Python在DevOps中的应用:自动化CI/CD管道的实现
  • 从C到C++:嵌入式开发中两者的差异与过渡技巧
  • C# 声明废弃特性
  • 使用 Go 语言生成样式美观的 PDF 文件
  • LeetCode - #187 Swift 实现重复的DNA序列
  • 事务处理系统 (Transaction Processing System, TPS)
  • TCP报文格式与核心机制