
在 RTOS 开发中,队列是最常用的任务间通信机制之一。比如:UART接收 ↓ 解析一帧数据 ↓ 发送到队列 ↓ 应用任务取出 ↓ 处理数据看起来非常简单。但当一个项目从 FreeRTOS 移植到 uC/OS,或者反过来移植时,有一个非常容易踩坑的问题:代码逻辑完全一样,队列 API 也看起来差不多,但应用任务拿到的数据却全部一样。为什么?根本原因往往不是 UART,也不是队列长度,而是:两个 RTOS 对“队列里到底保存什么”的设计思路可能不同。理解这个问题,实际上就是理解 RTOS 消息通信中非常核心的两个概念:传值和传指针。一、先看一个典型的串口接收场景假设串口接收中断不断收到数据。接收代码维护一个缓冲区:staticuint8_tsCOM_RxBuf[COM_PACKAGE_LEN