1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据拷贝也会浪费大量的时间。
3、就像别人说的,将缓存开大一点,你如果使用了ST的官方以太网库的话,有下面几个地方需要改打一点。
[mw_shl_code=c,true]//STM32内部MAC发送和接收BUF个数
#define ETH_RXBUFNB 10
#define ETH_TXBUFNB 10[/mw_shl_code]
[mw_shl_code=c,true]#define MEM_SIZE 20000 //内存堆heap大小
#define MEMP_NUM_PBUF 30 //MEMP_NUM_PBUF:memp结构的pbuf数量,如果应用从ROM或者静态存储区发送大量数据时 //这个值应该设置大一点
#define MEMP_NUM_TCP_SEG 300 //MEMP_NUM_TCP_SEG:最多同时在队列中的TCP段数量
#define PBUF_POOL_SIZE 30 //PBUF_POOL_SIZE:pbuf内存池个数
#define PBUF_POOL_BUFSIZE 512 //PBUF_POOL_BUFSIZE:每个pbuf内存池大小
#define TCP_MSS (1500 - 40) //最大TCP分段,TCP_MSS = (MTU - IP报头大小 - TCP报头大小
#define TCP_SND_BUF (25*TCP_MSS) //TCP发送缓冲区大小(bytes).
#define TCP_SND_QUEUELEN (10* TCP_SND_BUF/TCP_MSS) //TCP_SND_QUEUELEN: TCP发送缓冲区大小(pbuf).这个值最 //小为(2 * TCP_SND_BUF/TCP_MSS)
#define TCP_WND (8*TCP_MSS) //TCP发送窗口[/mw_shl_code]
注意:TCP_WND是发送窗口,这个值对于LWIP的速度影响非常大。
以下是我们在STM32F407探索者开发板上的LWIP网速测试,可以给你参考一下。
平台:STM32F407+LAN8720 RMII接口
协议栈:LWIP
系统:UCOSII
测试方法:netio测试TCP速度,开发板做netio服务器。电脑端为netio客户端
下图为未经过优化的测试结果。
可以从上图中看出,发送和接收的速度基本维持在1M左右,但是按照我上面说的方法进行设置以后测试的结果如下图
从上图可以看出这时的速度发送和接收基本快到了2M,说明效果还是很明显的,但是据我了解RTT优化到了开发板接收2.5M,发送7.5M的恐怖速度!!!
下面附上我的针对STM32F407探索者开发板的LWIP网速测试工程和netio组件,还有RTT关于netio组件的使用说明 |