高级会员
- 积分
- 717
- 金钱
- 717
- 注册时间
- 2016-6-10
- 在线时间
- 191 小时
|
一起来看看
消息的结构体定义
OS_Q
struct os_q { /* Message Queue 消息队列 */
/* ------------------通用成员 ------------------ */
OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_Q 需要使能 OS_OBJ_TYPE_Q 位 */
CPU_CHAR *NamePtr; /* Pointer to Message Queue Name (NUL terminated ASCII) 标记消息队列的名字 */
OS_PEND_LIST PendList; /* List of tasks waiting on message queue 消息队列等待列表 */
#if OS_CFG_DBG_EN > 0u
OS_Q *DbgPrevPtr; //消息队列的头指针
OS_Q *DbgNextPtr;
CPU_CHAR *DbgNamePtr;
#endif
/* ------------------ SPECIFIC MEMBERS -- 特殊成员---------------- */
OS_MSG_Q MsgQ; /* 消息成员 */
};
消息队列相当于一个邮箱 而一个邮箱中的邮件的个数是不确定的,以上包括了对于消息队列的描述及等待列表
其中一个邮件
MsgQ的结构体定义
struct os_msg_q { /* OS_MSG_Q */
OS_MSG *InPtr; /* Pointer to next OS_MSG to be inserted in the queue 队列的进入指针 (这个是我自己的翻译) */
OS_MSG *OutPtr; /* Pointer to next OS_MSG to be extracted from the queue 队列的退出指针 */
OS_MSG_QTY NbrEntriesSize; /* Maximum allowable number of entries in the queue 队列的最大值 */
OS_MSG_QTY NbrEntries; /* Current number of entries in the queue 当前队列中的条目数 */
OS_MSG_QTY NbrEntriesMax; /* Peak number of entries in the queue 队列中条目的峰值数目 */
};
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
该邮件的具体信息保存在指针指向的地方
OS_MSG 结构体定义
struct os_msg { /* MESSAGE CONTROL BLOCK 消息控制块 */
OS_MSG *NextPtr; /* Pointer to next message 指向下一个消息 */
void *MsgPtr; /* Actual message 实际的消息 */
OS_MSG_SIZE MsgSize; /* Size of the message (in # bytes) 消息的大小(直接) */
CPU_TS MsgTS; /* Time stamp of when message was sent 消息发送的时间戳 */
};
因此以上用了三组结构体嵌套来描述一个消息队列。
其中OS_MSG里的NextPtr指针应该和os_msg_q 的OutPtr指针应该是指向一个地方。
不知道我说的对不对?
|
|