gprs模块同一个协调器相连通过串口进行通信,协调器串口收到消息后,判断之后将之广播出去(我使用的串口中断函数),现在发现一个问题就是如果我串口消息发送过快,协调器好像会反应不过来。举个例子,就是gprs模块通过串口一秒钟发了20个数据过去,协调器好像发出去只有1、2个,这个如何解决和优化?还有一个问题,就是我的消息从协调器到终端节点(直连没有中继),终端节点收到之后做出响应并反馈消息,但是这个时间有时很长有时很短,我特意起个定时器看了下,有时只有不到100ms,有时4、5s,这个如何解决和优化,请诸位大师帮忙解答一二
Viki Shi:
ZigBee resides on IEEE 802.15.4 transceivers, which in the 2.4 GHz space communicate at 250 kilobits per second (kbps), but by the time retries, encryption/decryption, and the fully acknowledged mesh protocol is applied, the actual through-put is closer to 25 kbps.
综上,确实有可能出现这种情况,因为CC2530本身处理能力就不是很强大,串口太快协调器反应不过来
至于第二个问题,不确定是发送端的问题还是接收端的问题,建议抓包分析
user5805542:
回复 Viki Shi:
第一个情况有办法解决吗?
user5805542:
回复 Viki Shi:
halUARTCfg_tuartConfig;
uartConfig.configured= TRUE;uartConfig.baudRate= HAL_UART_BR_115200;uartConfig.flowControl= FALSE;uartConfig.callBackFunc= rxCB;HalUARTOpen(0,&uartConfig);
上面是我照着hal层参考写的串口初始化,下面是我写的串口中断响应函数
static void rxCB(uint8 port,uint8 event)
{afAddrType_t my_DstAddr;my_DstAddr.addrMode = (afAddrMode_t)AddrBroadcast;my_DstAddr.endPoint = GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr = 0xFFFF;HalUARTRead(0,uartbuf,6);if( strrchr(uartbuf,'C') || strrchr(uartbuf,'O') ){AF_DataRequest( &my_DstAddr,&GenericApp_epDesc,PWM_PUBLIC,osal_strlen(uartbuf),uartbuf,&GenericApp_TransID,AF_DISCV_ROUTE, AF_DEFAULT_RADIUS);osal_memset(uartbuf,0,osal_strlen(uartbuf));counter = 0;}
}我觉得串口响应不过来有可能是我的代码有问题,能不能帮我看看是哪边问题?
qiang lin2:
回复 user5805542:
你网络中的设备有多少个?先确定你的这个设备是否真的是挂在协调器下的,因为我看到你用的是广播的方式发送数据的,可以用单播的方式试下。
user5805542:
回复 Viki Shi:
我抓包看了下,我这边协调器发了一次数据,终端节点立刻就收到了,应该是接收时出了问题,这个如何解决啊?还有个疑惑就是我只发了一次,但是软件上直接有了3条记录,但是计数却是一样的这是软件的特性吗?
user5805542:
回复 qiang lin2:
虽说我下面只有一个设备,我想要组成一个大网,下面要有至少500左右的设备,又不知道如何单独给特定设备发消息,只好广播了
YiKai Chen:
回复 user5805542:
500左右的设备用广播你會遇到很大問題的
user5805542:
回复 Viki Shi:
短地址单播是可以,但是我要如何知道我要发的那个设备的短地址?还是说短地址可以设置?还有就是上面的问题,我发现好像是接收端出现了问题,这个如何解决?还是说根据代码特定情况去解析解决
user5805542:
回复 YiKai Chen:
会出现拥挤还是?