type: concept title: FreeRTOS 系统服务 tags: [freertos, rtos, timer, tickless, memory, heap, concept]
轻量级时间管理工具,基于内核 Tick 实现。
| 特性 | 软件定时器 | 硬件定时器 |
|---|---|---|
| 实现方式 | 依赖任务调度器 | 独立于 CPU |
| 精度 | 可能受调度影响 | 高精度 |
| 资源 | 无额外硬件需求 | 占用硬件资源 |
| 函数 | 描述 |
|---|---|
xTimerCreate() |
创建定时器(周期、回调函数) |
xTimerStart() |
启动定时器 |
xTimerStop() |
停止定时器 |
xTimerReset() |
复位定时器 |
xTimerChangePeriod() |
更改超时时间 |
注意:定时器回调函数在定时器服务任务上下文中执行,不能调用导致阻塞的 API 函数。
最小化时钟中断频率以降低功耗。系统无任务时进入休眠,有需要时启动中断唤醒。
__WFI 指令),关闭时钟中断主要使用 STM32 的睡眠模式(任何中断/事件可唤醒)。
| 配置项 | 说明 |
|---|---|
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,支持跨越不连续内存区域 | 复杂内存布局 |
| 函数 | 描述 |
|---|---|
pvPortMalloc(size_t) |
申请内存 |
vPortFree(void*) |
释放内存 |
xPortGetFreeHeapSize() |
获取剩余堆大小 |