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;
浙公网安备 33010602011771号