我正在使用lwip API和FreeRTOS在ST Cortex M3设备上创建服务器。一切正常,但响应时间严重偏差。我目前使用的是lwip 1.3.2和FreeRTOS 7.3。
一个客户端连接到服务器,需要频繁传输一些时间关键的数据。这些数据包大约为6个字节。其他时候,我发送20K以上的数据。
我的问题是,这些较小的数据包似乎要花费很长时间才能被发送。我认为这是因为lwip正在等待更多数据被入队以进行更有效的传输。我不能等待2或3秒钟使数据被发送;客户端期望在几微秒或毫秒内收到数据。
我尝试过使用lwip_send和lwip_write。(我知道其中一个与另一个相同,只是在最后传递了一个标志。不过还是想试一下...)我尝试将TCP_NODELAY设置为套接字,但没有成功。我试图将SO_SNDLOWAT设置为'1',但它总是返回-1,所以我认为它不受支持。
我不想使用TCP RAW重新编写所有代码。有没有办法在TCP RAW模式之外调用tcp_output()函数?有没有任何方法加快速度,还是lwip TCP处理小数据包的速度就是这样慢?
欢迎任何建议。谢谢。
- 编辑 - 我还想补充一点,即一旦我准备好传输,我确保FreeRTOS中的TX任务处于最高优先级。在我调用lwip_send / write之前没有其他任务运行。
一个客户端连接到服务器,需要频繁传输一些时间关键的数据。这些数据包大约为6个字节。其他时候,我发送20K以上的数据。
我的问题是,这些较小的数据包似乎要花费很长时间才能被发送。我认为这是因为lwip正在等待更多数据被入队以进行更有效的传输。我不能等待2或3秒钟使数据被发送;客户端期望在几微秒或毫秒内收到数据。
我尝试过使用lwip_send和lwip_write。(我知道其中一个与另一个相同,只是在最后传递了一个标志。不过还是想试一下...)我尝试将TCP_NODELAY设置为套接字,但没有成功。我试图将SO_SNDLOWAT设置为'1',但它总是返回-1,所以我认为它不受支持。
我不想使用TCP RAW重新编写所有代码。有没有办法在TCP RAW模式之外调用tcp_output()函数?有没有任何方法加快速度,还是lwip TCP处理小数据包的速度就是这样慢?
欢迎任何建议。谢谢。
- 编辑 - 我还想补充一点,即一旦我准备好传输,我确保FreeRTOS中的TX任务处于最高优先级。在我调用lwip_send / write之前没有其他任务运行。