OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5056|回复: 1

UCOSIII中使用消息队列

[复制链接]

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2017-12-21
在线时间
42 小时
发表于 2019-2-21 15:54:44 | 显示全部楼层 |阅读模式
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秒钟就得发送一次,所以想将发送和保存分开,请大神帮忙看看,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

295

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2019-3-26
在线时间
9 小时
发表于 2019-4-4 09:04:20 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-2 08:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表