LWIP接收发送数据时间间隔设置

用硬石开发板例程改个TCP通信程序,发现接收数据很慢,间隔达到250ms,很大上位机下发的命令都无法快速响应:

#define TCP_TMR_INTERVAL       1//250  /* The TCP timer interval in milliseconds. */

原来是250,改成1,这样1ms接收回调一次

 

 

LWIP  server 主动上传数据tcp_write  ,要500ms才成功发送一次,TCP_TMR_INTERVAL调小就可以了

 

但是最小也有60ms,最后在网上找到了,是LWIP内部的Nagle算法会把一些小帧数据合并成一个大的数据包再往外发送,

解决: 在 tcp_recv(pcb, tcp_server_recv)前加tcp_nagle_disable(tcp_send_pcb)

   /* 禁止小帧数据合并,否则会出现阻塞,内存溢出错误 */
    tcp_nagle_disable(tcp_send_pcb);
    tcp_recv(pcb, tcp_server_recv);

 

根本原因:tcp_write只是把数据复制到发送队列中,并没有发送,要立即发送使用tcp_output

           err = tcp_write(pcb, puf, TCP_FRAME_DATA_ADD, 1);
              
                if(err == ERR_OK) {
                    ( void )tcp_output( pcb );
                }

对LWIP只是能用,对底层代码了解不足。防止下次出错记录下。