uc/os-ii消息队列

来源:互联网 发布:mac下画流程图的工具 编辑:程序博客网 时间:2024/04/29 16:56

使用消息队列可以在任务之间传递多条消息。消息队列由三个部分组成:事件控制块、消息队列和消息。
消息队列的数据结构如下图所示。从图中可以看到,消息队列相当于一个共用一个任务等待列表的消息邮箱数组,事件控制块成员OSEventPtr指向了一个叫做队列控制块(OS_Q)的结构,该结构管理了一个数组MsgTbl[ ],该数组中的元素都是一些指向消息的指针。
这里写图片描述

为了对消息指针数组进行有效的管理,μC/OS-II把消息指针数组的基本参数都记录在一个叫做队列控制块的结构中,其中可以移动的指针为OSQIn和OSQOut,而指针OSQStart和OSQEnd只是一个标志(常指针)。当可移动的指针OSQIn或OSQOut移动到数组末尾,也就是与OSQEnd相等时,可移动的指针将会被调整到数组的起始位置OSQStart。也就是说,从效果上来看,指针OSQEnd与OSQStart等值。于是,这个由消息指针构成的数组就头尾衔接起来形成了一个如图所示的循环的队列。
这里写图片描述
队列控制块的源码如下:

typedef struct os_q {                   /* QUEUE CONTROL BLOCK                                         */    struct os_q   *OSQPtr;              /* Link to next queue control block in list of free blocks     */    void         **OSQStart;            /* Pointer to start of queue data                              */    void         **OSQEnd;              /* Pointer to end   of queue data                              */    void         **OSQIn;               /* Pointer to where next message will be inserted  in   the Q  */    void         **OSQOut;              /* Pointer to where next message will be extracted from the Q  */    INT16U         OSQSize;             /* Size of queue (maximum number of entries)                   */    INT16U         OSQEntries;          /* Current number of entries in the queue                      */} OS_Q;

µC/OS-Ⅱ提供了九种对消息队列进行操作的函数,函数所属文件是OS_Q.C。
这里写图片描述
上述函数与消息邮箱的操作函数类似,不详细分析。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 逆战更新太慢怎么办 win7我的电脑没了怎么办 剑灵启动游戏慢怎么办 网页页面结束进程也关不掉怎么办 开机就启动微信怎么办 微信突然无法启动怎么办 微信发送太频繁怎么办 微信在电脑上打不开文件怎么办 微信照片电脑上打不开怎么办 换一部手机微信怎么办 微信支付宝停止运行怎么办 剑三重制版卡顿怎么办 剑三客户端更新不动了怎么办 安装包安装失败怎么办有内存 qq飞车换手机了怎么办 qq飞车求婚失败戒指怎么办 改脸型皮肤会下垂怎么办 情侣关系弄僵了怎么办 用微信交话费没有到账怎么办 微信交错话费了怎么办 微信缴费交错了怎么办 微信支付被投诉怎么办 微信q币充值错误怎么办 微信充值流量充错了怎么办 微信延迟到账怎么办 移动流量充错了怎么办 qq充话费等待发货怎么办 qq充值话费没到账怎么办 电信话费冲错了怎么办 微信手机充错话费充空号怎么办 京东地址写错了怎么办 京东售后不退款怎么办 冲了话费不到账怎么办 币安维护充值怎么办 微信话费未到账怎么办 微信话费交错了怎么办 北京移动查话费余额怎么办 淘宝卖家客服无法联系怎么办? 微信支付月限额怎么办 微信超额20万怎么办 微信支付超额了怎么办