金牌会员
- 积分
- 1105
- 金钱
- 1105
- 注册时间
- 2015-10-27
- 在线时间
- 206 小时
|
5金钱
UPD测试已经实现了调试助手发送数据给开发板,开发板马上把数据再回给调试助手,不管调试助手发送间隔是1毫秒还是100毫秒,都正常。
TCP Client的测试,我把原子的程序稍微改动下,去掉LCD,按键,希望调试助手发送数据给开发板,然后开发板再把数据发送给调试助手。相当于服务器发送给客户端,然后客户端再把数据返回。
1.我先把调试助手发送数据设置为1000毫秒,然后数据流循环发送,接收还面前能跟的上发送的速度。明显有很的延迟。出现问题如下图所示:前两个字节丢了。发送一个字节显示发送一个。接收一个,但是调试助手没显示,两个字节也是这样。三个字节的时候才显示第三个前两个丢了。循环发送,从第二次出现前面那个符号。不知道为什么
2.发送间隔设置为100毫秒的时候,循环发送就开始出现发送和接收数据不一致了,也是前两两个字节不显示。而且Ex出现在末尾。
不知道是什么问题。求大神给看看。
就修改了void tcp_client_test(void)里面的这点
还有修改了一点//lwIP tcp_poll的回调函数一点,为了实现接收的数据再发送出去。
err_t tcp_client_poll(void *arg, struct tcp_pcb *tpcb)
{
err_t ret_err;
struct tcp_client_struct *es;
es=(struct tcp_client_struct*)arg;
if(es!=NULL) //连接处于空闲可以发送数据
{
if(tcp_client_flag&(1<<7)) //判断是否有数据要发送
{
// es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_sendbuf),PBUF_POOL); //申请内存
// pbuf_take(es->p,(char*)tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf)); //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中
es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_recvbuf),PBUF_POOL); //申请内存
pbuf_take(es->p,(char*)tcp_client_recvbuf,strlen((char*)tcp_client_recvbuf)); //将tcp_client_recvbuf[]中的数据拷贝到es->p_tx中
tcp_client_senddata(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去
tcp_client_flag&=~(1<<7); //清除数据发送标志
if(es->p)pbuf_free(es->p); //释放内存
}else if(es->state==ES_TCPCLIENT_CLOSING)
{
tcp_client_connection_close(tpcb,es);//关闭TCP连接
}
ret_err=ERR_OK;
}else
{
tcp_abort(tpcb);//终止连接,删除pcb控制块
ret_err=ERR_ABRT;
}
return ret_err;
}
我把整个工程发上来。大神给看看啊 |
|