微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 发送数据丢包

发送数据丢包

时间:10-02 整理:3721RD 点击:

做透传测试,现条件如下:
1,串口最大接收缓存1024个字节
2,每个包80个字节 ,若发送成功,继续发送下一包,发送不成功,产生SERIALAPP_SEND_RETRY事件,继续发送此包
我现在每次发送900多个字节,然后分成80个字节每包往外发送,前面的6个包都没有问题,到第7个包的时候由于消息队列已满,所以发送失败,触发ERIALAPP_SEND_RETRY事件,一直循环,等到队列有空余的时候继续发送。可是我抓包发现一共才发出去8个包640个字节,不知道哪里出了问题。
代码如下:

while(1) {
  if(serial.txrepeat == false) {
	HAL_ENTER_CRITICAL_SECTION(intState);
	serial.txLen = HalUARTRead(SERIAL_APP_PORT, serial.txBuf, SERIAL_APP_TX_MAX);
	HAL_EXIT_CRITICAL_SECTION(intState);
  } 
  
  if(serial.txLen){
	tmpBuf[0] = ++serial.txSeq;  //sequence number at first byte
	memcpy(&tmpBuf[1], serial.txBuf, serial.txLen);
	res = zcl_SendCommand( UARTBRIDGE_ENDPOINT, &serial.txAddr, ZCL_CLUSTER_ID_UARTBRIDGE_TRANSPARENT, CMD_UARTBRIDGE_SEND, TRUE, ZCL_FRAME_CLIENT_SERVER_DIR, /*FALSE*/TRUE, 0, 0, serial.txLen + 1, tmpBuf );
	if(res != ZSuccess) {
		serial.txrepeat = true;
		serial.txSeq--;
		osal_set_event(zclGetZigbeeModuleTaskID(), SERIALAPP_SEND_RETRY);    //retry
		break;
	} else {
		serial.txrepeat = false;
	}
  } else {
	break;
  }
} 

怎么样判断发送失败的? 

最好是在发送收到ack以后,再发送下一包,

   @VV   最好是在发送收到ack以后,再发送下一包。 这个ack是接收端发送的吧, 请问下有没有在发送端这边可以判断发送完成的接口或者标志?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top