这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » uip uip移植心得

共8条 1/1 1 跳转至

uip uip移植心得

院士
2006-09-17 18:14:16     打赏
uip uip移植心得



关键词: 移植     心得    

院士
2006-12-22 22:43:00     打赏
2楼
花了近一年的时间,终于把这个GPRS搞定了.就整个系统来讲,TCP/IP协议栈的难度远大于PPP协议栈.由于是在LPC2100平台上跑的UCOS II,又没有第三方的软件支持,TCP/IP协议栈最开始选定了三个开源的栈:ucip,lwip,uip.其中,lwip可谓是最好的一个,对系统的支持也是最好的,但我的内存................ucip几乎就没有什么说明的文档,除非你不怕死,自己去分析源码.uip大家是知道的,超小型的协议栈.结果可想而知,16K的RAM,还得跑系统,我选择了uip0.9. 1: uip对于有外部缓冲区的系统来讲,象RTL8019,RTL8139这类的网卡芯片的支持下,还算是一个不错的协议栈.(事实上有好多卖51上以太网的开发板,都是在这样的硬件条件下,采用uip的典型用法,做一个什么破WEB服务器, 公司刚买了块ZLG的2200,看了一下ZLG/IP,应该说开发板还是ZLG,英蓓德等几家做的还算不错,其它的............不多讲,有人会拿刀砍我的.)
言归正传.由于是单IC系统,没有外部的缓冲器,用uip就象场噩梦.接触过uip的大侠都知道,uip协议栈的操作是基于一个全局缓冲区(其原理就是认为数据包的重发可以由应用程序来生成,因此协议栈不作任何保护).因此,在进入协议栈进行数据处理一直到数据发送完毕,你必须关中断!!! 2: 顶,希望大家如wlq_9一样,把自己项目中的经验与大家分享 3: 支持分享! 4: 续上:所以,我把uip拿到手里,仔细看完一遍后,就开始了大手术.首先把UIP的单缓冲区结构改成双缓冲区结构,即输入输出缓冲区分开.(在内存能承受的条件下,又能提升系统的性能,何乐不为?)窗口协议当然是没法子做了(想想你的XP吧,TCP/IP用了多少的内存,再看看LWIP,哪个不是张大嘴狂吃内存的),好在应用中的数据流量并不很大,系统还算能吃得消.这样子,接收中断的关闭时间大大的降低了,而且在处理数据重发的时候容易的多. 5: 晕,没人要,不写了. 6: 兄弟太厉害了!老兄我是羡慕死了!你说的东西好复杂啊!
接着说啊! 7: 果然是高手!正如小梁兄所说的:“羡慕死了!” 我是没那么好的耐性,只能羡慕和祝福。

现实中,不可否认技术天才是存在的,祝愿你以后的道路更加顺畅,坚持下去为祖国建设作点事! 8: 唉 惭愧惭愧! 9: 谢谢几位老友的支持,很汗颜的是其实我接触TCP/IP的时间也不是很长,整个算来也就一年的时间,中间还花了几个月的时间搞了另外一个小东西,写此文只是为了抛砖引玉,也希望对即将做类似东东的大虾们一点参考(当然在不涉及公司商业秘密的条件下).不足和错误之处欢迎大虾们指正批评!
续上: 由于系统要求可以自己主动向服务器发送数据,因此,UIP的缺陷又暴露出来.(UIP本来就是设计用于服务器的,但其对数据的发送,我依然觉得做得不够好.不过还算好的是,UIP0.9已经支持ACTIVE_OPEN,不然整个状态机还得改写.因此,如果做客户端的话,向客户端的主动链接,主动的数据传输,是需要自己来增加的).因为是GPRS链路,还得需要定时的心跳来维持链路. 10: 一下子打这么多字真的好累.
主动链接很容易,发送一帧SYN即可,再对应设置一下保存当前链接的结构即可.这样就可以让协议栈进入SYN_SENT状态.主动发送也比较简单,自己填充数据域,由UIP来填充相应的TCP/IP首部即可.心跳包则使用了系统的TICKS定时器,定时到,主动发送一帧空数据包.
有意思的是,一直认为ARM的定时器很金贵(功能很强),使用的时候都比较小心,最后整个写下来,竟然两个定时器中都还有一个没舍得用.UCOS II中的TICKS定时器功能真的强!! 11: 顶,虽然兄弟说的很多我都不懂!呵呵 12: 强烈要求斑竹将该贴置顶!!!!!!!! 13: UIP带UDP协议吗? 我总觉得只传输少量的数据用UDP更容易实现,但在一些网站上都说用TCP更好一些,能讲讲你的看法吗? UDP除了是不可靠的链接(可以在应用层保证可靠性),还会有哪些缺陷,我现在在做一些准备工作,看了些协议的资料,还是倾向于用UDP。
另外,你提到的心跳包,是不是不发就会断线,要重新拨号? 14: 支持,我以后了要搞的.现在开发的分工很明确.改动开源的程序是一个好方法.兄弟继续

工程师
2010-09-07 20:56:05     打赏
3楼
不知道现在有ucip说明的文档了没,有什么好的参考书介绍一下!

菜鸟
2013-11-23 17:18:11     打赏
4楼

版主你好 我用UIP 跑在开发板上作为server PC为客户端借用网络调试助手,循环给 开发板发送数据,可是每次都只能发送一段时间,一段时间之后,就ping不通,和无法接收TCP数据包? 请问这是怎么回事呢?


菜鸟
2013-11-23 17:45:54     打赏
5楼

我的问题 详细描述一遍: 44B0的开发板跑UIP 协议栈作为server,PC作为客户端,通过网络调试助手,循环去ping开发板,和收发TCP数据包,间隔是1s。前20或者40分钟内可以ping的通,同时也能够收发数据,但是一旦超过一定时间之后就无法通信了
开发板:44b0 ARM 裸机环境用定时器作为UIP周期事件的基准每隔10s进行一次ARP老化检查,100ms进行一次TCP超时处理


菜鸟
2013-11-23 17:45:55     打赏
6楼

我的问题 详细描述一遍: 44B0的开发板跑UIP 协议栈作为server,PC作为客户端,通过网络调试助手,循环去ping开发板,和收发TCP数据包,间隔是1s。前20或者40分钟内可以ping的通,同时也能够收发数据,但是一旦超过一定时间之后就无法通信了
开发板:44b0 ARM 裸机环境用定时器作为UIP周期事件的基准每隔10s进行一次ARP老化检查,100ms进行一次TCP超时处理


菜鸟
2014-02-11 22:52:13     打赏
7楼
请问下楼主,跑系统了么,那个uip_polling()隔多长时间调用呢

高工
2014-10-13 14:39:34     打赏
8楼

过来学习的


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]