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

[复制链接]
3233|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;
}
.....

}
wjm_0603 发表于 2009-12-25 14:41 | 显示全部楼层
楼上的做法比较正规点,避免出错
511 发表于 2009-12-29 10:57 | 显示全部楼层
 楼主| jinjing999 发表于 2010-1-4 17:06 | 显示全部楼层
好受用
 楼主| jinjing999 发表于 2010-1-4 17:07 | 显示全部楼层
我现在用消息出现的了问题,没有办法只有用信号量了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

363

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部