zigbee ZIGBEE_FRAGMENTATION
不切片传输,每个应用层包最大可以传输99字节
切片传输,没个应用层包最大可以传输431字节
在SampleApp.c中实验,协调器使用pro,enddev也使用pro。这样就不用在配置中预定义ZIGBEE_FRAGMENTATION了。否则要预定义。在项目中,如果发现已经预编译了ZIGBEE_FRAGMENTATION,但是仍然发不出长数据,很可能的原因是
1.应用层的内存开辟的多了,导致协议栈所需内存不足,osal_mem_alloc失败,而发送失败。协议帧内部发送大帧需要的内存也多。
2.当然,乙方在接收大帧的时候,协议栈也需要较大的可以osal_mem_alloc的内存。如果乙方内存不足,即使甲方发送成功,乙方应用层也收不到消息。
经过试验,协议栈正常进行发送 或者 接收的时候,系统应该剩余512B内存,供协议栈使用。
终端发给协调器:
if ( keys & HAL_KEY_SW_3 )
{
SampleApp_Flash_DstAddr.addrMode = afAddr16Bit;
SampleApp_Flash_DstAddr.addr.shortAddr = 0;
SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SendTheMessage();
}
实验中发现使用广播地址将无法切片发送长帧,只能发送短帧。
SampleApp_Flash_DstAddr.addrMode = AddrBroadcast;
SampleApp_Flash_DstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;
SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
切片传输,没个应用层包最大可以传输431字节
在SampleApp.c中实验,协调器使用pro,enddev也使用pro。这样就不用在配置中预定义ZIGBEE_FRAGMENTATION了。否则要预定义。在项目中,如果发现已经预编译了ZIGBEE_FRAGMENTATION,但是仍然发不出长数据,很可能的原因是
1.应用层的内存开辟的多了,导致协议栈所需内存不足,osal_mem_alloc失败,而发送失败。协议帧内部发送大帧需要的内存也多。
2.当然,乙方在接收大帧的时候,协议栈也需要较大的可以osal_mem_alloc的内存。如果乙方内存不足,即使甲方发送成功,乙方应用层也收不到消息。
经过试验,协议栈正常进行发送 或者 接收的时候,系统应该剩余512B内存,供协议栈使用。
终端发给协调器:
if ( keys & HAL_KEY_SW_3 )
{
SampleApp_Flash_DstAddr.addrMode = afAddr16Bit;
SampleApp_Flash_DstAddr.addr.shortAddr = 0;
SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
SendTheMessage();
}
static int32 num=0; void SendTheMessage( void ) { uint8 *theMessageData = osal_mem_alloc(500); if (theMessageData != NULL) { const char constMessageData[] = "Hello World"; osal_memcpy(theMessageData, constMessageData, sizeof(constMessageData)); if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc, 1, 400, theMessageData, &SampleApp_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) { int8 str[6]; num++; _itoa(num,str,10);//str="19232",10进制 HalLcdWriteString(str,1); // Successfully requested to be sent. } else { int8 str[6]; num++; _itoa(num,str,10);//str="19232",10进制 HalLcdWriteString(str,2); // Error occurred in request to send. } } osal_mem_free(theMessageData); }
实验中发现使用广播地址将无法切片发送长帧,只能发送短帧。
SampleApp_Flash_DstAddr.addrMode = AddrBroadcast;
SampleApp_Flash_DstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVALL;
SampleApp_Flash_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;