UCOSIII中使用消息队列,总共三个任务,一个任务发布消息,另外两个请求消息,消息队列是一个float databuffer[10];task1:发布消息 
{ 
 初始化一些变量        
 while(1)    
{ 
         数据处理 
 
                   OSQPost((OS_Q*                  )&DATA_Msg,                 
                                    (void*                  )databuffer, 
                                    (OS_MSG_SIZE)40, 
                                    (OS_OPT                  )OS_OPT_POST_FIFO | OS_OPT_POST_ALL, 
                                    (OS_ERR*          )&err); 
        OSTimeDlyHMSM(0, 0, 0, 5, OS_OPT_TIME_HMSM_STRICT,&err);         
 
} 
} 
task2:请求消息 
{ 
        float *data; 
        OS_MSG_SIZE size; 
        OS_ERR      err; 
        CPU_SR_ALLOC(); 
        (void)p_arg; 
 
while(1) 
{ 
                       data=OSQPend((OS_Q*                    )&DATA_Msg,    
                                        (OS_TICK                  )0, 
                                        (OS_OPT                    )OS_OPT_PEND_BLOCKING, 
                                        (OS_MSG_SIZE*        )&size,         
                                        (CPU_TS*                  )0, 
                                        (OS_ERR*                  )&err); 
                if(err==OS_ERR_NONE) 
                { 
 
                发送//直接使用指针data操作 
             } 
OSTimeDlyHMSM(0, 0, 0, 5, OS_OPT_TIME_HMSM_STRICT,&err);         
} 
} 
 
task3:请求消息 
{ 
        float *data; 
        OS_MSG_SIZE size; 
        OS_ERR      err; 
        CPU_SR_ALLOC(); 
        (void)p_arg; 
 
while(1) 
{ 
                       data=OSQPend((OS_Q*                    )&DATA_Msg,    
                                        (OS_TICK                  )0, 
                                        (OS_OPT                    )OS_OPT_PEND_BLOCKING, 
                                        (OS_MSG_SIZE*        )&size,         
                                        (CPU_TS*                  )0, 
                                        (OS_ERR*                  )&err); 
                if(err==OS_ERR_NONE) 
                { 
 
                保存//直接使用指针data操作 
             } 
OSTimeDlyHMSM(0, 0, 0, 5, OS_OPT_TIME_HMSM_STRICT,&err);         
} 
} 
 
 
现在的现象是单独屏蔽task2或者task3中的一个任务可以运行,两个开启则发送和保存都不对,把发送和保存放在一起是可以的,但是因为保存占用时间太长,而发送必须保证1秒钟就得发送一次,所以想将发送和保存分开,请大神帮忙看看,谢谢! 
 |