S2E例程?

Other Parts Discussed in Thread: LM3S6432

LM3S6432板子TCP/IP部分做客户端使用,去连接远程服务器,初次连接成功以后,并保持此连接。但时间久了。远程服务器TCP/IP连接掉线。6432重新连接会失败。无法主动连接远程服务器。但是服务器可以ping通6432板子,也可以浏览配置页面。但无法建立TCP连接。重新启动6432以后,就可以建立连接了。(LWIP协议栈)

  • sheng zhang:

    您好!

    您是像要S2E的例程麽?

    www.ti.com/.../sw-rdk-s2e

  • 我曾经测试过TI的S2E开发板,即使是远程服务器连接断开也可以快速重联。楼主如果是有的是楼上谈到的TI的S2E例程,那么建议楼主从硬件着手确认问题原因。

  • 你可以设置一个超时,当超时候,主动断开与服务器的连接,并发送close,然后pcb进入FIN_WAIT_1状态和FIN_WAIT_2状态,一旦链路恢复正常,设备与服务器就能再次正常建立链接。

  • 谢谢azhiking   您能否讲的更详细一些吗? 关于LWIP协议栈的FIN_WAIT_1状态和FIN_WAIT_2如何设置?

  • S2E例程不是很熟,但个人觉得楼主的情况也许和下面文章有些相似,帮楼主转来了,也许对楼主有帮助,可以参考下。

    下文来自于TI社区经验分享文章hasten lin一等奖的文章(www.deyisupport.com/.../5240.aspx)。

    我使用TI芯片也有三年时间了,期间开发过低功耗无线传感器、无线转以太网网关等设备

    现在讲一下用LM3S9B90芯片开发的无线转以太网网关设备中遇到的一些问题吧!

    以太网用的是LWIP协议,这也是我第一次用32位机、第一次用ARM内核芯片、也是第一次与LWIP接触;

    一开始我没有什么信心会做好,还好在TI例程及技术支持的帮助下,半年内将产品设计出来,并且相当稳定的运行。

    这其间遇到最大的问题是TCP运行的问题:(前两个还是小问题,最后一个才是问题致命的所在)

      问题一,IP地址分配的问题;当时利用例程的办法,调用lwIPInit,和lwIPLocalIPAddrGet的办法获取IP地址,如果当时没接网线,或者路由器没有开启DHCP功能怎么办?

     最开始我采用重新调用以上函数的办法,进行处理,发现系统会复位;可见这个办法行不通,

     后来通过对LWIP的认识发现可以通过修改IP地址的方式,调用lwIPNetworkConfigChange函数,将IP地址设置成上次分配的IP,这样一来,只要设备能正常使用过一次,以后都不会有问题了!

     问题二,调用tcp_output函数,为了提高发送速度,在每次调用tcp_write函数前,先调用一次tcp_output函数;加了这个函数后,短时间内使用是不会有问题的,但时间长了以后,发现系统也会复位;经过一系列的查找,终于锁定是tcp_output函数的问题,取消后,系统不再复位了

     问题三,网络异常的处理;在正常的使用过程中,会遇到设备端网线断开、服务器网线断开、服务器软件关闭、服务器电脑死机等等情况,其它几种都比较好判别,唯独服务器网线断开这种情况不能区分;

      服务器网线断开(设备与路由器链接是好的)的时候,设备不会得到异常报告,也不会有PHY寄存器标志,只能通过给服务器发送数据时,判断是否有发送完成回调函数;如果没有回调函数,服务器链路一定有问题。

      一旦出现服务器网线断开的情况,设备的LWIP中的pcb->state一直处理链接成功的状态,而服务器在一定时间后会删除这条链接,也就是说,超过一定的时间后,设备与服务器之间的链接状态是不一样的;同时,设备一直处于虚假链接,不会重新与服务器建立链接;

      最后导致,服务器与设备是永远也不可能建立链接。

      这个问题困扰了我们好长一段时间,而且是在客户的使用中才发现,客户的压力可想而知。

      还好,经过一段时间的排查,终于找到问题的所在、以及解决问题的办法:

      效仿服务器的办法,在经过一段超时后,主动断开与服务器(确切来说是路由器)的链接,给服务器发送close命令;发完后,pcb进入FIN_WAIT_1状态和FIN_WAIT_2状态,如果期间链接上,服务返回ACK确认关闭链接, 否则超时后,设备自动进入CLOSE状态;最终达到两端的链接状态一致;一旦链路恢复正常,设备与服务器就能再次正常建立链接。这个问题总算是解决了。

      设备运行到现在已经快半年了,目前为止,还没有发现什么问题。

  • 能否给一段代码提示如何修改?

  • 问题已经解决 。谢谢 Richard Ma及各位朋友