发送数据丢包
时间: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是接收端发送的吧, 请问下有没有在发送端这边可以判断发送完成的接口或者标志?
