4650|3

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于msgQSend的问题!!!急等~~ [复制链接]

刚学习vxWorks,今天碰到了一个问题,想请教一下各位!先谢谢了!

今天看到了一个这样的函数,是有关msgQSend的!
int DataProcess(char *pData, int DataLen)
{
    char *ReceivePack = NULL;
    MNREMSG msgSend;

    ReceivePack = malloc(RESPONSE_PACKET_LEN);
    memset(ReceivePack, 0, RESPONSE_PACKET_LEN);
    memcpy(ReceivePack, pData, DataLen);

    msgSend.cMsgType = 1;
    msgSend.PacketLen = DataLen;
    msgSend.nValue = (unsigned long)ReceivePack;       /*** 传递收到数据包地址***/
    /***** send a msgQ to activate the task of tMnProcess to response the received packet *****/
    if (msgQSend(msgQId, (char*)&msgSend, sizeof(msgSend), NO_WAIT, MSG_PRI_NORMAL) == ERROR)
    {
        free(ReceivePack);
        return -1;
    }
    return 1;
}

我的疑问是:

msgSend不是局部变量吗?当这个函数退出以后,stack不是就被回收了吗?那么这个msgSend的地址不就是无效的吗?
这样不就是有问题吗?msgQReceive接收的数据不就是不正确的吗?

最新回复

msgSend是局部变量没错。 但msgSend.nValue 这个才指向要传的消息的所在。在堆上分配的。     ReceivePack = malloc(RESPONSE_PACKET_LEN);     memset(ReceivePack, 0, RESPONSE_PACKET_LEN);     memcpy(ReceivePack, pData, DataLen);    msgSend.nValue = (unsigned long)ReceivePack; - 千里孤行  详情 回复 发表于 2010-1-6 12:47
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
问题已经解决了!是我自己突然理解除了点问题!!呵呵~~~
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(中级)

4
 
引用楼主 yfan1986 的回复:
刚学习vxWorks,今天碰到了一个问题,想请教一下各位!先谢谢了!

今天看到了一个这样的函数,是有关msgQSend的!
int DataProcess(char *pData, int DataLen)
{
    char *ReceivePack = NULL;
    MNREMSG msgSend;

    ReceivePack = malloc(RESPONSE_PACKET_LEN);
    memset(ReceivePack, 0, RESPONSE_PACKET_LEN);
    memcpy(ReceivePack, pData, DataLen);

    msgSend.cMsgType = 1;
    msgSend.PacketLen = DataLen;
    msgSend.nValue = (unsigned long)ReceivePack;      /*** 传递收到数据包地址***/
    /***** send a msgQ to activate the task of tMnProcess to response the received packet *****/
    if (msgQSend(msgQId, (char*)&msgSend, sizeof(msgSend), NO_WAIT, MSG_PRI_NORMAL) == ERROR)
    {
        free(ReceivePack);
        return -1;
    }
    return 1;
}

我的疑问是:

msgSend不是局部变量吗?当这个函数退出以后,stack不是就被回收了吗?那么这个msgSend的地址不就是无效的吗?
这样不就是有问题吗?msgQReceive接收的数据不就是不正确的吗?


msgSend是局部变量没错。
但msgSend.nValue 这个才指向要传的消息的所在。在堆上分配的。

    ReceivePack = malloc(RESPONSE_PACKET_LEN);
    memset(ReceivePack, 0, RESPONSE_PACKET_LEN);
    memcpy(ReceivePack, pData, DataLen);

   msgSend.nValue = (unsigned long)ReceivePack;


- 千里孤行
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表