共8条
1/1 1 跳转至页
问
花了近一年的时间,终于把这个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: 支持,我以后了要搞的.现在开发的分工很明确.改动开源的程序是一个好方法.兄弟继续
言归正传.由于是单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: 支持,我以后了要搞的.现在开发的分工很明确.改动开源的程序是一个好方法.兄弟继续
共8条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【笔记】生成报错synthdesignERROR被打赏50分 | |
【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕被打赏50分 | |
【STM32H7S78-DK评测】Coremark基准测试被打赏50分 | |
【STM32H7S78-DK评测】浮点数计算性能测试被打赏50分 | |
【STM32H7S78-DK评测】Execute in place(XIP)模式学习笔记被打赏50分 | |
每周了解几个硬件知识+buckboost电路(五)被打赏10分 | |
【换取逻辑分析仪】RA8 PMU 模块功能寄存器功能说明被打赏20分 | |
野火启明6M5适配SPI被打赏20分 | |
NUCLEO-U083RC学习历程2-串口输出测试被打赏20分 | |
【笔记】STM32CUBEIDE的Noruletomaketarget编译问题被打赏50分 |