OpenEdv-开源电子网

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

关于UCOSIII的消息队列问题

[复制链接]

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
发表于 2016-10-7 17:17:40 | 显示全部楼层 |阅读模式
5金钱
                           pbuf1 = mymalloc(SRAMIN,12);        //申请12个字节
                          pbuf[0]=pitch;
                          pbuf[1]=roll;
                          pbuf[2]=yaw;
                          pbuf1=pbuf;
                          OSTaskQPost((OS_TCB*        )&Task3_TaskTCB,        //向任务task3发送消息
                          (void*                )pbuf1,
                          (OS_MSG_SIZE)12,
                          (OS_OPT                )OS_OPT_POST_FIFO,
                                              (OS_ERR*        )&err);
这句中pitch,yaw,roll;是三个角度,然后我想把它发送到TASK3去进行处理,这样可以吗;
还有  u8 *p;
        OS_MSG_SIZE size;
    OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;
         
        while(1)
        {
                //请求消息
                p=OSTaskQPend((OS_TICK                )0,
                      (OS_OPT                )OS_OPT_PEND_BLOCKING,
                      (OS_MSG_SIZE*        )&size,
                      (CPU_TS*                )0,
                      (OS_ERR*      )&err );
                LCD_ShowString(40,350,100,16,16,p);
                myfree(SRAMIN,p);        //释放内存
                OSTimeDlyHMSM(0,0,0,20,OS_OPT_TIME_PERIODIC,&err); //延时1s
        }        在任务3中我就不知道怎么把这三个数进行分离了,原子哥,跪求你的答复啊,

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-6-17
在线时间
23 小时
发表于 2016-10-8 13:58:45 | 显示全部楼层
本帖最后由 大头bb 于 2016-10-8 13:59 编辑

发送消息方发送的是消息的指针,引用没有值传递,不会发生内存拷贝
消息接收方OSTaskQPend返回值就是消息的指针(如果正确的话,NULL指针要判断err),
至于怎么根据指针读取数值不说了

我也是初学,昨天刚看到,不知道对不对
回复

使用道具 举报

70

主题

6758

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12999
金钱
12999
注册时间
2012-11-26
在线时间
3791 小时
发表于 2016-10-8 14:09:56 | 显示全部楼层
对p进行处理,处理完释放 pbuf1
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-10-8 14:15:52 | 显示全部楼层
pbuf1=pbuf; 这个pbuf是什么,以这里指针重新指向pbuf,那么上面几行代码不就没用了吗?还怎么post,
至于处理p,只要p[0],p[1].....不是一样的吗?前提是你发过来的地址是对的。
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

29

主题

73

帖子

0

精华

高级会员

Rank: 4

积分
511
金钱
511
注册时间
2015-10-11
在线时间
102 小时
 楼主| 发表于 2016-10-10 14:01:13 | 显示全部楼层
ysq7120 发表于 2016-10-8 14:15
pbuf1=pbuf; 这个pbuf是什么,以这里指针重新指向pbuf,那么上面几行代码不就没用了吗?还怎么post,
至于 ...

为什么那几行代码就没有用了,我不明白呀, pbuf1 = mymalloc(SRAMIN,12);        //申请12个字节
                          pbuf[0]=pitch;
                          pbuf[1]=roll;
                          pbuf[2]=yaw;
                          pbuf1=pbuf
这样的话不是把数组的指针给pbuf1了么;
回复

使用道具 举报

19

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1341
金钱
1341
注册时间
2016-4-22
在线时间
187 小时
发表于 2016-10-10 14:41:42 | 显示全部楼层
pbuf1 你这个是动态申请的,而pbuf是一个数组吧。你申请后,将 pbuf1=pbuf。然后post。那么传递过去的是pbuf的地址,而不是申请的地址。
这样怎么还能释放。没明白你代码本来想做什么,看起来是想申请,然后初始化,传递过去处理,处理完释放,但是有突然弄了另一个pbuf进来。
你想清楚你到底要实现什么再说吧
伤情最是晚凉天,憔悴斯人不堪怜。
邀酒摧肠三杯醉,寻香惊梦五更寒。
钗头凤斜卿有泪,荼蘼花了我无缘。
小楼寂寞新雨月,也难如钩也难圆。
回复

使用道具 举报

41

主题

113

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2016-6-12
在线时间
61 小时
发表于 2016-10-10 16:42:55 | 显示全部楼层
未来,我来 发表于 2016-10-10 14:01
为什么那几行代码就没有用了,我不明白呀, pbuf1 = mymalloc(SRAMIN,12);        //申请12个字节
      ...

直接给pbuf申请内存,发送pbuf,然后按pbuf各数组元素分离
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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