快速回顾
本文进一步解析事件模型中,消息队列类型的函数源码。
先回顾一下之前的通用事件控制块类型OS_EVENT:
//ucos_ii.h
typedef struct os_event {
INT8U OSEventType; /* 事件类型,有六种(其中一种是UNUSED) */
void *OSEventPtr; /* OSEventPtr是一个多用途的指针,当作为链表时,可以指向下一个控制块;当作为具体的事件控制块时,指向具体的事件结构,如OS_Q。信号量不使用该指针 */
INT16U OSEventCnt; /* 信号量计数器,其它事件类型不使用该成员 */
OS_PRIO OSEventGrp; /* 等待信号的任务优先级组,和OSEventTbl共同组成”事件等待表“ */
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* 等待信号的组内优先级 */
#if OS_EVENT_NAME_EN > 0u
INT8U *OSEventName; //事件名称
#endif
} OS_EVENT;
消息队列有自己的专属结构,该结构通过OSEventPtr指针挂载在OS_EVENT中。
//ucos_ii.h
typedef struct os_q {
struct os_q *OSQPtr; /* 链接下一个消息队列控制块,一旦脱离链表,该指针就没用了 */
void **OSQStart; /* 消息队列首条消息的存放地址 */
void **OSQEnd; /* 消息队列最后一条消息的存放地址 */
void **OSQIn; /* 写指针,即下一条消息的存放地址 */
void **OSQOut; /* 读指针,即下一条消息的读取地址 */
INT16U OSQSize; /* 消息队列的长度(能存放几条消息) */
INT16U OSQEntries; /* 当前存储的消息数量 */
} OS_Q;
消息队列的创建
创建消息队列的函数为OSQCreate(void **start, INT16U size
μC/OS-Ⅱ消息队列函数源码解析

最低0.47元/天 解锁文章
1917

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



