ucos-ii学习笔记——消息队列的原理及使用2022年11月22日

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

&err为错误信息,使之处于等待状态,返回值为队列控制块OS_Q成员OSQOut指向的消息(如果队列中有消息可用的话),并引发一次任务调度//0表示无限等待,在使调用OSQPend的任务挂起,//定义事件控制块指针队列的事件控制块指针用于存放创建的消息队列的指针如果OS_EVENT*Str_Q;//没有消息可用!

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

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

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

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

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

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

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

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

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

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

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

文章已创建 799

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部