最近在使用过程中发现,如果在一个循环中多次调用AF_DataRequest的话,如果总的APS payload超过70字节,就会发生有些包没有发送出去的问题。
这个问题的原因,我猜测是ZStack底层的缓冲区有限导致的。
那么问题就来了,怎么才能知道当前AF_DataRequest处于可以调用的状态呢?只有知道这个我才能设计上层的缓冲机制,从而避免短时间内多次调用AF_DataRequest产生的丢包问题
VV:
当应用层的Payload超过单包能发送的Payload以后,底层会自动实现分包发送。
你出现丢包的原因可能是快速连续调用AF_DataRequest
建议你在两次调用AF_DataRequest的时候,最一点延时。
chengzi chen:
回复 VV:
VV您好,连续的两次调用AF_DataRequest加多少延时比较合适,我在做的是两次AF_DataRequest间隔500ms,end device端不会马上收到coordinator发送的包,有的包会延时几百个ms.
Ant Killer:
回复 chengzi chen:
个人觉得,按照经验也好,或者实测也好,确定一个延时,并不是个好办法,而是个无奈的办法。难道协议栈就没办法指示它的发送通道是否有空闲?
VV:
回复 chengzi chen:
协调器的数据到End Device的时间,是取决于End Device的data Request的时间。
协调器刚开始是把数据buffer在底层,等待End Device来Data Request的时候才把数据发出去的。