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

FreeRTOS 软件定时器工作原理及应用

FreeRTOS 软件定时器工作原理及应用

FreeRTOS 的 软件定时器(Software Timer) 是一种基于系统节拍(Tick)的计时机制,允许开发者创建周期性或单次触发的定时任务,而无需依赖硬件定时器。软件定时器由 定时器服务任务(Timer Service Task) 管理,适用于需要时间控制但无需高精度的场景(如心跳检测、状态轮询等)。


1. 软件定时器的工作原理

1.1 基本架构

  • 定时器服务任务(Timer Daemon Task)

    • FreeRTOS 在启动调度器时(vTaskStartScheduler())自动创建该任务(需启用 configUSE_TIMERS=1)。
    • 默认优先级由 configTIMER_TASK_PRIORITY 定义(通常较高,如 configMAX_PRIORITIES-1)。
    • 负责检查定时器列表,并在到期时执行回调函数。
  • 定时器控制块(Timer Control Block, TCB)

    • 存储定时器的状态(激活/未激活)、周期、回调函数等信息。
  • 定时器命令队列(Timer Command Queue)

    • 用户通过 API(如 xTimerStart())发送命令(启动/停止/复位等)到队列,由定时器服务任务异步处理。

1.2 工作流程

  1. 创建定时器

    • 调用 xTimerCreate() 创建一个定时器对象(返回 TimerHandle_t 句柄)。
    • 指定定时器类型(单次 pdFALSE / 周期 pdTRUE)、周期时间(Tick 数)、回调函数。
  2. 启动定时器

    • 通过 xTimerStart()xTimerStartFromISR()(中断中调用)将启动命令发送到定时器命令队列。
    • 定时器服务任务从队列中取出命令并激活定时器。
  3. 定时器到期处理

    • 定时器服务任务检查系统时间,当定时器到期时:
      • 执行用户定义的回调函数。
      • 若为周期定时器,自动重新加载周期值;若为单次定时器,则停止。

2. 关键 API 函数

2.1 创建定时器

TimerHandle_t xTimerCreate(
    const char * const pcTimerName,       // 定时器名称(调试用)
    const TickType_t xTimerPeriod,       // 周期(Tick 数)
    co

相关文章:

  • 【嵌入式学习5】PyQt布局- 信号和槽 - 按钮 - 对话框 - 面向对象
  • 无招回归阿里
  • Linux系统线程
  • es中节点类型有哪些
  • npm 项目命名规则
  • innodb如何实现mvcc的
  • 【JS】使用滑动窗口得到无重复字符的最长子串
  • Linux系统高级IO
  • 还是主题混合程序设计
  • Redash:一个开源的数据查询与可视化工具
  • 如何查看 MySQL 的磁盘空间使用情况:从表级到数据库级的分析
  • YOLOv12 训练从这里开始:LabelImg 标注数据集
  • 详解 MySQL 索引的最左前缀匹配原则
  • 【C语言】内存函数
  • SQLark(百灵连接):一款面向信创应用开发者的数据库开发和管理工具
  • 一周学会Pandas2 Python数据处理与分析-NumPy数组创建
  • 网络建设与运维神州数码DCN 基于流的重定向
  • LVGL修改标签文本,GUI Guider的ui不生效
  • 实验研究:不同物体与落点材质对弹起高度的影响
  • app逆向专题一:如何下载app