队列又称消息队列
LiteOS 队列特性
usReadWriteableCnt
: 可读或可写的消息数量stReadWriteList
: 可读或可写的消息任务等待链表usQueueState
: 两种状态
/**
* @ingroup los_queue
* Queue information block structure
*/
typedef struct tagQueueCB
{
UINT8 *pucQueue; /**< Pointer to a queue handle */
UINT16 usQueueState; /**< Queue state */
UINT16 usQueueLen; /**< Queue length */
UINT16 usQueueSize; /**< Node size */
UINT16 usQueueID; /**< usQueueID */
UINT16 usQueueHead; /**< Node head */
UINT16 usQueueTail; /**< Node tail */
UINT16 usReadWriteableCnt[2]; /**< Count of readable or writable resources, 0:readable, 1:writable */
LOS_DL_LIST stReadWriteList[2]; /**< Pointer to the linked list to be read or written, 0:readlist, 1:writelist */
LOS_DL_LIST stMemList; /**< Pointer to the memory linked list */
} QUEUE_CB_S;
/* queue state */
/**
* @ingroup los_queue
* Message queue state: not in use.
*/
#define OS_QUEUE_UNUSED 0
/**
* @ingroup los_queue
* Message queue state: used.
*/
#define OS_QUEUE_INUSED 1
创建队列
队列中消息头节点 Head 和 消息尾节点 Tail
usReadWriteableCnt[0]
判断是否可读取
usReadWriteableCnt[1]
判断是否可写入
删除队列时
图解:
LiteOS 的消息传输方式有两种
用户可以根据需求选择不同的方式
接口名 | 描述 |
---|---|
LOS_QueueCreate | 创建一个消息 |
LOS_QueueRead | 读取指定队列中的数据。(buff里存放的是队列节点的地址) |
LOS_QueueWrite | 向指定队列写数据。(写入队列节点中的是buff的地址) |
LOS_QueueReadCopy | 读取指定队列中的数据。(buff里存放的是队列节点中的数据)(预留接口) |
LOS_QueueWriteCopy | 向指定队列写数据。(写入队列节点中的是buff中的数据)(预留接口) |
LOS_QueueWriteHead | 向指定队列的头部写数据 |
LOS_QueueDelete | 删除一个指定的队列 |
LOS_QueueInfoGet | 获取指定队列信息 |
各函数使用可以看源码或者例程
原文:https://www.cnblogs.com/lizhuming/p/13944541.html