首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

关于msgQSend的有关问题!等~

2012-02-12 
关于msgQSend的问题!!!急等~~刚学习vxWorks,今天碰到了一个问题,想请教一下各位!先谢谢了!今天看到了一个

关于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接收的数据不就是不正确的吗?

[解决办法]

探讨
刚学习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接收的数据不就是不正确的吗?

热点排行