我正在尝试实现从嵌入式主板到PC的数据传输。为此,我需要使用低延迟通信,我必须使用以太网与TCP / IP。 此外,我使用的是lwip堆栈。
首先,我禁用了nagle算法,因为我必须发送小数据包(10 KB),我希望它们尽快发送,而不必等待中间ACKS。 Wireshark日志告诉我这个工作正常(整个数据在大约1毫秒内发送到PC)。
之后,PC需要大约200毫秒来发送最后一个ACK(因为最后一个段不是最大大小)。
现在的问题是,在嵌入式处理器上,需要很长时间,直到lwip向我的应用程序发出消息,所有数据都已被确认。 当我减少TCP_INTERVAL(让#5说)时,它会大大加快。
我想知道为什么lwip会像这样?我认为Periodic-TCP-Tasks(根据TCP_INTERVAL调用)与接收帧的处理无关(这是主要的另一个调用)。
我希望我能以某种方式说明我的问题是可以理解的,如果不是,我会很感激反馈,所以我可以改进我的问题!
谢谢!
编辑:
经过更多调试后,我发现发送数据的过程导致以下函数调用:
所以现在很清楚,如果我减少TCP_INTERVAL,当然数据会更快地发送,因为tcp_tmr()函数被更快地调用。
但我的问题仍然是:这是正常行为吗?看起来有点奇怪,lwIP在实际发送数据之前等了很长时间。
答案 0 :(得分:-1)
因为你这样做我的主要调用tcp_write(...) 在tcp_write
之后立即使用tcp_output()或者在tcp_recv回调中使用tcp_write()