Ma-包 发表于 2016-8-24 00:00:34

求助:消息队列无响应

刚刚接触UCOS,模仿着挣点原子的UCOS扩展例程\例11-1 UCOSIII消息传递自己写了点,将按键改为串口字符串指令。当接收到某个指令,打开或者关闭相应模块。但是经常出现无法通过串口发送指令关闭工作着的模块,发送其他指令也无响应。可能是什么问题?
void main_task(void *p_arg)
{
        u8 blue;
        OS_ERR err;
       
        OSTmrStart(&tmr1,&err);
       
        while(1)
        {
                if(allow_blue)
                {
                        allow_blue=0;
                        blue = Message_Scan();//信息扫描
                        if(blue)
                        {
                                //发送消息
                                OSQPost((OS_Q*                )&BLUE_Msg,               
                                                (void*                )&blue,
                                                (OS_MSG_SIZE)1,
                                                (OS_OPT                )OS_OPT_POST_FIFO,
                                                (OS_ERR*        )&err);
                        }
        }
                OSTimeDlyHMSM(0,0,0,80,OS_OPT_TIME_PERIODIC,&err);
        }
}

//消息扫描处理任务的任务函数
void Blueprocess_task(void *p_arg)
{       
        u8 *blue;
        OS_MSG_SIZE size;
        OS_ERR err;
        while(1)
        {
                //请求消息BLUE_Msg
                blue=OSQPend((OS_Q*                        )&BLUE_Msg,   
                                        (OS_TICK                )0,
                  (OS_OPT                        )OS_OPT_PEND_BLOCKING,//OS_OPT_PEND_BLOCKING
                  (OS_MSG_SIZE*        )&size,               
                  (CPU_TS*                )0,
                  (OS_ERR*                )&err);
                switch(*blue)
                {
                        case MPU6050_ON:
                                allow_6050=1;
                        break;
                        case MPU6050_OFF:
                                allow_6050=0;
                        break;
                        case BH_ON:
                                allow_bh1750=1;
                        break;
                        case BH_OFF:
                                allow_bh1750=0;
                        break;
                        case DIS_ON:
                                allow_dis=1;
                        break;
                        case DIS_OFF:
                                allow_dis=0;
                        break;
                }
                OSTimeDlyHMSM(0,0,0,100,OS_OPT_TIME_HMSM_STRICT,&err);
        }
}

砂山老妖 发表于 2016-8-24 06:28:21

消息处理的速度必须要快过消息产生的速度,另外main_task中blue变量的类型要使用static

Ma-包 发表于 2016-8-24 19:41:21

通过串口发送指令,单片机先识别然后送入消息队列。但是会出现可以接受指令,却难以压入消息队列,造成类似死机的现象。。。
页: [1]
查看完整版本: 求助:消息队列无响应