可以用网口做IAP更新ucos文件系统或rtt系统吗

查看: 16135|回复: 86
看来LWIP还是不能用来做产品,贴个帖子
以下内容转自周立功网站:
标题:EasyARM8962 LWip+ucos 遇到TCP连接的问题,请指导!!急
1楼 icepnt 发表于: 12:51:00
在成都zlg买了easyARM8962的开发套件,我使用ucos+lwIP来实现tcp的数据收发,遇到的问题一大堆,不过之前的问题都解决的差不多了,现在遇到几个大问题,如下:
& && &1.PC作服务端,8962做客户端,假如,服务端先不开启,而这时候客户端运行(这种情况非常普遍,作为监控端的设备会一直上电,而pc端会经常关机)经过一段时间以后,再开启服务器,这时候客户端的tcp任务早于进入一个死循环(也就是faultISR),跟踪的结果是,在调用netconn_connect()这个函数的时候,如果不成功,既不会一直阻塞进程,也不会返回任何的错误,而是直接进入一个死循环,现在的问题是,如何才能让我能控制客户端能一直处于连接请求状态,不要进入死循环,返回错误也行啊,&&
& && &2. 同样问题,假如在建立好连接后,正常的收发数据,这时候断开服务器的连接,这时候的客户端能检测到错误,但是在重新连接的时候有时候根本连接不上,而一旦连接失败,结果都是和上面一样进入一个死循环,
& && &3.连接正常的情况下,如果拔掉网线,8962不能检测到断线,如何解决?
& && &以上问题集中在断线重新连接,如果不成功会进入死循环(faultISR) 请指导如何解决这个问题,我希望能实现调用netconn_connect()的时候要么就一直阻塞直到成功建立连接,要么就一段时间后返回错误代码,我能进行处理,最好是返回错误!
麻烦广州的zlg的技术支持能尽快帮我解决这个问题,我们这个项目就卡在这里了,成都的技术支持对LWip也不太熟悉,服务还是很好的,没办法,我只有论坛求助了,
2楼 zlg_lzy 发表于: 15:39:00
icepnt,您好!
& & 你这个问题我们仔细分析了一下,应该是LwIP协议栈自身的缺陷,所以暂时还不能给你一个很明确的解决方法,我们的工程师正在处理这个问题,看看能不能改动一下LwIP弥补这个缺陷,一旦有结果我们将第一时间回复你。
[此贴子已经被作者于 20:01:07编辑过]3楼 icepnt 发表于: 10:47:00
能留下个联系方式么?我一直卡在这里,项目很急的,本来元旦就该验收了,希望你们能尽快帮助我解决上述问题,你们广州zlg的技术支持一定能轻易解决这个问题的
4楼 zlg_lzy 发表于: 15:01:00
icepnt,你好!
& & 你可以联系020-,找任工,他会给你解决的。
5楼 icepnt 发表于: 12:30:00
希望尽快给我解答这个问题吧,客户都在催着去安装了,现在卡在这里,其他的调试都还没进行下去!!
另外再次说明下情况,上述第二种情况,服务器端开后,8962能检测到断线,之后再次重新连接,往往连接不上,这时候调用netconn_connect()后有三种情况出现:
1.进入faultISR 死循环,不知何故
2.进入OS_TaskIdle 死循环,还是没有从netconn_connect()返回
3.服务端能监测到8962发起的连接并显示连接成功,不过端口并不是8962重新连接的时候指定的那个端口,而是随机的端口,经常是跳到4097端口,重点是,这时候的客户端其实并没有连接成功,也就是还是没从netconn_connect()返回!!
6楼 zlg_lzy 发表于: 13:44:00
icepnt,您好!
& & 这个问题现在正在测试中,一旦通过会及时联系您的。
7楼 lm3 发表于: 10:32:00
问题已经修正,请联系销售!
8楼 zhangfeng 发表于: 22:42:00
我现在正遇见这个问题,请周立功或者楼上的大侠能否给我发份代码参考一下,谢谢,我邮箱 QQ:
有没有一个简单稳定的TCPIP协议栈?
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
从周立功网站的帖子看,ZLG应该是通过修改LWIP内核来解决提问者的问题的。
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
LS是不是做机顶盒?有修改过LWIP的内核么?
哪位高手解说一下顶楼提到的问题?
看来是一个网上提到最多的“lwip tcp client重连问题”
转自网络:
nios+ucos+lwip不稳定?&&标签: ucos&&lwip&&分类: 技术笔记
22:36 前两天利用fpga的开发板,跑通了simple_socket_sever。开发板上是ep2c8的核,网络芯片用的是8019。最初有个问题,网络link指示灯一闪一闪的,ping的时候也是时通时不通,经过多次调试发现原来是网络线太长了,我用大概有10多米,最后换到3米左右的网络,问题解决。这个问题可能还和开发板的网络芯片供电有关,8019的网卡对网线的支持应该几十米都没有问题。
我用自己写客户端登陆simple_socket_sever,与telnet登陆一样,都能正常的工作,但是仍然有一些疑问。
如果输入的命令太长,sever端会的网络服务会死掉,但是开发板程序并没有死,ucos的任务也没有死。网络服务死了,ping不通,并且client也无法再次登陆。
后来我把利用simple_socket_sever写了个简单client,可以正常的登陆我自己写的sever,但发现有同样的问题,在待机一段时间中,lwip的任务会死掉,connect会断开,但是过一段时间,又能从新连接上sever,我做的是不停的自动连接sever,如果连接上了就保持住连接,按一次键,向服务器发送一个数据,服务器返回一串数据。
nios的ide中不推荐用lwip,不知是不是因为这个问题。明天在试试跟踪进去看看,同时多了解一下lwip的处理流程,希望尽量采用ucos+lwip来做网络传输,否则采用ucliunx就麻烦了。
我的Lwip看起来挺稳定的,无论是断线还是什么的,都能检测到。传输也没什么问题,但就是不能长时间运行,大概运行一两天左右就会驱动层就再也分配不到内存了,不知何故。不知道是哪个地方在吃内存,也是把我害惨了。不过测试了一下RTT的LWIP似乎没这个问题,挺坚强的.目前已经测试了将近一星期,再过一星期如果没问题的话以后所有的东西就都改用RTT了
回复【11楼】PZLPDY
-----------------------------------------------------------------------
楼上用的什么OS?
lwip本身的稳定性还是不错的。只是tcp协议栈这东西对内存的要求可不一般,通常,我们的单片机都是要做server的,而且,经常是基于tcp的,他对内存的消耗不是一般的大,一个可靠稳定的内存管理对lwip的稳定是有很大的影响的,RTT内置有2种内存管理模式,这个是ucos所没有的,因此,如果要应用lwip,我相信基于rtt的,会比基于ucos的可靠性及稳定性要强很多。
不跑系统会不会稳定点,我目前在用microchip官方的TCPIP,没有系统,还没做完,好像还可以。
回复【5楼】eworker
从周立功网站的帖子看,zlg应该是通过修改lwip内核来解决提问者的问题的。
-----------------------------------------------------------------------
哪位高手说一下ZLG改了些什么?
回复【4楼】eworker&&
回复【2楼】wyoujtg
我们这边的应用包括
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
-----------------------------------------------------------------------
我们做的修改都会提交的
用自己的RTOS
那就是1.4.0rc了,都做了那些方面的修改?内存管理么?不知道ZLG提交了没。
回复【20楼】eworker
那就是1.4.0rc了,都做了那些方面的修改?内存管理么?不知道zlg提交了没。
-----------------------------------------------------------------------
看到有人说做server没问题,做client问题很多
回复【19楼】wyoujtg
回复【4楼】eworker& &
回复【2楼】wyoujtg&&
我们这边的应用包括&&
telnet sntp ping ftpd tftp goahead vpn ssl rpc nfs....&&
事实证明lwip还是挺可靠的
-----------------------------------------------------------------------
你用的什么版本?自己做过修改么?用的什么操作系统?能说一下么!
-----------------------------------------------------------------------
我们做的修改都会提交的
用自己的rtos
-----------------------------------------------------------------------
LS,你的提交如何查得到?能不能发到论坛上?
觉得lz位贴的文章中client的问题主要还是用户自己写的代码有问题,在RT-Thread上写的client连接未开启的server都试了N多次了,不存在这种现象。
&&&&3.连接正常的情况下,如果拔掉网线,8962不能检测到断线,如何解决?&&
关键还是驱动是如何写的!
eworker 发表于
回复【19楼】wyoujtg
回复【4楼】eworker& &
回复【2楼】wyoujtg&&
我调试的时候发现,有时候会断开,连UCOS任务也跑不进去了,也就无法再连接上去了,有时候几个小时,有时候一天,有人有稳定的版本吗?我做客户端的
我现在也遇到这个断线重连的问题,等着解决啊!
我现在解决断线重边的问题是通过复位来解决的,因为在STM32F207+DP83848的情况下,DP83848检测到网络断开或重新连接会产生一个中断(进入服务函数EXTI15_10_IRQHandler()),然后在该函数中如果是网络断开,则标志网线连接状态的变量EthLinkStatus为非零值,如果是网线重连,则该变量值为0,而当该值为0时,也会调用网络相关的状态改变处理函数Eth_Link_ITHandler(DP83848_PHY_ADDRESS),最终我是在该函数中对系统进行复位来达到重连的目的的,但现在一方面系统复位重连的速度(与服务器端建立稳定有效通信的速度较慢)较慢,很多时候要等心跳包超时断开后第二次才能连接上网络,另一方面,采用复位的方式,还要考虑很多数据保存相关的事项,所以还是想不通过复位来解决该问题,不知道哪位大侠曾经解决过该问题的,麻烦指点一下,十分感谢!
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连一次就成功了。不晓得还有没有其他方法!
Veiko 发表于
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连 ...
你的心跳包是什么?自定义的么?
aworker 发表于
你的心跳包是什么?自定义的么?
暂时是自已随便定义了一个!
关注中,最近也在用这个做服务器。但连续多连几次容易死机啊
哪位高手解说一下顶楼提到的问题?
测试结果和楼顶的一模一样 我以为是我程序问题&&原来是个BUG
好像把心跳包发送的间隔时间延长点,然后在关闭连接和重连之间加一定延时之后有点改善!现在基本上断开重连 ...
分情况 一直保持连接&&然后断开服务器的时候可以&&别的情况不行,貌似只能做服务器比较稳定,我试试比较高的版本
屠龙LPC1788开发板 LWIP几十万次连接测试没有问题,做client也没问题。个人认为问题的出现在乎自己对系统的了解。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可
现在RTT自带的已经很稳定了
屠龙LPC1788开发板 LWIP几十万次连接测试没有问题,做client也没问题。个人认为问题的出现在乎自己对系统的 ...
LWIP几十万次连接测试没有问题,做client也没问题 。。。请问下1788的板lwip客户端 也是基于RTT系统做的吗?
能否提供&&提供 LWIP 源码
LWIP几十万次连接测试没有问题,做client也没问题 。。。请问下1788的板lwip客户端 也是基于RTT系统做的 ...
不是基于RTT的,裸机的
不是基于RTT的,裸机的
我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上的服务器后,如果电脑上的服务器每隔一段时间关闭并打开,重复几次后,tcp客户端就和电脑上的服务器连接不上了 看了论坛里有些也反映这个问题 说是lwip的bug 不知道怎么解决了,楼主有这样的问题吗?
我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上 ...
我们的没有这个问题,连接和收发都挺稳定的。 能把有问题的帖子贴上来看下吗
我有个1768的板,TCP客户端程序是可以收发数据的,就是有一个问题没有解决:当tcp客户端正常连接到电脑上 ...
电脑上的服务器每隔一段时间关闭并打开,重复几次后,就挂了。这么容易挂应该是应用方法哪里有问题,传你测试用的工程文件上来,让大家分析下。
请问STM32F207+DP83848,这个方案主要干什么用?
求稳定版的程序,平台stm32f107+dp83848+UC,类似也可
stm32f107+dp83848的lwip源码,官网上有
电脑上的服务器每隔一段时间关闭并打开,重复几次后,就挂了。这么容易挂应该是应用方法哪里有问题,传你 ...
在记一次lwip中 遇到 pcb == pcb-&next 的pcb死循环debug过程这个贴中看到阁下的回帖 让我明白过来了
tcp_abort和tcp_close的区别 我把服务器断开 然后客户端一直重连,根本就不会收到对方的RST信号,
然后一直重新创建pcb 然后close 内存就出问题了,前天改成连上后断开就用close、没连上重连就abort
测试了40个小时 没有死机了 一直都可以随时连上服务器 算是稳定了吧 不过如果阁下有空也可以帮忙看看
我的工程文件吧 反正你对这个很熟悉 或许还可以帮忙看看有没其他的问题 这个只是个客户端基本的框架
后续的应用程序还没开始加载进去 多谢!
本帖最后由 gerbansh520 于
09:10 编辑
为什么总是传不了附件呢。。。我都够权限
百度云盘下载 链接:
密码: d354
直接用linux吧 ,linux的网络功能很强大。
直接用linux吧 ,linux的网络功能很强大。
产品只是做数据中继,服务器那边用的是linux的 总工选型都定了 不是我能改的
在记一次lwip中 遇到 pcb == pcb-&next 的pcb死循环debug过程这个贴中看到阁下的回帖 让我明白过来了
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。
我觉得用LWIP作客户端的人也不算少了 但是找不到什么有价值的贴参考,除了你的一两个外,
做客户端的肯定要一直重连的,但是没看到有贴做过这个 裸机的都是连一次点个LED之类的就断开
只用到tcp客户端 1.4.1也对这个进行修正了吗?
我觉得用LWIP作客户端的人也不算少了 但是找不到什么有价值的贴参考,除了你的一两个外,
做客户端的肯定 ...
lwip1.4.1修正的bug比较多,可以看lwip的changelog。如果真的是tcp_close、tcp_abort使用问题,倒和是不是lwip1.4.1没有关系。
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。
谢谢你的建议,还有个问题想请教一下,lwip下面有个socket。c 论坛里RTT系统下面就是用socket接口写的,
RAW API跟socket有什么区别吗?看代码机制是一样的 都是bind connet recv等,可以帮忙对比下吗?
谢谢你的建议,还有个问题想请教一下,lwip下面有个socket。c 论坛里RTT系统下面就是用socket接口写的,
我知道的是:socket方式要os配合,写程序方便些,ram占用多些。raw相反。
我知道的是:socket方式要os配合,写程序方便些,ram占用多些。raw相反。
原来这样啊 多谢
stm32f107+dp83848的lwip源码,官网上有/web/en/catalog/tools/PF257862#
很高兴我的回复看起来起了点作用,建议你升级到lwip1.4.1。
大侠,坛子里有说1.4.1的不稳定啊 而且我移植了 有个sys_now错误怎么解决?请问下你移植了测试过吗?到底哪个版本稳定啊
大侠,坛子里有说1.4.1的不稳定啊 而且我移植了 有个sys_now错误怎么解决?请问下你移植了测试过吗?到底 ...
未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。
sys_now是获取系统时间的。
u32 sys_now(void)
& & return nowT
nowTime是一个全局变量,在定时器中每ms递增1。
未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。
sys_no ...
sys_now函数是怎么被调用的呢?1.3里面设置了个250ms轮询LwIP_Periodic_Handle,lwip1.4里的250ms是哪个函数实现的呢?找不到。。
未发现不稳定,目前公司的产品上跑的就是lwip1.4.1。是不是移植到lwip1.4.1,还是要你自己决定。
sys_no ...
这位仁兄能帮我看看还要添加什么吗?sys now函数加到lpc_17xx-it.c里了 lwip是1.4的编译通过了
百度网盘 链接:
密码: a8f7
这位仁兄能帮我看看还要添加什么吗?sys now函数加到lpc_17xx-it.c里了 lwip是1.4的编译通过了
百度网盘&&...
使用方式可以和lwip1.3.2一样。在主循环中或像你程序中的System_Periodic_Handle处理lwip即可。
& && && && &// 读取网口数据,并处理
& && && && &if (ETH_CheckFrameReceived())
& && && && &{
& && && && && & LwIP_Pkt_Handle();
& && && && &}
& && && && &
& & & && &&&// 执行LWIP的一些周期性任务
& && && && &LwIP_Periodic_Handle(LocalTime);
使用方式可以和lwip1.3.2一样。在主循环中或像你程序中的System_Periodic_Handle处理lwip即可。
& && &&&...
看到1.4就是增加了timer.c def.c,在timer。c里有个 sys_check_timeouts,我加到主循环中了 但是还是不工作,
按你说的 和lwip1.3.2一样使用System_Periodic_Handle就可以工作了 正在测试。1.4里修改了tcp write函数这些的,周末测试一下。
仁兄你也是没有调用 sys_check_timeouts函数吗?
看到1.4就是增加了timer.c def.c,在timer。c里有个 sys_check_timeouts,我加到主循环中了 但是还是不工 ...
没有使用,和lwip1.3.2的使用方式相同。
没有使用,和lwip1.3.2的使用方式相同。
多谢 周末测试下
mark,留着以后用
本帖最后由 gerbansh520 于
15:29 编辑
没有使用,和lwip1.3.2的使用方式相同。
再次请教一下大侠,如果用Lwip做3个客户端 是否要用到操作系统啊?裸机能不能完成呢?
客户端A B C分别连到3个不同的服务器(同一个局域网内),正常情况适用客户端A,如果A所
连接的服务器停了,就适用B客户端,依次再使用C客户端。
再次请教一下大侠,如果用Lwip做3个客户端 是否要用到操作系统啊?裸机能不能完成呢?
客户端A B C分别连 ...
不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。
不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。
多谢兄台哈 其实我也不知怎么称呼比较好
不是什么大侠,lwip也是才入门水平。客户端数量和用不用os没关系。
有个疑问,建立3个客户端pcb ,系统执行250ms循环处理的函数
void LwIP_Periodic_Handle(__IO uint32_t localtime)
&&/* TCP periodic process every 250 ms */
&&if (localtime - TCPTimer &= TCP_TMR_INTERVAL)
& & TCPTimer =&&
& & tcp_tmr();
&&/* ARP periodic process every 5s */
&&if (localtime - ARPTimer &= ARP_TMR_INTERVAL)
& & ARPTimer =&&
& & etharp_tmr();
} 有3个有效的 tcp_active_pcbs 的话,执行循环的时候会冲突吧??
有个疑问,建立3个客户端pcb ,系统执行250ms循环处理的函数
void LwIP_Periodic_Handle(__IO uint32_t l ...
显然不会。具体机理也不甚了了。
深有同感!!
lwip1.4.1修正的bug比较多,可以看lwip的changelog。如果真的是tcp_close、tcp_abort使用问题,倒和是不 ...
哥们好,我把lwip官网上的git版本下载了,master版本的
在测试收发数据250ms 发送50个字节数据然后回显,发现一两天不定时会死机,但是用1.4.1(2012年)
这个版本相反的还稳定点。你用的是哪个版本的
哥们好,我把lwip官网上的git版本下载了,master版本的http://git.savannah.gnu.org/cgit/lwip.git/log/
STABLE-1_4_1.tar.gz&&
STABLE-1_4_1.tar.gz
多谢。。。。。。。
STABLE-1_4_1.tar.gz
哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4.1里面的lwipopts.h跟1.3的差别很大啊 我把1.4的移植了但是lwipopts。h文件配置用的是
1.3的,请问你的那个产品中lwipopts。h也是用STABLE-1_4_1\test\unit\lwipots.h这个吗?
我要做的东西 客户端大概每次发送50个字节数据,间隔在200ms-1000ms之间,数据量不算大。
#define PBUF_POOL_SIZE& && && & 10//16
#define PBUF_POOL_BUFSIZE& && &
把这两个改小了 有时候会死机。究竟设多大 心里没谱。。
1.4.1里面的是这样的
/* Minimal changes to opt.h required for tcp unit tests: */
#define MEM_SIZE& && && && && && && && &16000
#define TCP_SND_QUEUELEN& && && && && & 40
#define MEMP_NUM_TCP_SEG& && && && && & TCP_SND_QUEUELEN
#define TCP_SND_BUF& && && && && && && &(12 * TCP_MSS)
#define TCP_WND& && && && && && && && & (10 * TCP_MSS)
哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4 ...
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
* SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
* critical regions during buffer allocation, deallocation and memory
* allocation and deallocation.
#define SYS_LIGHTWEIGHT_PROT& & 0
* NO_SYS==1: Provides VERY minimal functionality. Otherwise,
* use lwIP facilities.
#define NO_SYS& && && && && && &1
/* ---------- Memory options ---------- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
& &lwIP is compiled. 4 byte alignment -& define MEM_ALIGNMENT to 4, 2
& &byte alignment -& define MEM_ALIGNMENT to 2. */
#define MEM_ALIGNMENT& && && &&&4
/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */
#define MEM_SIZE& && && && && & (10*1024)
/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
& &sends a lot of data out of ROM (or other static memory), this
& &should be set high. */
#define MEMP_NUM_PBUF& && && &&&64
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
& &per active UDP &connection&. */
#define MEMP_NUM_UDP_PCB& && &&&5
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
& &connections. */
#define MEMP_NUM_TCP_PCB& && &&&5
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
& &connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 8
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
& &segments. */
#define MEMP_NUM_TCP_SEG& && &&&48
/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
& &timeouts. */
#define MEMP_NUM_SYS_TIMEOUT& & 8
/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE& && && & 40
/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE& && & 256
/* ---------- TCP options ---------- */
#define LWIP_TCP& && && && && & 1
#define TCP_TTL& && && && && &&&255
/* Controls if TCP should queue segments that arrive out of
& &order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ& && && &0
/* TCP Maximum segment size. */
#define TCP_MSS& && && && && &&&(1500 - 40)& & & && &/* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */
/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF& && && && & (8*TCP_MSS)
/*&&TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
&&as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
#define TCP_SND_QUEUELEN& && &&&(10* TCP_SND_BUF/TCP_MSS)
/* TCP receive window. */
#define TCP_WND& && && && && &&&8192&&//(2*TCP_MSS)
PBUF_POOL_SIZE&&TCP_SND_BUF& &TCP_SND_QUEUELEN TCP_WND 这些都修改了,有没有什么参考文档说明
具体到不同的应用 这些参数怎么配置呢?#define MEMP_NUM_TCP_SEG& & 48,队列里这么多pcb,请问下,
你那个产品的具体应用是怎样的呢?再次感谢这位哥们的指导~~~
#ifndef __LWIPOPTS_H__
#define __LWIPOPTS_H__
init.cl里面会报错的,
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG & TCP_SND_QUEUELEN)
&&#error &lwip_sanity_check: WARNING: MEMP_NUM_TCP_SEG should be at least as big as TCP_SND_QUEUELEN. If you know what you are doing, define LWIP_DISABLE_TCP_SANITY_CHECKS to 1 to disable this error.&
修改 #define TCP_SND_QUEUELEN& && &&&(6 * TCP_SND_BUF)/TCP_MSS 又会报其他错误
init.cl里面会报错的,
#if !MEMP_MEM_MALLOC && (MEMP_NUM_TCP_SEG & TCP_SND_QUEUELEN)
&&#error &lwip ...
你再试一下,我也搞不太懂。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
你再试一下,我也搞不太懂。
一样会报错的哦
你再试一下,我也搞不太懂。
兄台,想再请教你个问题,不知能否解答。
我用的非阻塞方式,接收数据都没有问题,但是发送数据出现两帧数据变成一个包发给PC的现象。
板子串口固定200ms接收数据,然后通过TCP往PC服务器传数据,调用下面的函数发送
void write_rootmsg_to_tcp(uint8_t* buff, uint16_t buff_len)
& && &&&if(tcp_sndbuf(client1_pcb) &= buff_len)& && &&&
& && && && && & tcp_write(client1_pcb,buff, buff_len,TCP_WRITE_FLAG_COPY);
& && &&&//tcp_output(client1_pcb);
网上搜索过类似的问题,tcp_write函数被调用后并不会马上发送出去,而是将数据拷贝到协议栈队列里,
由LWIP协议栈调用快速定时器500ms或慢速定时器250ms才发出去,需要加上tcp_output才立即发送,
但是我测试发现即使加上tcp_output函数后,也会出现下面截图里的现象,明明是两个帧数据,被打包
成一个包发给服务器的。而且使用tcp_output函数后,大概一天时间会出现死机,不调用这个函数就不会死机。
简单说就是抓包时发现两帧数据被打包成一个包。
比如第一帧调用函数write_rootmsg_to_tcp发送 1 2 3 4 5,
第二帧也调用函数write_rootmsg_to_tcp发送6 7 8 9 A,抓包发现一个包里的数据是
1 2 3 4 5 6 7 8 9 A,变成一个帧了,因为数据帧加了哈希算法校验的,而且不同类型的数据帧,
长度都不固定,同一个包扔给服务器,服务器不好解析处理,应该怎样处理才能做到每发送一次数据,
都只有一个包呢?
兄台,想再请教你个问题,不知能否解答。
我用的非阻塞方式,接收数据都没有问题,但是发送数据出现两帧 ...
不懂,帮不到你。
哥们,请教下lwip中发送数据量的大小与lwipopts。h中设置的一些参数之间的关系 这个你了解吗?
我看到1.4 ...
请问lwipopt.h的配置问题你搞清楚了吗?
现在在用lwip的1.4.1暂时还蛮稳定的
现在在用lwip的1.4.1暂时还蛮稳定的
我的TCP做客户端,每隔100ms往服务器发送几百字节的数据,不稳定啊,wireshark抓包一两个小时就会出现一次Tcp retransmission重传,这个是客户端发出来的,
然后服务器给客户端发送Tcp dup ack(tcp重复应答),但是重传的这个数据包 在2秒之前服务器已经给回了ACK,不知道为什么重传。。
我今天才移值成功,在nios+ucosii+lwip1.4.1 ,元旦回来再测试下
阿莫电子论坛, 原"中国电子开发网"}

我要回帖

更多关于 ucos操作系统 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信