原创 【博客大赛】网络通信之UIP在STM32上的移植

2013-10-17 18:26 3067 46 47 分类: 通信 文集: C

1、什么是UIP协议栈:

UIP是一种适用于小型嵌入式通信的TCP/IP协议栈,由瑞典计算机科学院的人开发编写的,它去掉了完整的TCP/IP中不常用的功能,简化了通讯过程,但其保留了网络通信中必须使用的协议,把设计重点放在IPTCPARP协议的实现上。简单易用、占用资源少是它的设计特点。 

 

2、协议栈接口

UIP协议栈通过一系列接口函数与底层函数和上层应用程序通信,在两者之中,UIP接口函数处于中间。 其中UIP提供两个个接口函数给底层系统。分别是

1uip_input()

当网卡驱动收到一个输入包时,将放入全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。同时将调用 uip_input() 函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。当 uip_input() 返回时,一个输出包同样放在全局缓冲区uip_buf里,大小赋给uip_len。如果uip_len 是0,则说明没有包要发送。否则调用底层系统的发包函数将包发送到网络上。

 

2uip_periodic()

 

uIP 周期计时是用于驱动所有的uIP 内部时钟事件。当周期计时激发,每一个TCP 连接都会调用uIP 函数uip_periodic() 。类似于 uip_input() 函数。uip_periodic()函数返回时,输出的IP 包要放到uip_buf中,供底层系统查询uip_len的大小发送。

 

 

UIP提供一个调用函数uip——appcall() 上位机应用程序通信。当uip在接收到底层传来的数据包后,直接调用uip_appcall()就可以把数据传送到上层应用程序进行处理。

101701.jpg

 

 

系统底层其实在一开始时还需要调用初始化UIP的函数——uip_init(),主要是初始化协议栈的侦听端口和默认所有连接都是关闭的。

 

3UIP协议栈在STM32上的移植

 

 

1DM9000A 初始化和UIP初始化;

tapdev_init(); uip_init();

2)设置IP地址 

 uip_ipaddr(ipaddr, 192,168,1,10);

3)设置默认的路由器地址 

uip_ipaddr(ipaddr, 192,168,1,1);

4)设置网络掩码

  uip_setnetmask(ipaddr);

 

5)当DM9000A接收到数据后会产生中断,这时候从DM9000A读取一个IP包,返回数据长度;

    uip_len = tapdev_read();

6)校验处理数据包

BUF->type == htons(UIP_ETHTYPE_IP

7)去除以太网帧头结构,更新ARP

uip_arp_ipin();

8IP包处理

uip_input();

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

ytuxiaobin_573863401 2014-1-16 11:33

挺好的,最近正打算换工作,很有感触

飞言走笔 2014-1-7 21:50

很好

1634090993_696409884 2013-10-19 11:43

学习一下!
相关推荐阅读
啊左不是蜗牛 2015-01-28 09:21
【博客大赛】那样的人生,看不穿
         昨晚11点跟PM姐姐聊天,问她今晚要不要加班,她回:刚刚开发哥哥陪她出来打的。。。我以为我十点半从实验室回去已经够晚了。。我脸红了。        我问她为什么不早点回去...
啊左不是蜗牛 2015-01-13 19:41
【智能手机】三个观点说说国产手机未来
在此篇文章之前还有一个各大手机品牌的总结,请点击查看。 智能手机之论英雄出处      谈手机之前换个角度,类比一下PC领域。 PC领域毛利最高的时候,国产PC一直混在低端。随着时代发...
啊左不是蜗牛 2015-01-09 17:56
【智能手机】论英雄出处
我认为,如果你不知道对手的底细,那么你就很难战胜对手。知己知彼,百战百胜。所以,我简单地说说我对这几家手机品牌的看法。个人之见,欢迎讨论。   苹果: 1976年成立,在乔布斯这样的天...
啊左不是蜗牛 2014-11-19 13:48
【博客大赛】蜗牛求职记之华为篇
1、前言说明          蜗牛是电赛出身,本科做硬件嵌入式,画板子和写C程序,然后研究生阶段是转战android,但是由于项目涉及到硬件,导师项目众多,小伙伴少,于是我也负责部分st...
啊左不是蜗牛 2014-08-16 14:38
以另一种位图的思想来解决一道OJ题目
前言: 以前所接触到的位图的思想都是以1位的形式去存储某个数出现的次数是1次还是0次。常见的例子不外乎在《编程珠玑》上的开篇例子里,1千万个数的排序统计,用1.25M的内存空间就可以达到遍历一...
啊左不是蜗牛 2014-08-15 11:57
Android 笔记之 listview 性能优化
列表显示需要三个元素, (1)listview 视图,用来显示列表的View ; (2)适配器,用来把数据映射到listView上面的 (3)数据,具体将被映射的数据,包括字符串,图片...
我要评论
1
46
关闭 站长推荐上一条 /1 下一条