在FreeRTOS中,Queue(队列)几乎是任务间通信的“主干道”。无论是传感器数据流、串口接收缓存,还是中断到任务的事件通知,本质上都离不开队列。
但很多人对 Queue 的理解停留在 API 层:
xQueueSend / xQueueReceive = 任务通信工具
而真正理解它的底层机制后,你会发现:
Queue 不是“消息队列”,而是一块带调度能力的线程安全环形内存结构。
一、Queue 的本质:不是“队列”,而是“定长内存槽阵列”
1.1 Queue 的真实结构
FreeRTOS 的 Queue 本质可以抽象成:
一段连续内存 + 固定大小切片(slot)
每个 slot 存储一个“数据单元”。
Queue Memory
┌───────┬───────┬───────┬───────┐
│ item0 │ item1 │ item2 │ item3 │
└───────┴───────┴───────┴───────┘
↑ ↑ ↑ ↑
写指针 读指针 FIFO顺序移动



