用的是STM32F407ZET单片机,DP83848K以太网芯片,参考原子哥的程序已经实现了Tcp客户端,能够Ping通,实现数据收发。初步实现的功能是串口接收数据,然后缓存到申请的2K空间的缓冲区,然后读出通过网线转发到电脑端的网络调试助手把数据显示出来,串口的波特率是115200,每次发送的数据包是100字节,我设置的是100ms定时发送一次,做测试时发现会丢包,丢的是整个数据包丢失(就是都是100字节数据包的倍数),丢失率小于1%,但是想做到完全不丢失。目前程序中就是初始化了串口DMA和网口这部分程序,无关的全部都屏蔽了的。
求助各位论坛大牛,丢包的可能会是什么,需要修改什么地方?
if((tcp_client_flag&1<<7)==0)//判断有没有数据在发送
{
u16Length = Queue_GetLength(&Q_FIFOInfo);//获取存在2K空间缓冲区的数据量长度
if (u16Length != 0)//如果长度不为0
{
Queue_GetData(tcp_client_sendbuf, &Q_FIFOInfo, u16Length);取出该部分数据
tcp_client_flag|=(1<<7); //标志位
tcp_client_usersent(tcppcb); //发送数据
memset(tcp_client_sendbuf,0,sizeof(tcp_client_sendbuf));//tcp_client_sendbuf大小为1024
}
}
发送部分也是按照原子哥的例程,并没有做什么修改。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>