初级会员

- 积分
- 85
- 金钱
- 85
- 注册时间
- 2013-11-6
- 在线时间
- 7 小时
|
1金钱
都说ucosiii里面不要用全局变量,要用消息传递,我用了,结果设成OS_OPT_PEND_BLOCKING阻塞模式,在下面这个任务里就会一直阻塞等待消息LOOP_Msg,函数Com_GetComplete(Storage.Uart_Mode - 1)不会运行了,如果设成OS_OPT_PEND_NON_BLOCKING,那么没有请求到消息,if里面的语句也会进去运行,为什么啊?其实这个就是在其他任务里有一个flag标志,flag标志置1了,在下面这个任务里面运行if里面的语句,这种情况该怎么操作啊?求大神
void usart_task(void *p_arg)
{
OS_ERR err;
OS_MSG_SIZE size;
unsigned char *Msg;
p_arg = p_arg;
while(1)
{
Com_GetComplete(Storage.Uart_Mode - 1);
Msg=OSQPend((OS_Q* )&LOOP_Msg,
(OS_TICK )0,
(OS_OPT )OS_OPT_PEND_BLOCKING,
(OS_MSG_SIZE* )&size,
(CPU_TS* )0,
(OS_ERR* )&err);
if(*Msg)
{
LOOP_Para_Transmit(&rxStu);
sendPacket(Storage.Uart_Mode - 1,&rxStu);
}
}
}
|
|