freertos-system-services.md 3.0 KB


type: concept title: FreeRTOS 系统服务 tags: [freertos, rtos, timer, tickless, memory, heap, concept]

created: 2026-07-12

FreeRTOS 系统服务

软件定时器

轻量级时间管理工具,基于内核 Tick 实现。

与硬件定时器的区别

特性 软件定时器 硬件定时器
实现方式 依赖任务调度器 独立于 CPU
精度 可能受调度影响 高精度
资源 无额外硬件需求 占用硬件资源

类型

  • 一次性定时器:触发一次后停止
  • 周期性定时器:每个超时周期触发一次

API

函数 描述
xTimerCreate() 创建定时器(周期、回调函数)
xTimerStart() 启动定时器
xTimerStop() 停止定时器
xTimerReset() 复位定时器
xTimerChangePeriod() 更改超时时间

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

Tickless 低功耗模式

最小化时钟中断频率以降低功耗。系统无任务时进入休眠,有需要时启动中断唤醒。

原理

  1. 空闲任务检测系统是否无任务执行
  2. 无任务时进入休眠(__WFI 指令),关闭时钟中断
  3. 有任务时唤醒,校正滴答计数值

主要使用 STM32 的睡眠模式(任何中断/事件可唤醒)。

STM32 low power modes

配置项

配置项 说明
configUSE_TICKLESS_IDLE 使能 Tickless 模式
configPRE_SLEEP_PROCESSING(x) 睡前处理(如关闭外设时钟)
configPOST_SLEEP_PROCESSING(x) 醒来处理(如开启外设时钟)

内存管理

FreeRTOS 提供 5 种内存分配算法(heap_1 ~ heap_5):

算法 特点 适用场景
heap_1 最简单,不允许释放内存 系统启动时一次性创建所有对象
heap_2 最佳适应算法,允许释放,不合并相邻块 动态创建/删除,堆栈大小固定
heap_3 包装标准 malloc/free,线程安全 标准库可用时
heap_4 第一适应算法,合并相邻空闲块 最常用(推荐),减少碎片
heap_5 同 heap_4,支持跨越不连续内存区域 复杂内存布局

heap_1 heap_2 best fit heap_4 first fit

内存 API

函数 描述
pvPortMalloc(size_t) 申请内存
vPortFree(void*) 释放内存
xPortGetFreeHeapSize() 获取剩余堆大小

相关页面

  • [[source-freertos|尚硅谷 FreeRTOS 教程 - 资料页]]
  • [[freertos-ipc|任务间通信(IPC)]]
  • [[freertos-porting|FreeRTOS 移植指南]]