搜索

ucos-ii学习笔记——消息队列的原理及使用

gecimao 发表于 2019-04-30 04:11 | 查看: | 回复:

  ,首先需要定义一个指针数组(用于存放消息邮箱),然后把各个消息数据缓冲区的首地址存入这个数组中

  OS_EVENT*Str_Q;//定义事件控制块指针队列的事件控制块指针用于存放创建的消息队列的指针

  //函数的第一个参数&MsgGrp[0]是void**start,是存放消息缓冲区指针数组的地址,它是指向指针数组的指针

  //返回值是消息队列的指针Str_Q是OS_EVENT型的指针,是事件控制块型的指针

  //第一个参数Str_Q是消息队列的指针,是OSQCreate的返回值,第二个参数s是消息指针

  //第一个参数Str_Q是消息队列的指针,是OSQCreate的返回值,第二个参数s是消息指针

  ss=OSQPend(Str_Q,0,//请求消息队列,参数分别是:Str_Q为所请求消息队列的指针第二个参数为等待时间

  //0表示无限等待,&err为错误信息,返回值为队列控制块OS_Q成员OSQOut指向的消息(如果队列中有消息可用的话),如果

  //没有消息可用,在使调用OSQPend的任务挂起,使之处于等待状态,并引发一次任务调度

  //因为前面发送消息时使用的是LIFO的方式,所以此处第一次得到的消息是上面最后发送的消息

  //运行的现象说明上面分析是正确的,因为当时钟节拍数大于100,小于500时,会发送第一个if语句中的两个字符串s100和s

  //下面运行的任务接收到并且显示。当时钟节拍数大于1000小于1500时,发送第二个if语句中的字符串,下面运行的任务

  //接收并显示。当时钟节拍数大于1500时,就不再发送消息了,下面的任务得不到消息就无限等待下去,所以就不再显示了

  //从运行的现象不难可以看出,有时MyTask或YouTask运行了,但是没有得到消息而处于等待状态

  //使用上面的方法可以很清楚地看出任务调度和运行的关系了MyTask和YouTask是交替运行的,因为延迟时间相等

本文链接:http://baumseelen.com/duiliekongzhikuai/338.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部