第二章 uIP协议栈分析

合集下载

uip协议栈,下载

uip协议栈,下载

竭诚为您提供优质文档/双击可除uip协议栈,下载篇一:uip之udp应用笔记千兆网项目中,移植了uip到mcu中,采用udp通信方式,主要用来做一些控制协议的处理。

刚开始接手的时候,并没有做过网络方面的应用,而且对tcp/ip及udp通信又不太熟悉。

好在网上有一些文档,加上仔细阅读uip_process 代码,一边用抓包软件一边调试,总算把uip很好的应用了起来,而且还针对项目某些应用的特殊性,对uip源码进行了一些修改。

本文前半部分对uip源码的一些重要函数进行介绍,后半部分将对修改的部分做个记录,以备往后查阅。

本次使用的是uip-1.0,抓包软件用的wireshark1.6.7,这个软件真的很不错,居然支持gigevision,这点真的很意外。

一、一个完整的udp数据报文格式其实uip就是将你要发送到网络上的数据加上报头,好让它被成功发送到目的主机。

所以我们要先搞清楚一个完整的数据报文,才能搞清楚uip到底在做些什么。

ethernetheader:由目标mac和本机mac及type组成,共14byte,当目标mac全为ff时,表示是udp广播。

type=0x0800表示是ip。

在uip中,ethernetheader结构体定义如下:ipheader:0x45表示version=4,headerlength=20byte;0028表示ipheader+udpheader+userdata长度为40byte;6c14为包的id,每发一个包,这个id会自加1。

80的意义是timetolive,表示这个包的存活时间,路由每转发一次,就会对它自减1。

17表示通信协议类型为udp,4a0a为ipheader的校验码。

再后面就是源ip和目的ip地址了。

udpheader:0aaa表示srcport为2730;0f74表示dstprot为3956;14表示udpheader+userdata长度为20byte,c477表示udpheader的校验码,在一般的情况下,这个可以为0。

uIP协议栈在基于DSP以太网通信系统中的应用

uIP协议栈在基于DSP以太网通信系统中的应用
o h r e o to lra d t e s f a e t a s ln f e e d d u P p o o o t c ,a d g v n t e me h d f o t z t n fEt e n tc n r l n h o t r r n p a t o mb d e I r t c ls a k e ”r n ie h t o so p i ai mi o
岳世 为 尹 为 民
武汉 403) 3 0 3 ( 海军工程大学 电气与信息工程学院


文章通过对 uP协议的简单分析介 绍 , 出了以太 网通信 系统整体硬 件平 台、 I 给 设计思路和软件 工作流程 。完
成 了 以太 网 控 制 器 硬 件 驱 动 的 开 发 和 嵌 入 式 uP 协 议 栈 的 移 植 , 给 出 了 面 向 D P 的 优 化 编 程 方 法 。 实 现 了 以 I 并 S
TMS 2 F 8 2 3 0 2 1 数字信பைடு நூலகம்处理器和 C 8 0 A以太网控制器为核心的局 域网络 D P端 的以太 网通信 。 S 90 S
关键词 uP S ; S 90 I ;D P C 8 0 A;以太 网 T 33 P 9 中 图分 类 号
Ap lc to fuI o o o t c p i a i n o P Pr t c lS a k Bas d o e n D S Et r tN e wo k Co m u c to ys e P he ne t r m ni a i n S t m
Ab t a t Th s a tceb s d o h r fa ay i n r d c i n o f t c s rc i ril a e n t e b i n l ssi t o u t f P s a k,g v s t e Et e n t e wo k c mmu ia i n e o u ie h h r e t r o n nc t o s s e h r wa e p a f r ,d sg e s a d s fwa ewo k f w.Th u h r a o y t m a d r lto m e in i a n o t r r l d o e a t o s c mp e e h a d r r e e e o me t h lt d t eh r wa ed i rd v lp n v

基于STM32的UIP协议栈移植通信

基于STM32的UIP协议栈移植通信

R A M,处 理速度快 。E N C 2 8 J 6 0以太 网模块将 S T M 3 2 微控制处理器发送 的数据加上物理层的 前导符和帧起始定界符 ,使得数据符合以太网
的格 式 ,避免 被 以太 网当作 垃圾 数 据丢 弃 ,从 而 实 现数 据 间 的交互 。以太 网接 口选 用 带有 网 络隔 离变 压 器功 能 的 H R 9 1 1 1 0 5 A实 现 。T F T
随着信息化和物联 网技术的不断更新 ,物 联网慢慢进人人们 的生活 ,这就需要 电子产品 可以接入网络 ,实现数据交互 ,目前多数采用 小型无线传感技术 网络来实现 ,如 Z I G B E E技
术 等 ,但是 它们 只适合 小 型 网络 ,不 适合 长 距
离 的传 输 。 以太 网是 一个 覆 盖 区域极 广 ,协 议
件 平 台输 人 数据 ,数据 传输 需 要对 硬 件平 台输
人的数据进行符合 T C P / I P协 议 的数 据 传 输 格
式把数据传输到以太网中。嵌入式系统与基于
T C P / I P以太 网协 议 栈搭 建 的控 制器 ,可 以使 控 制器 接 入 现有 的 以太 网 ,从 而实 现数 据 的长 距
基 金 项 目: 福 建 省 教 育 厅 A 类 项 目 ( J A1 2 3 7 7 )
作者简 介 :陈清华 ( 1 9 8 1 一 ),男,福 建漳州人 ,讲师 ;研 究方 向:电子信 息技 术。
7 4
《 福建师大福清分校学 报 》
2 0 1 5 年 9月
E N C 2 8 J 6 0是 带 有 行 业 标 准 串行 外 设 接 口 ( S e r i a l P e r i p h e r a l I n t e r f a c e ,S P I )的独 立 以 太

GPRS原理、协议、应用

GPRS原理、协议、应用

MF009001 GPRS原理ISSUE1.0目录课程说明 (1)课程介绍 (1)课程目标 (1)相关资料 (1)第1章 GPRS概述 (1)1.1 GPRS的产生 (1)1.2 GPRS的发展 (1)1.3 GPRS与HSCSD业务的比较 (2)1.4 CSD与GPRS的比较 (3)1.4.1 电路交换的通信方式 (3)1.4.2 分组交换的通信方式 (4)第2章 GPRS基本功能和业务 (6)2.1 GPRS业务种类 (6)第3章 GPRS基本体系结构和传输机制 (8)3.1 GPRS接入接口和参考点 (8)3.2 网络互通 (8)3.3 逻辑体系结构 (8)3.3.2 主要网络实体 (10)3.3.3 主要网络接口 (12)3.4 高层功能 (14)3.4.1 网络接入控制功能 (14)3.4.2 分组路由和转发功能 (15)3.4.3 移动性管理功能 (17)3.4.4 逻辑链路管理功能 (17)3.4.5 无线资源管理功能 (18)3.4.6 网络管理功能 (18)3.5 功能分配 (19)3.6 GPRS数据传输平面 (20)3.7 GPRS信令平面 (21)3.7.1 MS与SGSN间信令平面 (21)3.7.2 SGSN与HLR间信令平面 (22)3.7.3 SGSN与MSC/VLR间信令平面 (22)3.7.4 SGSN与EIR间信令平面 (23)3.7.5 SGSN与SMS-GMSC、SMS-IWMSC间信令平面 (23)3.7.6 GPRS支持节点间信令平面 (24)3.7.7 GGSN与HLR间信令平面 (24)第4章移动性管理 (25)4.1 MM状态 (25)4.1.1 IDLE状态 (25)4.1.2 STANDBY状态 (25)4.1.3 READY状态 (26)4.2 MM状态功能 (26)4.2.1 MM状态迁移 (26)4.2.2 就绪定时器功能 (27)4.2.3 周期性路由区更新定时器功能 (28)4.2.4 用户可及定时器功能 (28)4.3 SGSN与MSC/VLR的交互 (29)4.3.1 SGSN-MSC/VLR关联的管理 (29)4.3.2组合RA/LA更新 (29)4.3.3 CS寻呼协调及网络操作模式 (30)4.4 MM规程 (31)4.4.1 GPRS附着功能 (31)4.4.2 GPRS分离规程 (33)4.4.3 清除功能 (36)4.5 安全性功能 (36)4.5.1 用户鉴权 (36)4.5.2 用户身份机密性 (37)4.5.3 用户数据和GMM/SM信令机密性 (37)4.5.4 用户身份检查 (38)4.6 位置管理功能 (38)4.6.1 小区更新规程 (39)4.6.2 路由区更新规程 (39)4.6.3组合RA/LA更新规程 (42)4.6.4 周期性路由区更新和位置区更新 (43)4.7 用户数据管理功能 (44)4.7.1 插入用户数据规程 (44)4.7.2 删除用户数据规程 (44)4.8 MS类标处理功能 (45)第5章无线资源管理功能 (46)第6章分组路由与传输功能 (48)6.1 PDP状态和状态转换 (48)6.2 会话管理规程 (49)6.2.1 静态地址与动态地址 (49)6.2.2 PDP上下文的激活规程 (50)6.2.3 PDP上下文的修改 (52)6.2.4 PDP上下文的去激活 (53)6.3 业务流程举例 (54)6.3.1 MS发起分组数据业务 (54)6.3.2 网络发起分组数据业务 (55)第7章用户数据传输 (57)7.1 传输模式 (57)7.1.1 GTP传输模式 (57)7.1.2 LLC传输模式 (57)7.1.3 RLC传输模式 (57)7.2 LLC功能 (57)7.2.1寻址 (58)7.2.2服务 (58)7.2.3功能 (58)7.3 SNDCP功能 (58)7.4 PPP功能 (60)7.5 Gb接口 (60)7.5.1物理层 (60)7.5.2 FR子层 (60)7.5.3 NS子层 (61)7.5.4 BSSGP层 (61)7.6 Abis接口 (62)7.6.1结构A (63)7.6.2结构B (64)7.6.3结构C (64)第8章信息存储 (66)8.1 HLR (66)8.2 SGSN (67)8.3 GGSN (69)8.4 MS (69)8.5 MSC/VLR (70)第9章编号 (71)9.1 IMSI (71)9.2 P-TMSI (72)9.3 NSAPI/TLLI (72)9.3.1 NSAPI (72)9.3.2 临时逻辑链路标志(TLLI) (72)9.4 PDP地址和类型 (73)9.5 TID (73)9.6 路由区识别 (73)9.7 小区标识 (74)9.8 GSN地址 (74)9.9 接入点名字 (74)第10章运营方面的问题 (75)10.1 计费信息 (75)10.2 计费功能 (75)10.2.1 分组型业务计费方式和电路型业务计费方式的区别 (75)10.2.2 计费基本功能 (76)10.2.3 话单类型 (76)10.2.4 话单传送接口 (77)10.3 网络服务质量(QoS) (77)10.3.1 优先级别 (78)10.3.2 延时级别 (78)10.3.3 可靠性级别 (78)10.3.4 峰值吞吐量级别 (78)10.3.5 平均吞吐量级别 (79)10.4 消息过滤功能 (80)10.5 兼容性问题 (80)第11章与GSM其它业务的交互 (81)11.1 与点对点短消息业务关系 (81)11.2 与电路交换业务的关系 (81)11.3 与补充业务的关系 (82)第12章 IP相关的基础知识 (83)12.1 NAT (83)12.2 FIREWALL (83)12.3 GRE (83)12.4 DNS (84)12.5 RADIUS (84)MF009001 GPRS原理ISSUE1.0 课程说明课程说明课程介绍本课程为华为传送网网络级网管T2100的一个整体介绍,主要阐述了网络级网管T2100兴起和发展的客观需求,华为传送网管的一体化解决方案。

UIP中文文档第二 uIP初始化函数

UIP中文文档第二 uIP初始化函数

1. void uip_init(void)此函数用于在启动时初始化uIP的TCP/IP栈。

应用示例:example-mainloop-with-arp.c, and example-mainloop-without-arp.c.定义于uip.c的379行。

2. void uip_setipid(u16_t id)此函数用于启动时设置初始的ip_id.此函数定义于uip.c的181行。

1. void uip_init(void)代码分析1.void2.uip_init(void)3.{4.for(c = 0; c < UIP_LISTENPORTS; ++c) {5.uip_listenports[c] = 0;6.} //将uip_listenports数组全部清零7.for(c = 0; c < UIP_CONNS; ++c) {8.uip_conns[c].tcpstateflags = UIP_CLOSED;9.} //将所有连接的tcpstateflags状态标志设为关闭,表示此连接为关闭状态。

10.#if UIP_ACTIVE_OPENstport = 1024;12.#endif /* UIP_ACTIVE_OPEN */13.//上面的段不知什么意思。

14.#if UIP_UDP15.for(c = 0; c < UIP_UDP_CONNS; ++c) {16.uip_udp_conns[c].lport = 0;17.}18.#endif /* UIP_UDP *///如果定义了UIP_UDP则将uip_udp_conns的lport清零。

19.20.21./* IPv4 initialization. */22.#if UIP_FIXEDADDR == 023./* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/24.#endif /* UIP_FIXEDADDR *///如果主机地址要为固定的,在上面这里赋值。

uip协议栈源码详解

uip协议栈源码详解

uip协议栈源码详解UIP协议栈源码详解一、双方的基本信息本协议由以下双方达成:甲方:地址:联系人:电话:电子邮箱:乙方:地址:联系人:电话:电子邮箱:二、各方身份、权利、义务、履行方式、期限、违约责任甲方的身份为软件开发公司,提供UIP协议栈源码。

乙方的身份为客户,接受并使用UIP协议栈源码。

甲方的权利:1.拥有UIP协议栈源码的知识产权,并保留其一切权利。

2.未经乙方授权,不得向第三方提供UIP协议栈源码。

3.有权定期或不定期进行软件升级、修补、优化等操作。

甲方的义务:1.提供UIP协议栈源码,并确保其真实、准确、完整。

2.保证UIP协议栈源码的质量和稳定性。

3.协助乙方解决UIP协议栈源码相关的技术问题。

乙方的权利:1.使用UIP协议栈源码进行相关开发和生产。

2.在UIP协议栈源码使用期限内,享有后续升级、修补、优化等服务。

乙方的义务:1.支付相应的授权费用,并按照甲方的要求使用UIP协议栈源码。

2.在未获得甲方授权之前,不得将UIP协议栈源码提供给第三方。

3.遵守中国相关的法律法规,不得将UIP协议栈源码应用于违法、不良等活动。

期限:本协议的期限为一年,自签署之日起生效。

期满后,如有需要,可协商双方续签。

违约责任:1.如任何一方未能履行本协议的义务或条件,则视为违约,违约方需承担相应的违约责任。

2.如甲方未能提供UIP协议栈源码或提供的UIP协议栈源码存在严重质量问题,则乙方有权要求返还全部授权费用,并要求赔偿相关损失。

3.如乙方将UIP协议栈源码提供给第三方,或将UIP协议栈源码应用于违法、不良等活动,则视为违约,乙方需承担相应的违约责任。

三、需遵守中国的相关法律法规本协议各项条款均符合中国相关法律法规。

四、明确各方的权力和义务本协议明确了甲、乙双方在UIP协议栈源码授权使用方面的权力和义务。

五、明确法律效力和可执行性本协议是双方人民法院具有司法管辖权的有法律效力的法律文件,是双方在UIP协议栈源码授权使用方面的合法依据。

uip协议栈

uip协议栈

uIP协议栈分析uIP特性uIP协议栈往掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保存了网络通讯必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。

由于uIP协议栈专门为嵌进式系统而设计,因此还具有如下优越功能:(1)代码非常少,其协议栈代码不到6K,很方便阅读和移植。

(2)占用的内存数非常少,RAM占用仅几百字节。

(3)其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。

(4)支持多个主动连接和被动连接并发。

(5)其源代码中提供一套实例程序:web服务器,web客户端,电子邮件发送程序(SMTP 客户端),Telnet服务器,DNS主机名解析程序等。

通用性强,移植起来基本不用修改就可以通过。

(6)对数据的处理采用轮循机制,不需要操纵系统的支持。

由于uIP对资源的需求少和移植轻易,大部分的8位微控制器都使用过uIP协议栈, 而且很多的著名的嵌进式产品和项目(如卫星,Cisco路由器,无线传感器网络)中都在使用uIP协议栈。

uIP架构uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。

uIP协议栈与系统底层和高层应用之间的关系如图2-1所示。

从上图可以看出,uIP协议栈主要提供了三个函数供系统底层调用。

即uip_init(), uip_input() 和uip_periodic()。

其与应用程序的主要接口是UIP_APPCALL( )。

uip_init()是系统初始化时调用的,主要初始化协议栈的侦听端口和默认所有连接是封闭的。

当网卡驱动收到一个输进包时,将放进全局缓冲区uip_buf中,包的大小由全局变量uip_len约束。

同时将调用uip_input()函数,这个函数将会根据包首部的协议处理这个包和需要时调用应用程序。

osip协议栈

osip协议栈

正文第一章SIP协议SIP协议是用于发起、控制和终结多媒体会话的信令协议。

它被IETF( )以rfc2543发表。

SIP是IETF致力于将电话服务带入IP网络众多协议的一个组成部分(它与SDP、RTP、RTCP、RTSP、RSVP、TRIP等众多协议构成SIP系统协议栈)。

其将要变成正在发展的IP电话——这个朝气蓬勃的电信工业——的标准之一。

正如同电子邮件协议一样,SIP将会变得越来越普及和大众化… …SIP独立与媒体传统电话使用一种媒体编码个师通讯(正如被我所熟知的时隙和PCM概念)。

现在,这种方式将被终结。

我们的电话可以以不同的质量保证和不同的编码方法连接电视、连接摄像机、连接其他电话进行通信。

SIP具有媒体协商等功能。

任何多媒体应用(例如:游戏、远程教学)都可以使用SIP来建立会话。

SIP独立于传输层SIP并不和任何的传输层紧密结合。

这一构思将使得SIP在第三代网络中受到最小的互操作影响。

无线电话的要求(例如漫游功能)同样被关心。

SIP完美的构思,使得其适合作为新蜂窝电话时代的信令协议。

SIP有很好的扩展性在rfc2543中定义了6种类型的事务(INVITE,BYE,CANCEL… …)。

这些事务被用于媒体协商、创建、修改和终结呼叫。

许多其它的服务已经提供这些方式(例如H.323系统),但SIP以其为扩展性为目的设计和事务模型重用(对于服务器是透明的,被用于使用新类型事务创建辅助服务)。

下面是可能的服务列表,其中的一些已经被实现。

短信,用于实时信息预定或通告,用于会议管理委托,用于呼叫转移等管理SIP和最终用户服务“SIP透明支持名字映射和重定向服务,提供ISDN和智能网络电话服务同样的一些功能。

这些特性也使得个人移动成为可能。

”参考阅读:rfc2543.txt(章节1.1)SIP服务器被用于定位用户和分发请求的用户定位信息。

这些途径,使得最终用户代理发起很少的请求,并能获得多种多样的服务。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.5 uIP 协议栈提供的主要接口
提供的接口在 uip.h 中,为了减少函数调用造成的额外支出,大部分接口函 数以宏命令实现的。 1.初始化uIP协议栈:uip_init() 2.处理输入包:uip_input() 3.处理周期计时事件:uip_periodic() 4.开始监听端口:uip_listen() 5.连接到远程主机:uip_connect() 6.接收到连接请求:uip_connected() 7.主动关闭连接:uip_close() 8.连接被关闭:uip_closed()
#define UIP_FIXEDETHADDR 1
#define UIP_ETHADDR0 0x00
#define UIP_ETHADDR1 0x4f
#define UIP_ETHADDR2 0x49
#define UIP_ETHADDR3 0x12
#define UIP_ETHADDR4 0x12
#define UIP_NETMASK2 255
#define UIP_NETMASK3 0
#define UIP_DRIPADDR0 192
#define UIP_DRIPADDR1 168
#define UIP_DRIPADDR2 1
#define UIP_DRIPADDR3 1 (2)使能 MAC 地址
的拷贝,且发送和接收都是依靠这个缓存区,极大的节省空间和时间。 (4) 支持多个主动连接和被动连接并发。 (5) 其源代码中提供一套实例程序:web 服务器,web 客户端,电子邮件
发送程序(SMTP 客户端),Telnet 服务器, DNS 主机名解析程序等。 通用性强,移植起来基本不用修改就可以通过。 (6) 对数据的处理采用轮循机制,不需要操作系统的支持。 由于 uIP 对资源的需求少和移植容易,大部分的 8 位微控制器都使用过 uIP 协议栈, 而且很多的著名的嵌入式产品和项目(如卫星,Cisco 路由器,无线传感 器网络)中都在使用 uIP 协议栈。
uip_periodic(i); if(uip_len > 0) {
uip_arp_out(); etherdev_send(); } } /*查看 10S 是否到了,到了则调用 ARP 处理程序*/ if(timer_expired(&arp_timer)) { timer_reset(&arp_timer); uip_arp_timer(); } } } return; }
2.2 uIP 架构
uIP相当于一个代码库,通过一系列的函数实现与底层硬件和高层应用程序 的通讯,对于整个系统来说它内部的协议组是透明的,从而增加了协议的通用性。 uIP协议栈与系统底层和高层应用之间的关系如图2-1所示。
图2-1 uIP在系统中的位置 从上图可以看出,uIP 协议栈主要提供了三个函数供系统底层调用。即 uip_init(), uip_input() 和 uip_periodic() 。 其 与 应 用 程 序 的 主 要 接 口 是
uIP 协议栈去掉了完整的 TCP/IP 中不常用的功能,简化了通讯流程,但保 留了网络通信必须使用的协议,设计重点放在了 IP/TCP/ICMP/UDP/ARP 这些网 络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
由于 uIP 协议栈专门为嵌入式系统而设计,因此还具有如下优越功能: (1) 代码非常少,其协议栈代码不到 6K,很方便阅读和移植。 (2) 占用的内存数非常少,RAM 占用仅几百字节。 (3) 其硬件处理层、协议栈层和应用层共用一个全局缓存区,不存在数据
uIP 周期计时是用于驱动所有的 uIP 内部时钟事件。当周期计时激发,每一 个 TCP 连接都会调用 uIP 函数 uip_periodic()。类似于 uip_input()函数。uip_periodic() 函数返回时,输出的 IP 包要放到 uip_buf 中,供底层系统查询 uip_len 的大小发 送。
/*从网卡读数据*/ uip_len = etherdev_read(); /*如果存在数据则按协议处理*/ if(uip_len > 0) {
/*收到的是 IP 数据,调用 uip_input()处理*/ if(BUF->type == htons(UIP_ETHTYPE_IP)) {
uip_arp_ipin(); uip_input(); /*处理完成后,如果 uip_buf 中有数据,则调用 etherdev_send 发 送出去*/ if(uip_len > 0)
{ uip_arp_out(); etherdev_send();
} } /*收到的是 ARP 数据,调用 uip_arp_arpin()处理*/
else if(BUF->type == htons(UIP_ETHTYPE_ARP)) { uip_arp_arpin();
if(uip_len > 0) { etherdev_send();
由于使用 TCP/IP 的应用场景很多,因此应用程序作为单独的模块由用户实 现。uIP 协议栈提供一系列接口函数供用户程序调用,其中大部分函数是作为 C 的宏命令实现的,主要是为了速度、代码大小、效率和堆栈的使用。用户需要将 应 用 层 入 口 程 序 作 为 接 口 提 供 给 uIP 协 议 栈 , 并 将 这 个 函 数 定 义 为 宏 UIP_APPCALL()。这样,uIP 在接受到底层传来的数据包后,在需要送到上层应 用程序处理的地方,调用 UIP_APPCALL( )。在不用修改协议栈的情况下可以适 配不同的应用程序。
#define UIP_CONF_BYTE_ORDER (7)暂时不移植打印信息,先关闭
UIP_BIG_ENDIAN
#define UIP_CONF_LOGGING
0
(8)定义数据结构类型
typedef unsigned char u8_t;
typedef unsigned int u16_t;
typedef unsigned long u32_t; 7. 如果使用 keil C 的小模式编译,需要在大部分的 RAM 的变量前增加 xdata。 8.data 为 keil C 的关键词,代码中所有出现 data 的地方(主要是参数、局 部变量、结构体成员)改为 pucdata 或 ucdata。 9.解决编译过程中的错误。uIP 协议栈为 C 语言编写,编译过程中的问题 比较少,并且容易解决。
2.3 uIP 在 MCS-51 单片机上的移植
1.为此项目建立一个 keil C 工程,建立 src 目录存放源文件。 2.通过阅读 uip-1.0\unix\main.c,了解 uIP 的的主循环代码架构,并将 main.c 放到 src 目录下。 3.仿照 uip-1.0\unix\tapdev.c 写网卡驱动程序,与具体硬件相关。这一步比 较费点时间,不过好在大部分网卡芯片的驱动程序都有代码借鉴或移植。驱动需 要提供三个函数,以 RTL9019AS 驱动为例。 etherdev_init():网卡初始化函数,初始化网卡的工作模式。 u16_t etherdev_read(void):读包函数。将网卡收到的数据放入全局缓存区 uip_buf 中,返回包的长度,赋给 uip_len。 void etherdev_send(void):发包函数。将全局缓存区 uip_buf 里的数据(长度 放在 uip_len 中)发送出去。 所以,收包和发包主要是操作 uip_buf 和 uip_len。具体驱动分析可参考《第 三章 网络芯片的驱动》。 4.由于 uIP 协议栈需要使用时钟,为 TCP 和 ARP 的定时器服务。因此使 用单片机的定时器 0 用作时钟,每 20ms 让计数 tick_cnt 加 1,这样,25 次计数 (0.5S)满了后可以调用 TCP 的定时处理程序。10S 后可以调用 ARP 老化程序。 对 uIP1.0 版本,增加了 timer.c/timer.h,专门用来管理时钟,都放到 src 下。 5.uIP 协议栈的主要内容在 uip-1.0\uip\下的 uip.c/uip.h 中,放到 src 下。如 果需要 ARP 协议,需要将 uip_arp.c 和 uip_arp.h 也放到 src 下。 6.uipopt.h/uip-conf.h 是配置文件,用来设置本地的 IP 地址、网关地址、 MAC 地址、全局缓冲区的大小、支持的最大连接数、侦听数、ARP 表大小等。 需要放在 src 下,并且根据需要配置。在 V1.00 版本中对配置做了如下修改: (1)配置 IP 地址,默认先关 IP,在初始化中再设定。
} } } /*查看 0.5S 是否到了,到了则调用 uip_periodic 处理 TCP 超时程序*/ else if(timer_expired(&periodic_timer)) {
timer_reset(&periodic_timer); for(i = 0; i < UIP_CONNS; i+DDR5 (3)使能 ping 功能
0x13
#define UIP_PINGADDRCONF 1 (4)关闭主动请求连接的功能
#define UIP_ACTIVE_OPEN 0 (5)将 uip_tcp_appstate_t 定位 u8_t 类型。 (6)由于单片机是大端结构,因此宏定义需要修改
#define UIP_FIXEDADDR 0
#define UIP_IPADDR0 192
#define UIP_IPADDR1 168
#define UIP_IPADDR2 1
#define UIP_IPADDR3 9
#define UIP_NETMASK0 255
#define UIP_NETMASK1 255
第二章 uIP 协议栈分析
2.1 uIP 特性
uIP 由瑞典计算机科学学院(网络嵌入式系统小组)的 Adam Dunkels 开发。其 源代码由 C 语言编写,并完全公开,所有代码和相关说明文档可以到 /adam/uip/下载。最新版本是 uIP1.0 版本,本书移植和使用的版 本正是此版本。
相关文档
最新文档