Skip to content

SDK 基于 FreeRTOS(components/os/freertos),任务、队列、信号量、事件组、软件定时器都是标准接口。原理见 FreeRTOS 调度原理,例程见 FreeRTOS 操作系统

FreeRTOS 常用 API(标准接口)

xTaskCreate(task, name, stack, arg, prio, handle)

创建任务(任务 = 一段独立运行的功能代码)。

参数

  • task:任务函数
  • name:任务名(调试用)
  • stack:栈大小(字)
  • arg:传给任务的参数
  • prio:优先级,数字越大越优先
  • handle:任务句柄输出

返回值:成功返回 pdPASS

vTaskDelete(task)

删除任务(传 NULL 删除当前任务)。

参数

  • task:任务句柄

返回值:无

vTaskDelay(ticks)

任务延时:进入 Blocked 状态并让出 CPU。

参数

  • ticks:延时节拍数

返回值:无

vTaskDelayUntil(&prev, ticks)

精确周期延时:按固定周期唤醒,不受任务执行时间影响。

参数

  • prev:上一次唤醒时间记录
  • ticks:周期节拍数

返回值:无

vTaskStartScheduler()

启动调度器,任务开始运行;正常不返回。

参数:无

返回值:无(不返回)

xTaskGetTickCount()

获取当前系统 tick 数(常用于超时判断)。

参数:无

返回值:当前 tick

xQueueCreate(len, size)

创建队列(任务间传数据的管道)。

参数

  • len:队列长度
  • size:每个元素字节数

返回值:队列句柄;失败返回 NULL

xQueueSend(queue, item, timeout)

向队列发送一条消息。

参数

  • queue:队列句柄
  • item:待发送数据
  • timeout:队列满时最长等待

返回值:成功返回 pdPASS

xQueueReceive(queue, buf, timeout)

从队列取一条消息(为空时阻塞等待)。

参数

  • queue:队列句柄
  • buf:接收缓冲区
  • timeout:最长等待

返回值:成功返回 pdPASS

xSemaphoreCreateBinary()

创建二值信号量(事件通知用)。

参数:无

返回值:信号量句柄

xSemaphoreCreateMutex()

创建互斥锁(有所有权、支持优先级继承,保护共享资源)。

参数:无

返回值:互斥锁句柄

xSemaphoreTake / xSemaphoreGive(sem, timeout) / (sem)

获取(等待)信号量 / 释放信号量。

参数

  • sem:信号量句柄
  • timeout:等待超时(Take 用)

返回值:成功返回 pdPASS

xEventGroupCreate / xEventGroupSetBits / xEventGroupWaitBits()

事件组:用位标志实现“多条件触发”。

参数:见 FreeRTOS 官方文档(创建无参;置位/等待传事件组句柄与位掩码)

返回值:事件组句柄 / 当前事件位

xTimerCreate / xTimerStart / xTimerStop(...)

软件定时器:到点执行回调,不占用硬件定时器。

参数

  • xTimerCreate:名称、周期、是否自动重载、回调

返回值:定时器句柄 / pdPASS

xStreamBufferCreate / xStreamBufferSend / xStreamBufferReceive(...)

流式缓冲:按字节流收发(如串口数据 → 处理任务)。

参数:见 FreeRTOS 官方文档

返回值:句柄 / 发送接收字节数

提示:SDK 使用标准 FreeRTOS API,完整声明见 components/os/freertos/include/ 下的 task.hqueue.hsemphr.htimers.hevent_groups.hstream_buffer.h

常见考点 / 面试题

任务延时和空转延时有什么区别?

vTaskDelay 让任务进入 Blocked 状态、让出 CPU;空转 while 忙等一直占用 CPU,浪费算力、无法休眠省电。

信号量和互斥锁怎么选?

信号量用于事件通知/计数(无所有权);互斥锁用于保护共享资源(有所有权、支持优先级继承,防优先级反转)。

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23