先看下消息队列文章13-FreeRTOS之消息队列详解重点就是队列写入时,将数据发送(写入)到队列的尾部,队列读取时,从队列的头部接收(读取)数据。剩下的就是阻塞机制:当任务读空队列时: 任务可以选择阻塞等待,直到有数据到来或超时。这会让出 CPU 给其他就绪任务,提高效率。当任务写满队列时: 任务可以选择阻塞等待,直到队列有空间空出或超时,并由优先级最高任务先写,如果优先级一样,则由等待时间最长任务写入。这种阻塞机制是 FreeRTOS 实现任务同步的关键。下面重点分析下队列结构体与队列结构示意图关系。队列结构体typedefstructQueueDefinition { int8_t* pcHead; /* 存储区域的起始地址 */ int8_t* pcWriteTo; /* 下一个写入的位置 */ union { QueuePointers_t xQueue; SemaphoreData_t xSemaphore; } u ; List_t xTasksWaitingToSend; /* 等待发送列表 */ List_t xTasksWaitingToReceive; /* 等待接收列表 */ volatileUBaseType_t uxMessagesWaiting;/* 非空闲队列项目的数量 */ UBaseType_t uxLength; /* 队列长度 */ UBaseType_t uxItemSize; /* 队列项目的大小 */ volatil
FreeRTOS之消息队列
发布时间:2026/6/30 3:55:51
先看下消息队列文章13-FreeRTOS之消息队列详解重点就是队列写入时,将数据发送(写入)到队列的尾部,队列读取时,从队列的头部接收(读取)数据。剩下的就是阻塞机制:当任务读空队列时: 任务可以选择阻塞等待,直到有数据到来或超时。这会让出 CPU 给其他就绪任务,提高效率。当任务写满队列时: 任务可以选择阻塞等待,直到队列有空间空出或超时,并由优先级最高任务先写,如果优先级一样,则由等待时间最长任务写入。这种阻塞机制是 FreeRTOS 实现任务同步的关键。下面重点分析下队列结构体与队列结构示意图关系。队列结构体typedefstructQueueDefinition { int8_t* pcHead; /* 存储区域的起始地址 */ int8_t* pcWriteTo; /* 下一个写入的位置 */ union { QueuePointers_t xQueue; SemaphoreData_t xSemaphore; } u ; List_t xTasksWaitingToSend; /* 等待发送列表 */ List_t xTasksWaitingToReceive; /* 等待接收列表 */ volatileUBaseType_t uxMessagesWaiting;/* 非空闲队列项目的数量 */ UBaseType_t uxLength; /* 队列长度 */ UBaseType_t uxItemSize; /* 队列项目的大小 */ volatil