共2条
1/1 1 跳转至页
ZLG,TCP,IP,Bug ZLG_TCP/IP Bug很多,哎,都进来看看!!!
问
我就是上次说做PhoenixOS操作系统的
前几天无聊买了2200的开发板,第一个看的程序就是ZLG_TCP/IP,然后将他移植到了PhoenixOS操作系统上了,所有任务在一个优先级上,按SCHED_RR调度,效率比uCOS是高的多,
后来我改了代码,初始化了外部中断2(高电平方式,不能采用上升沿),和8019的中断控制部分,(在第零页和第一页的相关寄存器上,)采用中断方式,效率提高到:PING命令的反应时间在1ms以内。在我的操作系统上使用OSKill(),和OSSignal()方式接收中断,(POSIX接口),效率至少比ZLG给的示范高出100倍,
再说说BUG,哎!无奈,遍地都是,大部分导致效率低下,举个例子:大家看看 ARP.C 中 Arp_Request()哎!简直是!这种错误也犯!类似的还有很多
hanhui03@163.com 可以联系到我 答 1: 难怪zlg的人说,开发板肯定不好用,难怪zlg的销售人说,开发板tcp肯定不好用,要商用的最好买他们的tcp、ip的商业模块那才行。 答 2: 其实我认为他们提供lwIP移植比他们提供zlg/ip好多了 答 3: 写一个tcp是很麻烦的最麻烦的就是tcp的流控制了,实现是很麻烦的,比如说接收到的一个tcp报的seq正好和上次接收到的一样,也许很多人就会丢弃这个包,但也有可能这个包是新旧数据的组合,应该判断是不是上次接收的一个副本,如果你丢弃这个包,之后发送ack就可能一直再请求这个包,这样就通信不了,因为你并不知道对方的tcp协议栈是怎么工作的,所以要考虑很多
一个优秀的tcp的编写是很麻烦的,难道绝对不亚于写一个os,楼主就不要奢求很多了,你想想你的2200板子才买了多少钱啊 答 4: 另外LPC的ARM7我感觉不大适合用中断实现tcp/IP因为中断电平也要时间的,你PING在1MS内,这并不说明什么,这个是第一个接收到报的反映时间,但不能反映处理时间,如果用中断,假如8019 100%运作,那么1s内就会发送1000个左右的 1K大小的包,相当于1MS发送或接收一个包,每个包都会产生中断电平,这个电平判断也要时间的, 答 5: 用uip ping的反应时间<0.4ms,linux下测试 答 6: 完全可以!!! 首先谢谢大家顶贴!!!!!
嗨 eleven11
如果原封不动ZLG/IP 上升沿根本不可能,可是如果你将 ZLG/IP 通过关中断来互斥8019的算法,改为用互斥信号量,就极大的缩短了关中断的时间,我的PhoenixOS本身用的就是新型三坐标调度算法,(关中断时间短)这样就保证了,如果缓冲区足够多,就可以实时地接收所有8019中断,和包数据,这个我是试过的,用我改进后的TCP/IP协议栈,大概每10ms左右向8019发一个包,可能是icmp udp 或是 tcp ,结果一切工作正常,(没有丢包现象,我把以太网接收,和IP_PROCESS())写成了两个线程,这样以太网数据报基本上是随到随收!!!
前几天无聊买了2200的开发板,第一个看的程序就是ZLG_TCP/IP,然后将他移植到了PhoenixOS操作系统上了,所有任务在一个优先级上,按SCHED_RR调度,效率比uCOS是高的多,
后来我改了代码,初始化了外部中断2(高电平方式,不能采用上升沿),和8019的中断控制部分,(在第零页和第一页的相关寄存器上,)采用中断方式,效率提高到:PING命令的反应时间在1ms以内。在我的操作系统上使用OSKill(),和OSSignal()方式接收中断,(POSIX接口),效率至少比ZLG给的示范高出100倍,
再说说BUG,哎!无奈,遍地都是,大部分导致效率低下,举个例子:大家看看 ARP.C 中 Arp_Request()哎!简直是!这种错误也犯!类似的还有很多
hanhui03@163.com 可以联系到我 答 1: 难怪zlg的人说,开发板肯定不好用,难怪zlg的销售人说,开发板tcp肯定不好用,要商用的最好买他们的tcp、ip的商业模块那才行。 答 2: 其实我认为他们提供lwIP移植比他们提供zlg/ip好多了 答 3: 写一个tcp是很麻烦的最麻烦的就是tcp的流控制了,实现是很麻烦的,比如说接收到的一个tcp报的seq正好和上次接收到的一样,也许很多人就会丢弃这个包,但也有可能这个包是新旧数据的组合,应该判断是不是上次接收的一个副本,如果你丢弃这个包,之后发送ack就可能一直再请求这个包,这样就通信不了,因为你并不知道对方的tcp协议栈是怎么工作的,所以要考虑很多
一个优秀的tcp的编写是很麻烦的,难道绝对不亚于写一个os,楼主就不要奢求很多了,你想想你的2200板子才买了多少钱啊 答 4: 另外LPC的ARM7我感觉不大适合用中断实现tcp/IP因为中断电平也要时间的,你PING在1MS内,这并不说明什么,这个是第一个接收到报的反映时间,但不能反映处理时间,如果用中断,假如8019 100%运作,那么1s内就会发送1000个左右的 1K大小的包,相当于1MS发送或接收一个包,每个包都会产生中断电平,这个电平判断也要时间的, 答 5: 用uip ping的反应时间<0.4ms,linux下测试 答 6: 完全可以!!! 首先谢谢大家顶贴!!!!!
嗨 eleven11
如果原封不动ZLG/IP 上升沿根本不可能,可是如果你将 ZLG/IP 通过关中断来互斥8019的算法,改为用互斥信号量,就极大的缩短了关中断的时间,我的PhoenixOS本身用的就是新型三坐标调度算法,(关中断时间短)这样就保证了,如果缓冲区足够多,就可以实时地接收所有8019中断,和包数据,这个我是试过的,用我改进后的TCP/IP协议栈,大概每10ms左右向8019发一个包,可能是icmp udp 或是 tcp ,结果一切工作正常,(没有丢包现象,我把以太网接收,和IP_PROCESS())写成了两个线程,这样以太网数据报基本上是随到随收!!!
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |