如题,不论是用DEBUG395.exe工具测试还是直接代码控制都出现这种情况,请教如何解决?
同时开启了TCP服务器及UDP服务器两个SOCKET,启用了DHCP,中断处理流程如下:
/**********************************************************************************
* Function Name : CH395SocketInterrupt
* Description : CH395 socket 中断,在全局中断中被调用
* Input : sockindex
* Output : None
* Return : None
**********************************************************************************/
void CH395SocketInterrupt(UINT8 sockindex)
{
UINT8 sock_int_socket;
UINT16 len;
UINT16 tmp;
UINT8 buf[10];
sock_int_socket = CH395GetSocketInt(sockindex); /* 获取socket 的中断状态 */
if(sock_int_socket & SINT_STAT_SENBUF_FREE) /* 发送缓冲区空闲,可以继续写入要发送的数据 */
{
SockInf[sockindex].RemLen = 0;
}
if(sock_int_socket & SINT_STAT_SEND_OK) /* 发送完成中断 */
{
SockInf[sockindex].RemLen = 0;
}
if(sock_int_socket & SINT_STAT_RECV) /* 接收中断 */
{
len = CH395GetRecvLength(sockindex); /* 获取当前缓冲区内数据长度 */
if(len == 0)return;
if(SockInf[sockindex].RemLen != 0)return; /*有数据为发送完成*/
if(len > 512)len = 512;
SockInf[sockindex].RemLen = len; /* 读取数据 */
CH395GetRecvData(sockindex,len,CH395Buffer);
if(sockindex == UDP_SERVER_SOCKET)
{
CH395UDPSendTo(&CH395Buffer[8], (len -8),&CH395Buffer[4], ((UINT16)CH395Buffer[3] << 8) + CH395Buffer[2], sockindex);
}
if(sockindex == TCP_SERVER_SOCKET)
{
CH395SendData(sockindex,CH395Buffer,len);
}
}
if(sock_int_socket & SINT_STAT_CONNECT) /* 连接中断,仅在TCP模式下有效*/
{
}
if(sock_int_socket & SINT_STAT_DISCONNECT) /* 断开中断,仅在TCP模式下有效 */
{
}
if(sock_int_socket & SINT_STAT_TIM_OUT) /* 超时中断,仅在TCP模式下有效 */
{ /*TCP 客户端模式的时候,假如TCP CLIENT无法顺利连接服务器端会进入此中断*/
/*此时可以把Socket源端口号进行自加处理,以新的端口去连接服务器*/
}
}
使用UDP@TCP测试工具测试数据收发,如下图,正常的话收发数据长度应该是一致的。
UDP测试时,会重发。TCP则不会出现这种状况。