打印

关于UC/OS的消息调度问题

[复制链接]
2071|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinjing999|  楼主 | 2009-12-16 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在应用中,需要一个任务中同时发送3个消息向另一个任务,并且这些消息数值是不同的。
等待任务是调度几次啊?比如如下代码

TASK_A
{
while(1)
{
       msg = OSQPend(Internet_send_OSQ,0,&err);
      message =*msg;
     if (message==1)
    {
           数据处理及发送
          OSTimeDly (10);
    }

     else if (message==2)
    {
           数据处理及发送
          OSTimeDly (10);
    }
     else if (message==3)
    {
           数据处理及发送
          OSTimeDly (10);
    }
     else if (message==4)
    {
           数据处理及发送
          OSTimeDly (10);
    }
......

}
}
task_b
{
while(1)
{
  接收数据处理
if(A_命令)
{
message =1;
OSQPost(Internet_send_OSQ,&message);
}
else
if(B_命令)
{
message =2;
OSQPost(Internet_send_OSQ,&message);
}
if(C_命令)
{
message =3;
OSQPost(Internet_send_OSQ,&message);
}
.....

}
}
B任务可能在A任务在等待10秒延时的时候,B任务发送了消息,如果是这样的话,A任务会不会丢掉一个消息,前提消息还没有送满。

相关帖子

沙发
jinjing999|  楼主 | 2009-12-16 10:36 | 只看该作者
B任务可能在A任务在等待10秒延时的时候,B任务发送了消息,A任务还在等待10毫秒超时,如果是这样的话,A任务会不会丢掉一个消息,前提消息还没有送满

使用特权

评论回复
板凳
fangang028| | 2009-12-16 12:55 | 只看该作者
学习

使用特权

评论回复
地板
arm_fan168| | 2009-12-16 14:29 | 只看该作者
本帖最后由 arm_fan168 于 2009-12-16 14:30 编辑

楼主的程序会使新的消息把旧的消息覆盖。因为message的值改变了。
可以这样:
task_b
{
INT8U message[10];
static INT8U msg_ptr = 0;
while(1)
{
  接收数据处理
if(A_命令)
{
message[msg_ptr] =1;
OSQPost(Internet_send_OSQ, &message[msg_ptr]);
if(++msg_ptr >= 10)  msg_ptr = 0;
}
else
if(B_命令)
{
message[msg_ptr] =2;
OSQPost(Internet_send_OSQ, &message[msg_ptr]);
if(++msg_ptr >= 10)  msg_ptr = 0;
}
if(C_命令)
{
message[msg_ptr] =3;
OSQPost(Internet_send_OSQ, &message[msg_ptr]);
if(++msg_ptr >= 10)  msg_ptr = 0;
}
.....

}

使用特权

评论回复
5
wjm_0603| | 2009-12-25 14:41 | 只看该作者
楼上的做法比较正规点,避免出错

使用特权

评论回复
6
511| | 2009-12-29 10:57 | 只看该作者
关注

使用特权

评论回复
7
jinjing999|  楼主 | 2010-1-4 17:06 | 只看该作者
好受用

使用特权

评论回复
8
jinjing999|  楼主 | 2010-1-4 17:07 | 只看该作者
我现在用消息出现的了问题,没有办法只有用信号量了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

363

帖子

1

粉丝