初级会员
- 积分
- 110
- 金钱
- 110
- 注册时间
- 2017-12-21
- 在线时间
- 42 小时
|
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秒钟就得发送一次,所以想将发送和保存分开,请大神帮忙看看,谢谢!
|
|