正在做一个STM32F407的项目,调试freertos+lwip的时候,花了好多时间都解决不了长时间ping的问题。
ping 1472bytes的包,运行大概1~2个小时后板子的反应就变慢,比如刚开始是<1ms, 越到后面就越慢,接近1000ms以上。
最开始的现象是ping 1472长度的包,过不了多久就ping不通,但减少ping的长度到900就又可以。后来把系统时钟从100M调到120M,好像可以解决这个问题。
刚刚接触LWIP,目前版本是1.3.2,是借用网上207的源码,目前看来freertos还是比较稳定的。曾尝试改用LWIP1.4.1, 但网络没调通而放弃。
已经为这个问题焦虑了快1个星期了,尝试改了一些参数,但都无果。那位兄弟做过或碰到类似的问题,指教1、2,莫元100奉送!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个问题,我找了1个多星期,的确有很多人说内存泄漏的问题。也有人说是移植后驱动的问题。
我相信了后者,的确是移植后的驱动问题。只是没想到是ethernetif_input,这个貌似LWIP自带的函数。
在网上,只有一个回答正确这个问题,反复看才有点明白,
http://lists.gnu.org/archive/htm ... 12-11/msg00013.html
I'm not sure about the LCP demo code, but the ST demo code for LWIP had a poor implementation where the incoming messages were not being read out correctly from the ethernet hardware FIFO. It assumed one interrupt per message, but if you delay servicing the ISR for a brief time, you may have 2 (or more) messages and only 1 interrupt.
然后在atmel的网站上找到源码,修改了我自己的源码,然后就OK了。一句话,还是要仔细理解LWIP,跟作者Adam比起来,很多写程序的和种田的没啥区别,我也是。
http://asf.atmel.com/docs/2.11.1 ... /ethernetif_8c.html
一周热门 更多>