关于UCOSIII的消息队列问题

2019-07-20 19:39发布

                           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中我就不知道怎么把这三个数进行分离了,原子哥,跪求你的答复啊,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
大头bb
1楼-- · 2019-07-20 22:23
本帖最后由 大头bb 于 2016-10-8 13:59 编辑

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

我也是初学,昨天刚看到,不知道对不对
jermy_z
2楼-- · 2019-07-20 23:08
对p进行处理,处理完释放 pbuf1
ysq7120
3楼-- · 2019-07-21 03:22
pbuf1=pbuf; 这个pbuf是什么,以这里指针重新指向pbuf,那么上面几行代码不就没用了吗?还怎么post,
至于处理p,只要p[0],p[1].....不是一样的吗?前提是你发过来的地址是对的。
未来,我来
4楼-- · 2019-07-21 06:11
 精彩回答 2  元偷偷看……
ysq7120
5楼-- · 2019-07-21 11:29
pbuf1 你这个是动态申请的,而pbuf是一个数组吧。你申请后,将 pbuf1=pbuf。然后post。那么传递过去的是pbuf的地址,而不是申请的地址。
这样怎么还能释放。没明白你代码本来想做什么,看起来是想申请,然后初始化,传递过去处理,处理完释放,但是有突然弄了另一个pbuf进来。
你想清楚你到底要实现什么再说吧
LVZHENHAI
6楼-- · 2019-07-21 17:21
 精彩回答 2  元偷偷看……

一周热门 更多>