请教关于ZigBee组播发送和接收速率的问题
在协议栈中,我用组播方式发送39个字节的数据,每秒钟发送10次,但接收程序却只能大约340ms接收一次,也就是一秒钟接收三次。用串口助手观察接收到数据,发现接收程序每接收到三四次就会出间隔大约1.5秒不接收,然后再接收三四次,如此循环,就像卡顿一样。谢谢指导!
下面贴出我的发送和接收程序
发送程序
static uint8 msg_wireless_send[52];
if ( AF_DataRequest( &SampleApp_Flash_DstAddr, &SampleApp_epDesc,
SAMPLEAPP_FLASH_CLUSTERID,/* 被Profile(属性)指定的有效的集群号*/
39, /* 发送数据长度 */
msg_wireless_send, /* 发送数据缓冲区 */
&SampleApp_TransID, /* 任务ID号 */
AF_DISCV_ROUTE, /* 有效位掩码的发送选项 */
AF_DEFAULT_RADIUS ) == afStatus_SUCCESS )
接收程序
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
uint8 i;
/* clusterId 簇ID号。 pkt->clusterId表示结构体 pkt 下的 clusterId 元素 */
switch ( pkt->clusterId ) /* 判断簇ID号 */
{
/* 收到广播数据 */
case SAMPLEAPP_PERIODIC_CLUSTERID: /* SAMPLEAPP_PERIODIC_CLUSTERID 是 1 */
break;
/* 收到组播数据,本例为组播数据 */ /* 控制LED亮灭 */
case SAMPLEAPP_FLASH_CLUSTERID: /* SAMPLEAPP_FLASH_CLUSTERID 是 2 */
memcpy(receive_RC_value, pkt->cmd.Data, pkt->cmd.DataLength);
AD7147_C_UartT_Send (receive_RC_value);
UartTX_Send_R (receive_RC_value); /* 串口显示接收到的电容电阻值 */
int8 rssi_value[1];
rssi_value[0] = pkt->rssi; /* 将RSSI的值取出 */
UartTX_Send_rssi(rssi_value);
break;
case SAMPLEAPP_ADDR_CLUSTERID:
for(i=0; i<MAX_DEVICE; i++)
{
if(mDevice[i].id==pkt->cmd.Data[0])
{
mDevice[i].shortAddr=BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2]);
}
}
// }
break;
}
}
请问是谁给谁发数据?协调器给终端设备吗?
另外广播数据的发送,底层会做一定的限制,不希望网络地面存在大量的广播数据。
你可以让Coordinator给Router发送,单播的方式发送
非常感谢您的解答,我将组播换成单播模式后,协调器的接收速率已经提高了。
还想请教您一个问题,在哪里可以下载ZigBee的程序例程,我用的是CC2530。
谢谢!
一个协调器有多个终端怎么办?终端需要接收不同的控制命令,如何提高接收速率
