完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们公司正在开发一款产品,采用MODBUS TCP和TCPServer数据交换我开始采用UCOS-ii和LWIP实现,可以说已经能够正常运行了,单独运行TCPServer,每2秒发送一次数据,数据包大小为5k左右,可以连续运行一周没有问题,但是加上MODBUS TCP只10个小时就是报错,20个小时左右就会重启,最长没有挺过25小时.后来各种增加,PBUF_POOL_BUFSIZE增加到1024,TCP_SND_BUF 为(10*TCP_MSS),TCP_SND_QUEUELEN为(100* TCP_SND_BUF/TCP_MSS),TCP_WND 为(10*TCP_MSS)而lWIP的内存管理也采用了MEMPOOL方式,避免内存碎片,同时对网卡的数据收发也加了互斥信号量,不会出现同时收发的情况,等等,这些手段只是延长了LWIP的生命周期而已,如果MODBUS TCP 采用10ms的轮询周期,1个多小时就会报错,能挺2~3小时左右就会死掉.这个测试我进行了两个多月,但是我如果把Modbus TCP的轮询周期改为一秒,那么它就会活得好好的,连续1周(7*24小时)不会出任何问题,连错误都没有.
测试过程中发生的第一个错误就是: Assertion "PCB->snd_queuelen >= pbuf_clen(next->p)" failed at line 1021 in ..LWIPlwip-1.4.1srccoretcp_in.c Assertion "pbuf_free: p->ref > 0" failed at line 664 in ..LWIPlwip-1.4.1srccorepbuf.c 只要这个错误出现,那么LWIP就注定要死亡了,两个多月的测试,没有一次例外. 这期间我曾经只运行MODBUS TCP ,其他任务全部停掉,还是避免不了LWIP死亡的结局.其他TCP任务加入之后只能加快它的死亡.但是如果数据周期超过1秒,那么就很稳定.这期间我还试过FreeRTOS+LWIP的组合,程序模板都是官方的,不会有移植错误的,似乎FreeRTOS+LWIP更稳定一点,但还是避免不了LWIP的死亡结局,在MODBUS TCP以500ms轮询的情况下都无法长期工作,所以我感觉LWIP不能适用于短周期高频数据访问的情况. 最近我又在试RTX+RL_TCPnet的情况,目前已经测试MODBUS TCP 200ms轮询,TCPServer 1s轮询,外加三个ping命令(两个1024字节,1个32字节),现在已经运行36小时,未死亡,因为没移植出错调试信息输出,也就不知道是否存在错误信息输出,但36小时的运行已经超出之前最好的情况了,而且66万次的MODBUS的访问没有一次超时(50ms)和读写错误发生,唯一不足的是ping的速度没有LWIP快,最长的延迟会超过10ms(LWIP没有超过1ms的)但这都不影响我的程序,我要的是稳定.观察还在继续,如果能挺过7*24小时,那么我就可以认为MDK的RL_TCPnet更适合高频数据访问的情况. |
|
相关推荐
13个回答
|
|
我们项目上正在做的也是类似的东西,用407跑FreeRTOS+LWIP,之前遇到过申请多个TCP端口无法正常打开的情况,后来修改了栈空间暂时好一点了,还在继续测试中。。
|
|
|
|
LWIP开源但复杂,移植困难,但例程和资料非常多,TCPnet现在更新到7.1.0改进很多,做了非常多的中间件,不开源,都是封装好的,但是接口非常简单,官方没有TCPServer的例子,但是我参考他们的帮助文档,几个API调用一下就可以实现TCPServer,最关键是TCPnet断网重连做的感觉非常好,我多次断网,长时间断开(超过5分钟)再恢复,仍然能够恢复连接,不需要再干预,而LWIP就不行,我到现在也没有找到好的办法实现断网重连,最终都是直接全部销毁再重新初始化,这很浪费时间.
|
|
|
|
能否提供一下microchip的TCPIP协议栈,源码,我也研究一下
|
|
|
|
去Microchip官网下载,是一个整合在一起的包,叫MPLAB® Harmony
安装好之后,里面就有TCPIP,当然还有其他的一些代码,有兴趣可以看看 我没有有最新版的,最新版支持OS接口,和智能代码生成,所以代码有些膨胀 |
|
|
|
也发现了有这个问题,不过只是自己玩玩,发现问题就丢一边了,没深入研究!
|
|
|
|
我也遇到过各种问题,都怀疑过,但是都解决了。有问题就看源码吧。懂了就没问题了
|
|
|
|
请教一下,怎么在malloc和free 上加禁止中断,不让中断打断malloc和free呢?
|
|
|
|
你好,我移植的也是您的程序,也是会有一定概率出现Assertion "pbuf_free: p->ref > 0" failed at line 654 in ..LWIPlwip-1.4.1srccorepbuf.c,请问是否是程序bug,我用的程序是裸lwip,没有跑系统
|
|
|
|
我遇到过这种报错,但是经过我检查,发现是申明了strutc netbuf *inbuf,结果这个inbuf没有使用造成的
根据我的猜测,可能是你声明了某个协议栈buf,例如这里的inbuf,而这个buf最终调用到pbuf,但是这个pbuf你在某些情况下根本没有使用,然后你就将它删除,于是就出现了上述情况 |
|
|
|
权威指南上有说
|
|
|
|
guanzhu
|
|
|
|
最近2天也在整LWIP tcp, 板子做服务器端用的是raw api.先用官方例子测试Server ECHO 。用网络调试助手1ms 连续发包 到 60W字节左右 发送和接收没丢包。
然后我把自发自收,修改了下。板子收到数据 先拷出来,然后 复制个另一个pbuf,再发送。 经过这样修改 1ms发包 发不到 3W 就丢失包,而且也不在接收新数据了。 后面增加到 50ms 左右 还算可以,再长就没测试了。 不知道你们说稳定的是不是 使用LWIP TCP 都是 1s 次通讯这样的。 我现在的板子,上位机如果40ms 一直发,需要一直处理的,以前用的是UDP发现丢包严重(经过交换机,路由器)。所以就测试下了 TCP,发现数据还是一样丢失的。不知道是不是发送数据处理没写好。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2582 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2396 浏览 5 评论
3249 浏览 3 评论
2855 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2806 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
703浏览 1评论
933浏览 0评论
1063浏览 0评论
696浏览 0评论
526浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 11:29 , Processed in 1.529941 second(s), Total 69, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号