首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教:有关freescale zigbee内存分配和释放

MSG_Alloc()
MSG_Free()
都是用来开辟空间给上下层交换信息的消息队列用的。你要发送的数据通过mcps.dataRequest就可以了,为什么要自己去另外开辟空间?
自己开辟有可能影响程序的运行。

如果可能把你的程序帖出来看看
* Send the Data Request to the MCPS */
NR MSG_Send(NWK_MCPS, pPacket);
/* Prepare for another data buffer */
MSG_Free(pPacket);pPacket = NULL;
numPendingPackets++;

不需要free的
在本层开辟的空间,在其他层处理了以后会自动free的
你free的话,等于刚开辟空间,下层还没有来得及处理,或者处理了一般就被free了
中心点重启的话,end device最好是重启,如果不重启,那么试着在关联以前发一下MLME-reset的命令,然后再关联。中心点相device是非直接方式,device没有取到数据的话,数据就一直在coordinator的缓存里面,缓存空间有限,所以三次以后就没有空间了。
估计也是你三次发送的时间太密集,一般来说中心点得不到device收到数据的ack的话,隔一定时间,好像要10秒以上,会自动丢弃数据的。 另外,也可以用data-purge的命令去清楚
device有没有执行poll的操作?
另外,估计是重启以后有些设置有变动吧,具体我也不清楚,可能要仔细分析一下
恭喜,说一下你的经验,如何设置就可以了?

我以前用15。4来做数据传输,coordinator向device发送数据,如果数据发送不成功,那么coordinator的mac层自动重发三次,如果还是不行,就会返回一个不成功的confirm信息,传送到mac的数据也会自动被丢弃。你一直都申请不到可能是其他地方的问题。

要注意,对于消息队列,你所分配的空间会在mac层free掉,而mac层上来的indication等需要你free
我觉得coordinator不会一直保留,不然找不到的device数目多的话,coordinator不会有这么多空间保留数据的。应该有个时间过后会丢弃数据
返回列表