#1楼主:uC/OS-II 消息邮箱的疑问!
文章发表于:2008-07-14 08:48

我在启动任务里创建了两个任务A和B,并在启动任务里以广播的方式发送消息邮箱,运行结果如图,怎么一开始只有A任务收到了消息呢?后面A和B才能都收到,问题出在哪呢?
void TaskStart(void *p_arg)
{
char* s;
p_arg = p_arg; //去除编译器警告
#if 0
BSP_Init();
#endif
#if OS_TASK_STAT_EN > 0
OSStatInit(); //CPU使用率统计初始化
#endif
//建立其他任务
OSTaskCreate(
TaskNodeA,
(void *)0,
(OS_STK *)&TaskNodeAStk[TASK_STK_SIZE-1],
TASK_NODEA_PRIO
);
OSTaskCreate(
TaskNodeB,
(void *)0,
(OS_STK *)&TaskNodeBStk[TASK_STK_SIZE-1],
TASK_NODEB_PRIO
);
while (TRUE) //任务主体,无限循环
{
s="Hello!";
OSMboxPostOpt(Str_Box,s,OS_POST_OPT_BROADCAST);
OSTimeDlyHMSM(0,0,2,0);
}
}
void TaskNodeA(void *p_arg)
{
INT8U err;
char* s;
char* s1="NodeA";
p_arg = p_arg; //去除编译器警告
while (1)
{
s=OSMboxPend(Str_Box,0,&err); //请求邮箱
OS_Printf(s1);
OS_Printf(s);
OS_Printf("\n");
OSTimeDlyHMSM(0,0,1,0);
}
}
void TaskNodeB(void *p_arg)
{
INT8U err;
char* s;
char* s2="NodeB";
p_arg = p_arg; //去除编译器警告
while (1)
{
s=OSMboxPend(Str_Box,0,&err); //请求邮箱
OS_Printf(s2);
OS_Printf(s);
OS_Printf("\n");
OSTimeDlyHMSM(0,0,1,0);
}
}