μC/OS-Ⅱ源码学习(5)---消息队列

μC/OS-Ⅱ消息队列函数源码解析

        快速回顾

μC/OS-Ⅱ中的多任务

μC/OS-Ⅱ源码学习(1)---多任务系统的实现

μC/OS-Ⅱ源码学习(2)---多任务系统的实现(下)

μC/OS-Ⅱ源码学习(3)---事件模型

μC/OS-Ⅱ源码学习(4)---信号量

        本文进一步解析事件模型中,消息队列类型的函数源码。

         先回顾一下之前的通用事件控制块类型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 **startINT16U size

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值