队列实质:队列是一个环形缓冲区,遵循先入先出(FIFO),通常将数据写入尾部,也可强制写到头部。当强制写到头部时,并不会覆盖原来的头部数据。
队列等待唤醒原则:唤醒最高优先级的任务。当优先级一致时,唤醒已经等待时间最长的任务
队列中包含的内容:数据buf,等待数据的任务,等待写数据的任务
队列结构体
队列结构体的声明如下:
typedef xQUEUE Queue_t;
typedef struct QueueDefinition
{
/* 指针,用于指向存储数据的空间 */
int8_t * pcHead; /* 空间头部 */
int8_t * pcWriteTo; /* 写入的空间位置 */
union
{
QueuePointers_t xQueue; /* 读队列相关结构体 */
SemaphoreData_t xSemaphore;
} u;
/* 链表,用于存放等待写入数据任务、等待读取数据任务 */
List_t xTasksWaitingToSend; /* 写入数据任务 */
List_t xTasksWaitingToReceive; /* 读取数据任务 */
volatile UBaseType_t uxMessagesWaiting;
UBaseType_t uxLength;
UBaseType_t uxItemSize;
volatile int8_t cRxLock;
volatile int8_t cTxLock;
#if ( ( configSUPPORT_STATIC_ALLOCATION == 1 ) && ( configSUPPORT_DYNAMIC_
队列原理与操作详解

最低0.47元/天 解锁文章
1892

被折叠的 条评论
为什么被折叠?



