我正在St Cortex M3设备上创建服务器。我正在使用lwip api和freertos。一切正常,但响应时间还远未到。我目前正在使用LWIP 1.3.2和Freertos 7.3。
单个客户端连接到服务器,并且必须经常发送一些时间关键型数据。这些数据包大约有6个字节。其他时候,我的发送量超过20千。
我现在遇到的问题是,这些小包似乎要花很长时间才能发送出去。我认为这是因为LWIP正在等待更多的数据排队以便进行更有效的传输。我不能等待2到3秒钟来发送数据;客户机通常期望在几微秒或毫秒内发送数据。
我试过使用lwip_send和lwip_write。(我知道其中一个和另一个是一样的,在末端有一面旗子。我只是想尝试一下……)我已经尝试将套接字上的tcp节点设置为无效。我试图将so_sndlowat设置为“1”,但始终返回-1,因此我认为不支持它。
我不想使用tcp raw重做所有代码。是否有方法在TCP原始模式之外调用TCP_output()函数?有没有什么方法可以加快速度,或者这就是带小数据包的lwip-tcp有多慢?
欢迎提出任何建议。谢谢。
--编辑--
我还想补充一点,一旦我准备好传输,我会确保我在Freertos的Tx任务处于最高优先级。在我调用lwip_send/write之前,没有其他任务在运行。

最佳答案

我对锡林克斯的裸金属LWIP相当有经验,LWIP不会等待发送消息。它将根据以太网硬件,在确认中断的同时,以最快的速度发送数据包。我只使用了UDP。不过,我想到的是,你的问题可能就在接收端。如果您正在执行TCP,可能是因为您遇到接收问题,所以这些小数据包发布得很晚。您需要做的是在代码中找到以太网传输的最低点,并在此基础上设置通用输出切换。然后,在接收到以太网数据包时,打开通用输出开关。看看示波器上的信号。如果它证实了你的假设,那么移动输出开关来缩小问题的范围。清洗、冲洗并重复,直到问题出在哪里。它既粗糙又耗时,但由于纯粹的决心,这种蛮力的方法通常可以解决许多“不可能”的嵌入式软件问题。祝你好运!

关于api - 使用lwip API立即发送小的lwip数据包很困难,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15231800/

10-10 12:41