基于MCU的网络家电_第1页
基于MCU的网络家电_第2页
基于MCU的网络家电_第3页
基于MCU的网络家电_第4页
基于MCU的网络家电_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE43基于MCU的网络家电陈键林(自动化与电气工程学院指导教师:项小东)摘要:网络家庭已成为公认的下一个网络革命前沿目标,消费电子技术与Internet的交叉结合将会改变人们的生活方式,网络化家电将融入我们未来的生活。随着计算能力和网络技术的不断进步,全自动化的智能家电的普及已不是可望不可及。不久的将来,我们生活中的所有电器将能够互联并接入Internet。本设计的网络家电除了能在局域网内控制外,最重要的是能在互联网上控制,而且在通用的电脑上可以不用再安装软件,只要通过浏览器就能达到方便控制的目的。本文比较综合的描述了整个设计主要涉及的知识和开发的整个流程,并提供了解决动态IP的方案。相信在不久的将来,网络家电将像现在的电话一样迅速进入普通家庭。关键词:以太网;嵌入式;TCP/IP;LPC2210Abstract:FamilyNetworkhasbecomearecognizedundertheforefrontofthenetworkrevolution,ConsumerelectronictechnologyandtheInternetwillcombinecross-changepeople'swayoflife,Networkedhomeappliancewillbeintegratedintoourfuturelife.Withcomputingpowerandnetworktechnologyprogresses,thefullyautomatedintelligentapplianceisnotuniversalandelusive.Thenearfuture,weliveinallelectricalapplianceswhichwillbeabletoaccesstheInternetandtheInternet.ThedesignofthenetworkhomeappliancesinadditiontoLANcontrol,themostimportantthingistocontrolintheInternet.Inthegeneralcomputerwithoutinstallingsoftware,wewillbeabletoachievetheconvenienceofcontrolacrossthebrowser.Thispaperdescribesaintegrateddesignofthewholemainlyinvolvetheknowledgeandthedevelopmentoftheentireprocess,andtoprovideadynamicIPaddressoftheprogram.Ibelieveinthenearfuture,NetworkAppliancewillquicklygointoordinaryfamiliesasthetelephone.Keywords:Ethernet;Embedded;TCP/IP;LPC2210前言当今网络基础设施已经遍及全世界,Internet接入已不仅局限于个人计算机和工作站,各种电器也可以接入Internet。这得益于最新的数字与网络技术,诸如空调、冰箱、电视、洗衣机等许多消费电子设备以及打印机等办公设备都已成为“网络化”设备,这些设备我们称之为网络家电。在这些新型领域急需一种功能强大,运算速度快,资源丰富,价格合理的处理器。例如新近崛起的32位处理芯片ARM系列。它的强大的处理能力和丰富的资源以及使处理高品质的电子产品游刃有余,并且近似与单片机的价格,使它成为高端电子产品的新宠。因此,许多厂商将目光移到了以太网及TCP/IP技术在自动化行业中的应用,以此促成新一轮系统结构的变革。随着越来越多家庭电器小网络的出现及工业现场设备组网要求,以太网的嵌入式应用将成为一个趋势。而对于此类应用的研究将具有重大的意义。网络控制简介网络控制基本原理网络控制所指的是,控制端通过一定形式的网络结构实现对控制对象的操作。我们知道互联网不是一个单一的网络,而是由许多网络相互联接而构成的。本设计是建立在以太网的电气结构上,其接口是以太网的接口,通过以太网络进行对网络家电的控制。由于时间关系,我没有把普通的热水器跟嵌入式系统连接起来,而是用EASYARM2200模板上的硬件模拟成网络热水器。尽管如此,这已经完成了网络控制的最关键部分,只不过控制对象是模板上的数码管和LED。网络控制示意图INTERNET实际由许多种不同类型的网络互连而成,中间由一些互连设备(常用的中继器、网桥、路由器、交换机和网关等)连接。但从功能上和逻辑上看,这些网络群已经组成了一个大型的网络,所以往往把它当作一个虚拟的大网看待。如图1所示,我们只要在办公室里,在电脑的IE浏览器上输入家里网络家电的外网IP加上端口号,就能轻松控制相应的网络家电了。分布式网络节点大部分人都同意带有集中网关的家庭网络解决方案是最有效的,是最终的解决方案,也就是说很多人都愿意用一个网关把互联网上的数据提取出有用的信息后,由网关转换为统一的家庭内部网络(比如用无线网络等)控制家庭中其他网络家电,这样最大的优点就是使得成本降低,完整的集中式家庭网关被认为是连接外部网络和家庭内部网络设备的最有效的解决方案。但是由于现有的外部网络具有多样性特征,各个服务商的不同商业模式,现有的和正在研发的网络接口设备的差异以及许多其它的技术和商业问题的存在,所以没有单一的家庭网关解决方案能够适应可预见的未来。除此之外还由于集中的控制,会使得安全性能降低,因此我们想用分布式网络节点方法,使得家里每一个网络家电设备都有独立访问以太网的能力。只要我们在路由器的虚拟服务器配置里把不同的端口映射到每个不同的网络家电的家庭局域网的内网IP,则可以在浏览器里输入家庭网络的外网IP和相应的端口号就能访问到对应的网络家电。例如:在IE中输入:04:1118等等。TCP/IP协议简述要实现网络传输,采集的数据必须经由特定格式按照一定通用的协议编码。就像我们说话用某种语言一样,在网络上的各节点之间也有一种语言,这就是网络协议,不同的点之间必须使用相同的网络协议才能进行通信。OSI模型与TCP/IP模型比较OSI(OpenSystemInterconnectReferenceModel)是网络界的法律,主要目的是实现各厂商设备的兼容操作,TCP/IP(transmissioncontrolprotocol/internetprotocol)是互联网的主流协议。OSI模型与TCP/IP模型对应图如图2。OSI模型与TCP/IP模型子网层:相当于OSI模型的数据链路层(包括LLC和MAC层)和物理层。网络层:本层的作用是负责路由表的建立和维护,数据包的转发。本层的典型设备是ROUTER(路由器)。工作协议包括IP(Internet协议)、路由协议和ICMP(Internet控制信息协议)。传输层:本层将应用数据分段,建立端到段的虚连接,提供可靠或者不可靠传输。有UDP(用户数据报协议)和TCP(传输控制协议)。应用层:本层是人机通讯的接口。典型的协议如HTTP、FTP等。TCP/IP各层的基本功能对应,及其各层工作方向如图3。各层工作方向IEEE802.3标准首先阐述一下以太网及IEEE802.3的产生背景:(1)以太网1975年:美国施乐(Xerox)公司的PaloAlto研究中心研制成功[METC76],该网采用无源电缆作为总线来传送数据帧,故以传播电磁波的“以太(Ether)”命名。1981年:美国施乐(Xerox)公司+数字装备公司(Digital)+英特尔(Intel)公司联合推出以太网(Ethernet)规约[ETHE80]1982年:修改为第二版,DIXEthernetV2因此:“以太网”应该是特指“DIXEthernetV2”所描述的技术。(2)IEEE802.380年代初期:美国电气和电子工程师学会IEEE802委员会制定出局域网体系结构,即IEEE802参考模型。IEEE802参考模型相当于OSI模型的最低两层(物理及连路层):1983年:IEEE802委员会以美国施乐(Xerox)公司+数字装备公司(Digital)+英特尔(Intel)公司提交的DIXEthernetV2为基础,推出了IEEE802.3。由文献[1]可知,现今以太网络物理通信协议分两种,一种是DIX帧格式,另一种是IEEE802.3帧格式,都属于物理层。尽管以太网的这两种格式帧略有不同,但是实际环境中却不会出现问题。实际上,大多数主机都采用DIX帧格式,我们的嵌入式单片机也采用DIX帧格式。下面分别是这两种帧的结构。DIX帧格式:PRSDDASATYPEDATAPADFCS56bit8bit48bit48bit16bit46~1500可选32bitIEEE802.3帧格式:PRSDDASALENDATAPADFCS56bit8bit48bit48bit16bit46~1500可选32bitPR:同步位,用于收发双方的时钟同步,同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡),是56位的二进制数101010101010SD:分隔位,表示下面跟着的是真正的数据,而不是同步时钟,为8位的10101011,跟同步位不同的是最后2位是11而不是10。DA:目的地址,以太网的地址为48位(6个字节)二进制地址,表明该帧传输给哪个网卡.如果为FFFFFFFFFFFF,则是广播地址,广播地址的数据可以被任何网卡接收到。SA:源地址,48位,表明该帧的数据是哪个网卡发的,即发送端的网卡地址,同样是6个字节TYPE:类型字段,表明该帧的数据是什么类型的数据,不同的协议的类型字段不同。其值的范围是1536~65535(十进制),即从0x0600~0xFFFF。其中,小于0600H的值是IEEE802.3帧格式,表示以太网帧数据段部分的长度。LEN:IEEE802.3帧格式的数据段长度,表明该帧的用户数据长度是多少字节,其范围46~1500B。DATA:数据段,该段数据不能超过1500字节。因为以太网规定整个传输包的最大长度不能超过1514字节。(14字节为DA,SA,TYPE)PAD:填充位。由于以太网帧传输的数据包最小不能小于60字节,除去(DA,SA,TYPE14字节),还必须传输46字节的数据,当DATA的数据不足46字节时,后面补000000当然也可以补其它值。FCS:32位数据校验位.为32位的CRC校验,该校验由网卡自动计算,自动生成,自动校验,自动在数据段后面填入。事实上,PR,SD,PAD,FCS这几个数据段由网卡自动产生的,单片机只用操作DA,SA,TYPE,DATA这四个段的内容。以上数据利用曼彻斯特编码在网络中由低到高位传输。每个网络技术都有一个最大传送单位(MaximumTransferUnit,MTU),每个段长度不能超过这个MTU,通常MTU为几K。由上面的帧格式可以看出,以太网的MTU为1526B。其数据段的大小不能超过1500B。IP协议IP协议提供一种无连接的,不可靠的网络服务。这是因为IP分组是互不相关的,若要把它们联系起来,只能通过上层协议。IP协议现在有IPV4和IPV6版本。但是目前使用的是IPV4版本。互联网上的每个主机和路由器都有IP地址,IP地址指定的是网络接口(如网卡),所以一台主机如果有两个网络接口,它就必须有两个IP地址。首先简述一下IP地址。互联网上的每个主机和路由器都有IP地址,IP地址指定的是网络接口(如网卡),所以一台主机如果有两个网络接口,它就必须有两个IP地址。IP地址用分类编制方案分为A、B、C、D、E5个类,单个A、B或C类网络地址表示一个网络,而不是一LAN。网络地址是32位的数字,通常以点分十进制的形式写出。网络号由非盈利公司ICANN管理以避免冲突。ICANN又委派地方权力机关管理部分地址空间,然后再分配给ISP公司和其他公司。而现在的实际应用中,使用CIDR(classlessinter-DomainRouting无类路由技术)。它的主要特点就是抛弃了IP地址类的边界(不再指定网络号或主机号的比特位数),从而也被称为无类或超类。子网掩码是一个32位地址,和IP(IPV4)地址是对应的,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。如果对应的IP地址网络号是相同的,则是同一子网,否则不在同一个子网上。主机要发送IP包时,是把要发送的IP地址和自己IP用自己的子网掩码为标准计算是否在同一子网上的。例如连在同一个HUB上的主机A(IP为6,子网掩码为)和主机B(IP为9,子网掩码为)通信,假设A要发送数据给B,A会先比较把B的IP与自己的IP用A的子网掩码比较一下(),得到都是192.168,是同一个子网,所以直接发送给B,B能收到A发来的数据。当B要发送给A时,同样比较一下它们的IP,但此时用的是B自己的子网掩码(),发现A是192.168.5子网,而B自己是192.168.6,处于不同的子网,所以不能直接发送给A,此时会把包转发到它的网关,如果A、B的网关是一样的,且该网关能分别跟A、B通信,则B要发给A的数据包还是能转到A的,否则送不到。和一般的协议格式类似,IP协议分组由IP头部和正文数据部,IPV4协议结构如下:

4bit4bit8bit16bitVersionIHLTypeofserviceTotallengthIdentificationFlagsFragmentoffsetTimetoliveProtocolHeaderchecksumSourceaddressDestinationaddressOption+PaddingDataVersion–4位字段,指出当前使用的IP版本。IPHeaderLength(IHL)―指数据报协议头长度,具有32位字长。指向数据起点。正确协议头最小值为5。Type-of-Service―指出上层协议对处理当前数据报所期望的服务质量,并对数据报按照重要性级别进行分配。这些8位字段用于分配优先级、延迟、吞吐量以及可靠性。TotalLength―指定整个IP数据包的字节长度,包括数据和协议头。其最大值为65,535字节。典型的主机可以接收576字节的数据报。Identification―包含一个整数,用于识别当前数据报。该字段由发送端分配帮助接收端集中数据报分片。Flags―由3位字段构成,其中低两位(最不重要)控制分片。低位指出数据包是否可进行分片。中间位指出在一系列分片数据包中数据包是否是最后的分片。第三位即最高位不使用。FragmentOffset―13位字段,指出与源数据报的起始端相关的分片数据位置,支持目标IP适当重建源数据报。Time-to-Live―是一种计数器,在丢弃数据报的每个点值依次减1直至减少为0。这样确保数据包无止境的环路过程。Protocol―指出在IP处理过程完成之后,有哪种上层协议接收导入数据包。HeaderChecksum―帮助确保IP协议头的完整性。由于某些协议头字段的改变,如生存期(TimetoLive),这就需要对每个点重新计算和检验。Internet协议头需要进行处理。SourceAddress―指定发送代码。DestinationAddress―指定接收代码。Options―允许IP支持各种选项,如安全性。Data―包括上层信息。[1]注意,IP协议会根据MTU来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。当IP包的大小超过以太网的IPMTU(1500B)时,发送时会被分成几个小块数据段,让其分别封装在以太网中分发出去,再在接收端组合回来。UDP协议UDP(userdatagramprotocol用户数据报协议)基本上就是IP协议的功能,仅是在IP层上附加了简单的多路复用功能,提供端到端的数据传输服务。它是一种无连接方式的、不可靠的运输协议,也正是由于udp是无连接方式的协议,这样udp支持广播和组播。Udp协议适合于条件较好的网络,效率往往很高。其分组格式如下:16bit16bitSourceportDestinationportSequencenumberChecksumDataSourcePort—16位。源端口是可选字段。当使用时,它表示发送程序的端口,同时它还被认为是没有其它信息的情况下需要被寻址的答复端口。如果不使用,设置值为0。DestinationPort—16位。目标端口在特殊因特网目标地址的情况下具有意义。Length—16位。该用户数据报的八位长度,包括协议头和数据。长度最小值为8。Checksum—16位。IP协议头、UDP协议头和数据位,最后用0填补的信息假协议头总和。如果必要的话,可以由两个八位复合而成。Data—包含上层数据信息。TCP协议TCP(tramsmissioncontrolprotocol传输控制协议)可以在不可靠的网络上提供服务。因为它是一种面向连接的运输协议,在进行数据交换时首先必须建立一条运输连接,数据传输完成以后把连接释放掉。报文结构如下:16bit16bitSourceportDestinationportSequencenumberAcknowledgementnumberOffsetReservedUAPRSFWindowChecksumUrgentpointerOption+PaddingDataSourcePort–识别上层源处理器接收TCP服务的点。DestinationPort–识别上层目标处理器接收TCP服务的点。.SequenceNumber–通常指定分配到当前信息中的数据首字节的序号。在连接建立阶段,该字段用于设别传输中的初始序列号。AcknowledgmentNumber–包含数据包发送端期望接收的数据下一字节的序列号.一旦连接成功,该值会一直被发送。DataOffset–4位。TCP协议头中的32位字序号表示数据开始位置。Reserved–6位。预留以备用。必须设置为0。ControlBits(Flags)–6位。传送各种控制信息。Tcp提供的是进程和进程的全双工的数据传输服务,在数据传输之前必须首先建立连接,在传输完成后释放连接。其连接的建立不是一个对称的过程,也就是tcp连接的两方中一方处于被动方式(监听),一方处于主动方式(请求连接)。TCP协议中使用三次握手(一次握手为一次数据传输)实现连接,其正常的连接释放通过四次握手,如图4所示。TCP协议的数据传输工程TCP采取一种可变大小的滑动窗口机制来进行流量控制,以防止发送方的数据发送得过快,以致接收方来不及处理得情况。并且通过拥塞控制来防止网络过载。TCP采用一种自适应的重传计时策略。一般情况下,一个TCP段发送后启动这个计时器,如果在计时器超时前收到这个TCP段的确认,则停止该计时器,否则重发该TCP段[1]。注意:整个TCP包长度是有限制的,它一方面受IP数据包(包括数据和协议头)最大值65,535字节的限制;另一方面,每个网络都有一个最大传送单位(MaximunTransferUnit,MTU),每个段长度不能超过这个MTU,通常MTU为几K。而以太网的MTU为1526B,数据段帧的长度不能超过1500B。在TCP协议中把一个TCP数据段携带的用户数据的限制成为最大分段大小(MaximumSegmentSize,MMS),MMS的取值一般和TCP协议的具体实现相关,而且这个数据是可以配置的,常见的配置值为1460B、536B和512B。(一般地,bit用b表示,Byte用B表示。)通讯双方会根据双方提供的MSS值得最小值确定为这次连接的最大MSS值。具体详见MTU和MSS。最后,我们对比一下TCP和UDP。它们的主要区别在于,前者提供的是面向连接的服务(Connection-OrientedService),而后者提供的是无连接的服务(ConnectionlessService)。凡是提供使用面向连接的服务,首先要在用户之间建立连接,然后在该连接上进行数据传送,最后断开连接。连接本质上像一个管道,或者说是一条专线,发送者在管道一端放入物体或者在专线一端送入信息,接收者就可在管道的另一端按同样的顺序取出物体或从专线的另一端依次收到信息。对于无连接服务来说,发送方发出的每一条信息或报文都必须带有完整的目标地址,并且每一个报文都独立于其它报文,经由系统选定的路径传递到目的地。在使用无连接的服务时,在网络环境中,可能会出现先发的报文在途中丢失或者延误了,而后发的报文先收到[1]。HTTP协议以及HTML语言HTTP(hypertexttransmissionprotocol超文本传输协议,是TCP/IP模型中的应用层协议)采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容[1]。通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。具体请参考RFC2616。典型的首页请求消息:GET/HTTP/1.1Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-icq,application/msword,application/vnd.ms-excel,*/*Accept-Language:zh-cnAccept-Encoding:gzip,deflat如果要具体的了解其的结构,可以安装snifferpro软件,在浏览网页时抓个包看看,如图5所示。具体用法请参考有关资料。snifferpro使用例子Web服务器和浏览器之间通过http传递信息。其中的信息则按照html(hypertextmarkuplanguage超文本标记语言)编写,浏览器则把html信息显示在屏幕上。Http用于在通信之间双方之间传递由html构成的信息,而html用来控制如何把信息显示给用户。目前,http版本号是1.1,在1.1版前,发布了0.9版和1.0版。http0.9版是一个十分简单的协议,整个协议的描述只有几页,格式为:GET/文档名.html<crlf>。请求以GET开始,不支持其他的方法。http1.0对http0.9的扩充很巨大,第一个大的变化就是引入了MIME信息的现象,第二个就是定义了新的方法,HEAD和POST。http1.1又对http1.0作了改进:具体这些新的改进特征请参考有关文献[1]。MTU和MSS由前面的协议描述,我们知道MTU(MaximunTransferUnit)是指网络的最大传送单位。MSS(MaximumSegmentSize)是指TCP数据段携带的用户数据的最大分段大小。Internet协议(IP)是针对由以太网、帧中继等多种网络技术构成的网络的应用而设计的。每种网络技术都有不同的最大传输单元(MTU),即其能发送的帧的最大大小。IPMTU就是所能发送的IP包的最大大小。以以太网为例,以太网的MTU为1526字节。减去报头和报尾的大小(共26字节),以太网的IPMTU为1500字节。网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同)通过这段水管最大水量就要由中间最细的水管决定。为了适应各种网络技术不同的IPMTU,IP允许路由器将数据包进行分段。例如,如果数据包的大小超过了转发它的链路所允许的范围,则IP路由器会对数据包的有效负载进行分段,然后作为一个个的IP包(称为分段)进行发送。虽然IP的这个特性考虑了网络层的独立性,但它也会长时间占用处理器并占用大量内存,进而对IP路由器的性能产生实质性的影响。因此,包括Internet在内的现代IP网络都通过以下方法避免由路由器对IP包进行分段:• 发送基于UDP的通信时,将UDP消息的最大大小设置为足够小,以防止IP路由器进行分段。• 发送基于TCP的通信时,将IP报头中的“不分段”(DF)标记设置为1,阻止IP路由器对TCP数据段进行分段。当TCP对等方建立TCP连接时,它们会交换各自的TCP最大段大小(MSS)值。TCP对等方会使用这两个MSS值中的较小值来建立TCP连接。以前,主机的MSS值是MTU减去用于IP和TCP报头的40字节。但是,为了支持额外的TCP选项(如时间戳和可选确认),典型的TCP和IP报头可增至52字节或更多字节。当路由器必须将IP包分段但又因DF标记设置为1而不能分段时,路由器可采用以下任一种方式:• 发送符合RFC792中最初定义的“ICMPDestinationUnreachable-FragmentationNeededandDFSet”消息,然后丢弃该包。原始消息格式中不包含有关转发失败的链路的IPMTU的信息。• 发送符合RFC1191中重新定义的“ICMPDestinationUnreachable-FragmentationNeededandDFSet”消息,然后丢弃该包。此新消息格式包含一个MTU字段,可指出转发失败的链路的IPMTU。RFC1191定义了路径MTU(PMTU)发现,它使得成对的TCP对等方能够动态地发现二者之间路径的IPMTU,从而发现该路径的TCPMSS。一旦收到符合RFC1191定义的“DestinationUnreachable-FragmentationNeededandDFSet”消息,TCP就会将该连接的MSS调整为指定IPMTU减去TCP和IP报头的大小。这样,在该TCP连接上发送的后续包就不会超过最大大小,无需分段即可在该路径上传输。• 直接丢弃包。嵌入式系统的TCP/IP协议栈了解了相关原理,可以看到,对于微型嵌入式系统,要实现网络节点功能,首先要解决支持以太网功能。下面让我们了解一下几种开源的TCP/IP协议栈:1、BSDTCP/IP协议栈,BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的。这是因为BSD栈在BSD许可协议下提供了这些专业栈的雏形,BSD许用证允许BSD栈以修改或未修改的形式结合这些专业栈的代码而无须向创建者付版税。同时,BSD也是许多TCP/IP协议中的创新(如广域网中饿拥塞控制和避免)的开始点。2、uC/IP是由GuyLancaster编写的一套基于uC/OS且开放源码的TCP/IP协议栈,亦可移植到其它操作系统,是一套完全免费的、可供研究的TCP/IP协议栈,uC/IP大部分源码是从公开源码BSD发布站点和KA9Q(一个基于DOS单任务环境运行的TCP/IP协议栈)移植过来。uC/IP具有如下一些特点:带身份验证和报头压缩支持的PPP协议,优化的单一请求/回复交互过程,支持IP/TCP/UDP协议,可实现的网络功能较为强大,并可裁减。UCIP协议栈被设计为一个带最小化用户接口及可应用串行链路网络模块。根据采用CPU、编译器和系统所需实现协议的多少,协议栈需要的代码容量空间在30-60KB之间。3、LwIP是瑞士计算机科学院(SwedishInstituteofComputerScience)的AdamDunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是LightWeight(轻型)IP协议,相对于uip。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIPTCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。LwIP的特性如下:支持多网络接口下的IP转发,支持ICMP协议,包括实验性扩展的的UDP(用户数据报协议),包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议),提供专门的内部回调接口(RawAPI)用于提高应用程序性能,并提供了可选择的Berkeley接口API。4、uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈。完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KBROM或几百字节RAM中运行。uIP中还包括一个HTTP服务器作为服务内容。5、TinyTcp栈是TCP/IP的一个非常小和简单的实现,它包括一个FTP客户。TinyTcp是为了烧入ROM设计的并且现在开始对大端结构似乎是有用的(初始目标是68000芯片)。TinyTcp也包括一个简单的以太网驱动器用于3COM多总线卡以上的这些开源协议栈并非免费,拿来就可以用,据说,UC/OS的母公司推出UC/OS-TCP/IP花了6人*2年的工作量,国内某公司使用LWIP作为移植的参照,花了4-5人*2年的工作量来测试与优化协议,使用商用TCP/IP栈的高费用就不足为奇了。由于我们使用了周立功的easyARM2200模版,它附有ZLG/IP协议栈,而且它是针对UC/OS而设计的。我们选择一个开源协议栈可以从四个方面来考虑:一个是是否提供易用的底层硬件API,即与硬件平台的无关性;一个是与操作系统的内核API。协议栈需要调用的系统函数接口是否容易构造,另一个对于应用支持程度。最关键的是占用的系统资源是否在可接受范围内,有裁减优化的空间否?其中,BSD栈可完整实现TCP/IP协议,但代码庞大,70KB-150KB之间,裁减优化有难度,uIP和TinyTcp代码容量小巧,实现功能精简,限制了在一些较高要求场合下的应用,如可靠性与大容量数据传输。LwIP和uC/IP是同量级别的两个开源协议栈,两者代码容量和实现功能相似,LwIP没有操作系统针对性,它将协议栈与平台相关的代码抽象出来,用户如果要移植到自己的系统,需要完成该部分代码的封装,并为网络应用支持提供了API接口的可选性。uC/IP协议最初是针对uC/OS设计,为方便用户移植实现,同样也抽象了协议栈与平台相关代码,但是协议栈所需调用的系统函数大多参照uC/OS内核函数原型设计,并提供了协议栈的测试函数,方便用户参考,其不足在于该协议栈对网络应用支持不足。由于我们选用了LPC2210作为这个系统的核心,以uC/OS-Ⅱ为操作系统,我们最好能选用一种基于它的TCP/IP协议栈,而我们使用的easyARM2200模板恰好提供了一个这样的免费的协议栈——ZLG/IP协议栈。ZLG/IP是广州周立功单片机发展有限公司面向嵌入式系统开发的基于uC/OS-Ⅱ的小型TCP/IP协议栈。ZLG/IP源码包提供实现internet网络上IP节点的功能,是个高性能的嵌入式TCP/IP协议栈。它使用uC/OS-Ⅱ实时操作系统的信号机制来实现一个多任务并行并可重入的协议栈,完全使用ansic进行编写,可以像uC/OS-Ⅱ那样支持多种cpu。ZLG/IP还具有层次清晰、易于修改和升级等特点。ZLG/IP当前版本为1.0,支持tcp、udp、ip、icmp、arp、ethernet。相关网络设备简介以及IP包转发过程集线器集线器(HUB):工作在子网层。是将网线集中到一起的机器,也就是多台主机和设备的连接器。集线器的主要功能是对接收到的信号进行同步整形放大,以扩大网络的传输距离,所以它属于中继器的一种。区别仅在于集线器能提供更多的连接端口,而中继器只是一个1对1的专门延长传输距离的连接器。网桥网桥(bridge):工作在子网层。完成数据帧(frame)的转发,主要目的是在连接的网络间提供透明的通信。网桥的转发是依据数据帧中的源地址和目的地址来判断一个帧是否应转发和转发到哪个端口。帧中的地址称为“MAC”地址或“硬件”地址,也就是网卡所带的地址。网桥不阻挡网络中广播消息,有可能引起广播风暴。网桥现在基本上已经淘汰了。交换器交换机(Switch):也叫交换式集线器,工作在子网层。它是网桥的升级产品。路由器路由器(router):工作在网络层,利用网络层定义的“逻辑”上的网络地址(即IP地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。节点发送到其他网络的数据首先被送到路由器,再由路由器转发出去。IP路由器只转发IP分组,把其余的部分挡在网内(包括广播),从而保持各个网络具有相对的独立性,这样可以组成具有许多网络(子网)互连的大型的网络。由于是在网络层的互连,路由器可方便地连接不同类型的网络,只要网络层运行的是IP协议,通过路由器就可互连起来。一般地,无论是hub、switch还是router,他们的一个端口有数据发出,则这些数据不会被转发回来到这个端口,除非是dmz或者虚拟服务器在这个端口中被以自身外网IP转发回来。所以如果从hub的一个端口中引出两个分叉插口,这两个插口的主机不能互相访问(但都可以访问它们之外的别的主机,比如可以分别上网)!网关网关(Gateway):早期的路由器就是网关,而现在的网关的是指网络层以上的中继系统。它分为协议网关、应用网关、安全网关。因此网关可能是一台路由器,也可能是一台主机。网关用于以下几种场合的异构网络互连:异构型局域网,如互联专用交换网PBX与遵循IEEE802标准的局域网。局域网与广域网的互联。广域网与广域网的互联。局域网与主机的互联(当主机的操作系统与网络操作系统不兼容时,可以通过网关连接)。IP包转发过程IP包的“转发”开始于端站,端站需要确定发出该包的最佳方式,然后将该包发往下一跳。当目的端站和源端站位于同一个子网上时,IP包可以直接发送给目的端站。这时只需要涉及地址解析协议arp或者查找地址映射表,因为无非就是想得到目的端站的mac地址。如果判断出不在同一子网上,则它必须将该包发给路由器。端站的ip栈配置中包含有gateway的ip地址。该端站把所有非本地的数据都发给这个默认网关。由默认网关再做进一步转发。一般来说,默认网关必须和端站是相同的网络号,否则不能交换数据包,也就是不能通过它上网了。IP包的转发过程,通常采用步跳转发,它本身并不区分没有ip和其它协议。包的目的ip地址一直是不会变的(但源ip地址可能会变)。在每一次步跳时,都是使用mac地址,所以每经过一次步跳,mac的源地址和目标地址都与前一跳是不一样。所以说mac地址仅在lan之间使用,在lan中是不再有用了。IP包可以从任何一种类型的子网,例如令牌环网出发,穿过一些其他类型的中间子网,例如以太网、FDDI(FiberDistributedDataInterface)光纤分布式数据接口、ATM(AsynchronousTransferMode)异步转移模式、或者帧中继,最后到达一个SMDS子网或任何其他类型的LAN、WAN目标子网等。IP报文传输整个过程的用图6表示:IP报文传输过程其数字的意义为:1.主机将数据包发送到默认网关;2.数据包被封装入帧;3.路由器接到帧;4.路由器在路由表中发现目标网络;5.路由器选择一个更接近目标的下一跳;6.下一跳的MAC地址被确定;7.数据包被封装入帧;8.如果需要的话,重复步骤2~7;9.路由器接到帧;10.路由器发现直连网络;11.最终主机的MAC地址被确定;12.帧中的数据包被发送到最终主机。SOCKET简介从一个进程发送到另一个进程的任何消息都必须经过下层网络。进程从网路中接收数据,向网络发送数据都是通过它的socket(套接字)来进行的。Socket就是主机内应用层和传输层的接口,也成为程序和网络间的API(applicationprogramminginterface应用程序接口)。今天,socket接口是TCP/IP网络通信最为通用的API之一。许多组织开发了适合嵌入式平台的协议栈,比较有名的有uIP,tinyTCP,lwIP,openTCP等等。虽然这些协议栈有所不同,但都是使用socket编程的。到下面我们用的嵌入式单片机使用的ZLG/IP协议栈也是一样。TCP/IP的socket提供三种类型的套接字:stream(流式)套接字,datagram(数据报式)套接字,raw(原始式)套接字[1]。系统硬件部分在设计的前面我们选用过FREESCALE公司的MC9S12NE64,它是集成了网络控制器的微控制器的16位单片机。由于在使用数据处理方面对于海量数据的处理并不是很理想。于是采用了内核为ARM7TMDI的LPC2210和专用收发控制器RTL8019AS来做这个设计。另外,美国MICROCHIP公司于2004年推出了号称专为微控制器设计的以太网控制芯片ENC28J60。数据传输I/O由并行转为SPI串行,大大减少了与微控制器的接口引脚。可以作为以后我们另一个搭配选择(LPC2210+ENC28J60)。嵌入式系统简介概念及分类目前,对嵌入式系统的定义多种多样,但是没有一种是全面的。下面给出两种比较合理的定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积及功耗严格要求的专用计算机系统。嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语“嵌入式”反映了这些系统通常使更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。这里,我们再来看看嵌入式系统的分类,加深一下概念:嵌入式微处理器(EmbeddedMicroProcessorUnit,EMPU)它的基础是通用计算机中的CPU。在应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能,目前主要有Am186/88、386EX、SC-400、PowerPC、68000、MIPS和ARM系列。嵌入式微控制器(MicroControllerUint,MCU)它就是将整个计算机系统集成到一块芯片中,所以又称单片机。嵌入式微控制器一般以某种微处理器内核为核心,芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、WatchDog、I/O、串行口、脉冲调制输出、A/D、D/A、Flash、RAM和EEPROM等各种必要功能和外设。例如:8051、PIC16F877单片机和LPC2210等数目众多的ARM芯片。嵌入式DSP处理器(EmbeddedDigitalSignalProcessor,EDSP)它对系统结构和指令进行了特殊设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也较高。在数字滤波、FFT及谱分析等方面DSP算法正在大量进行嵌入式领域,DSP应用正从在通用单片机中以普通指令实现DSP功能,过渡到采用嵌入式DSP处理器。较有代表性的产品是TexasInstruments的TMS320系列和Motorola的DSP56000系列。嵌入式片上系统(SystemonChip,SoC)随着EDI的推广和VLSI设计的普及化及半导体工艺的迅速发展,在一个硅片上实现一个更为复杂的系统的时代已来临,这就是SoC。各种通用的处理器内核将作为SoC设计公司的标准库,和许多其它嵌入式系统外设一样,成为VLSI设计中一种标准的器件,用标准的VHDL等语言描述,存储在器件库中。用户只需定义出其整个应用系统,仿真通过后就可以将设计图交给半导体工厂制作样品。这样除个别无法集成的器件外,整个嵌入式系统大部分均可集成到一块或几块芯片中去。SoC分为通用和专用两类。通用系列包括Infineon的TriCore、Motorola的M-Core、某些ARM系列器件、Echelon和Motorola联合研制的Neuron芯片等。专用SoC一般专用于某个或某类系统中,不为一般用户所知。如PHILIPS的SmartXA,它将XA单片机内核和支持超过2048位复杂RSA算法的CCU单元制作在一块硅片上,形成一个可加载JAVA或C语言的专用的SoC,可用于公众互联网安全方面。ARMARM是AdvancedRISCMachines的缩写,是微处理器行业的一家知名企业,该企业设计了大量廉价、高性能、低功耗的RISC处理器、相关技术及软件。ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,例如Intel、NEC、SONY、PHILIPS等大公司。我们通常所说的ARM一般指的是由这些厂商生产出来的以ARM处理器作为内核的单片机。LPC2210芯片概况介绍LPC2210特点LPC2210是基于一个支持实时仿真和嵌入式跟踪的16/32位ARM7TDMI-STMCPU的微控制器。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30%,而性能的损失却很小。由于LPC2210的144脚封装、极低的功耗、多个32位定时器、8路10位ADC、PWM输出以及多达9个外部中断使它们特别适用于工业控制、医疗系统、访问控制和POS机。通过配置总线,LPC2210最多可提供76个GPIO。由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软modern以及其它各种类型的应用。其特性如下:16/32位144脚ARM7TDMI-S微控制器。16K字节片内静态RAM。串行boot装载程序通过UART0来实现在系统下载和编程。通过外部存储器接口可将存储器配置成4组,每组的容量高达16Mb,数据宽度为8/16/32位。EmbeddedICE-RT接口使能断点和观察点。当前台任务使用片内RealMonitor软件调试时,中断服务程序可继续执行。嵌入式跟踪宏单元(ETM)支持对执行代码进行无干扰的高速实时跟踪。8路10位A/D转换器,转换时间低至2.44ms。2个32位定时器(带4路捕获和4路比较通道)、PWM单元(6路输出)、实时时钟和看门狗。多个串行接口,包括2个16C550工业标准UART、高速I2C接口(400kbit/s)和2个SPI接口。向量中断控制器。可配置优先级和向量地址。多达76个通用I/O口(可承受5V电压),12个独立外部中断引脚(EIN和CAP功能)。通过片内PLL可实现最大为60MHz的CPU操作频率。片内晶振频率范围:1~30MHz。2个低功耗模式:空闲和掉电。通过外部中断将处理器从掉电模式中唤醒。可通过个别使能/禁止外部功能来优化功耗。双电源-CPU操作电压范围:1.65~1.95V(1.8V±8.3%)-I/O操作电压范围:3.0~3.6V(3.3V±10%)[3]ARM7TDMI-S特点ARM7TDMI-S是LPC2210的CPU,它是ARM通用32位微处理器家族的成员之一,是目前低端的ARM核。ARM处理器具有优异的性能但功耗却很低使用门的数量也很少。ARM结构是基于精简指令集计算机(ReducedInstructionSetComputing,RISC)原理而设计的指令集和相关的译码机制。复杂指令计算机(ComplicatedInstructionSetComputing,CISC)使用的是通用CPU的完整指令系统技术,比较冗余和复杂,但是兼容性好。而RISC就是将CPU常用的指令精简成部分的,使得原来需要几条指令才能完成的工作,现在只需要一条指令就能完成。所以比复杂指令集计算机要简单得多。这样的简化实现了:高的指令吞吐量出色的实时中断响应小的高性价比的处理器宏单元还有就是采用三级流水线的技术来增加处理器指令流的速度。这样可使几个操作系统同时进行,并使处理和存储器系统连续操作,能提供0.9MIPS/MHz的指令执行速度。流水线使用3个阶段,因此指令分3个阶段执行:取指、译码、执行。如图7:流水线技术注:程序计数器(PC)指向被取指的指令而不是指向正在执行的指令,在正常操作过程中在执行一条指令的同时对下一条指令进行译码并将第三条指令从存储器中取出。ARM7TDMI-S处理器使用了冯诺依曼VonNeumann结构指令和数据共用一条32位总线。只有装载存储和交换指令,可以对存储器中的数据进行访问。数据可以是8位字节、16位半字或者32位字。字必须分配为占用4字节,而半字必须分配为占用2字节。ARM7TDMI-S处理器有两个指令集:32位ARM指令集和16位Thumb指令集。传统的微处理器结构对于指令和数据有相同的带宽,因此和16位结构相比32位结构处理32位数据具有更高的性能,并且在寻址更大的地址空间时要有效得多。16位结构比32位结构具有更高的代码密度,并且超过32位结构50%的性能。Thumb在32位结构上实现了16位的指令集这样可提供比16位结构更高的性能和比32位结构更高的代码密度。系统电路设计本设计是模拟网络热水器的功能,用到的是只是easyARM2200模板上的部分硬件,这些主要的模块分别为:单片机——LPC2210以太网卡——RTL8019ASRTL8019AS是高度集成以太网控制器,它能够简单的解答即插即用NE2000兼容适配器,这种适配器具有二重和功率下降特性。通过三电平控制特性,RTL8019AS是已制的对网络设备GREENPC理想的选择。全二重功能能够模拟传播和接收在双绞线到全二重以太网交换机。这个特性不仅强带宽从10到20MBPS,而且避免了由于以太网频道争夺特性导致的读出多路存取协议的问题。微软公司的即插即用功能能减轻用户较差的营业收入而注意适配器资源,如IRQ,输入输出,和存储器地址等等。然而,为了特殊的应用而得不到即插即用功能的兼容性,RTL8019AS支持JUMPER和JUMPERLESS选项。为了提供完全解决即插即用方案,RTL8019AS在集成10BASET收发器,BNC,和AUI接口之间的自动检测功能。此外,8条IRQ总线和16条基本地址总线为大资源情况下提供了宽松的环境。RTL8019AS用16k字节SRAM设计在单片芯片上,它的设计不仅提供了更多友好的功能,而且节省了SRAM存储资源。输入输出模块按钮输入、数码管显示、LED显示电路(略),详见附录。

μC/OS-Ⅱ操作系统在计算机技术发展的初期,计算机系统中没有“操作系统”这个概念。为了给用户提供一个于计算机的接口,同时提高计算机的利用率,便出现了计算机监控程序,后来在20世纪69年代中期,监控程序发展形成了操作系统OS(OperatingSystem)。操作系统概念前后台系统对基于芯片开发来说,应用程序一般是一个无限的循环,可称为前后台系统。循环中调用相应的函数完成相应的操作,这部分为后台(也叫任务级);中断服务程序处理异步事件,这部分为前台(中断级)。因为中断服务提供的信息一定要等到后台程序走到该处理这个信息的时候才能得到进一步处理,所以这种系统在处理的及时性上比实际的差。操作系统它是计算机中最基本的程序。操作系统负责计算机系统中全部软硬件资源的分配与回收、控制与协调等并发的活动;提供用户接口,使用户获得良好的工作环境;为用户扩展新的系统功能提供软件平台。操作系统分类:多道批处理操作系统分时操作系统实时操作系统[2]实时操作系统概念实时操作系统(RTOS)是一段在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于它之上的各个任务。RTOS根据0.各个任务的要求,进行资源(包括存储器、外设等)管理、消息管理、任务调度及异常处理等工作。在RTOS支持的系统中,每个任务均为一个优先级,RTOS根据各个任务的优先级,动态的切换各个任务,保证对实时性的要求。工程师在编写程序时,可以分别编写各个任务,不必同时将所有任务运行的各种可能情况记在心中。实时多任务操作系统以分时方式运行多个任务,看上去是在同时运行。任务之间的切换应当以优先级为依据,只有优先服务方式的RTOS才是真正的实时操作系统,时间分片方式和协作方式的RTOS并不是真正的“实时”。总的来说,实时操作系统是事件驱动的,它能对来自外界的作用和信号在限定的时间范围内作出相应。它强调的实时性、可靠性和灵活性,与实时应用软件相结合成为有机的整体起着核心作用,由它来管理和协调各项工作,为应用软件提供良好的运行软件环境及开发环境。分类从实时系统的应用特点来看,实时操作系统可以分为一般实时操作系统和嵌入式实时操作系统两种。一般实时操作系统与嵌入式实时操作系统都是具有实时性的操作系统,它们的主要区别在于应用场合和开发工程。一般实时操作系统应用与实时处理系统的上位机和实时查询系统等实时性较弱的实时系统,并且提供了开发、调试及运行一致的环境。嵌入式实时操作系统应用于实时性要求高的实时控制系统,而且应用程序的开发过程是通过交叉开发来完成的,即开发环境与运行环境不一致。嵌入式实时操作系统具有规模小(一般几K到几十K内)、可固化使用实时性强(在毫秒或微秒数量级上)的特点。优缺点在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化;而且对实时性要求苛刻的事件都得到了快速、可靠的处理。通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。而且实时操作系统在受到强干扰时,也不会使得整个系统崩溃,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复或者清除掉有错误的任务。但是,使用嵌入式实时操作系统还需要额外的rom/ram开销、2%~5%的cpu额外负荷以及内核的费用。[2]μC/OS-Ⅱ操作系统μC/OS-Ⅱ简介它是一个源码公开、可移植、可固化、可裁剪及占先式的实时操作系统,其绝大部分源码是用ANSIC写的。它可以管理64个任务,除了系统本身保留了8个任务外,用户最多能可以用到的任务数量可达56个任务。和其它实时操作系统一样,它的函数的调用的时间是具有确定性,也就是说,用户总是能知道它调用与服务执行了多长时间。它提供了很多系统服务,例如信号量、时间标志、消息邮箱、消息队列等。在中断管理中,中断可以使正在执行的任务挂起,如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部推出后立即执行,中断嵌套层数可达255层。μC/OS-Ⅱ的移植要移植uC/OS,目标处理器必须满足以下要求;·处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断;·处理器支持中断,并能产生定时中断;·处理器支持足够的RAM(几K字节),作为多任务环境下的任务堆栈;·处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存中的指令。在理解了处理器和C编译器的技术细节后,uC/OS的移植只需要修改与处理器相关的代码就可以了。具体有如下内容:·OS_CPU.H中需要设置一个常量来标识堆栈增长方向;·OS_CPU.H中需要声明几个用于开关中断和任务切换的宏;·OS_CPU.H中需要针对具体处理器的字长重新定义一系列数据类型;·OS_CPU_A.ASM需要改写4个汇编语言的函数;·OS_CPU_C.C需要用C语言编写6个简单函数;·修改主头文件INCLUDE.H,将上面的三个文件和其他自己的头文件加入。μC/OS-Ⅱ在已经移植好的工程模版中的建立对于有已经成功移植的例子,则在这个工程修改就好了。而如果有已经移植好的工程模版,则在建立工程时建立这样的工程就更方便了。下面简单介绍一下具体的方法。首先,安装好ADS1.2后,把补丁包中\LPC2200专用工程模板\LPC2200Projectmodule目录下的所有文件夹复制到ADS的stationery目录。新建包含OSII框架的工程,如图8。新建包含OSII框架的工程可以直接在location选项中填上你想新建的工程文件夹(如os_test),然后在projiectname选项填上你想新建的项目名称(如use),接着点击“确定”就一步完成新建工程工作了。然后就把OSII的源代码文件夹ARM和SOURCE文件夹复制到刚刚建立的文件夹中(E:\myprograms\arm\os_test)。这样,再打开这个工程,就可以在use文件夹中添加或者新建你的程序文档了。系统程序设计ADS1.2的使用硬件准备好了,就要开始软件的开发。目前支持ARM的C编译器有GCC,SDT,ADS。其中ADS是SDT的升级版本。以后ARM公司不再支持SDT,所以不选择SDT。GCC虽然支持广泛,但是编译效率比较低,最终选择ADS编译器。ADS1.2(ARMDeveloperSuite),是ARM公司推出的ARM核微控制器集成开发工具。包括以下6个部分:名称描述使用方式代码生成工具ARM汇编器,ARM的C,C++编译器,Thumb的C,C++编译器,ARM连接器由GodeWarriorIDE调用集成开发环境GodeWarriorIDE工程管理,编译连接调试器AXD(ARMExtendedDebugger)仿真调试指令模拟器ARMulator有AXD调用ARM开发包底层的程序由GodeWarriorIDE调用ARM应用库C,C++函数库用户使用首先是安装这个开发软件。点击安装包的setup.exe文件按提示进行安装,当出现"ARMLicenseWizard"选择"InstallLicense",然后使用"LicenseFileToBeInstalled"中的"Browse"选择CRACK文件夹中的license.dat文件。这样就完成了ads1.2的安装,安装好后在开始菜单的“所有程序”中会出现如下内容:然后将EasyARM2200光盘中\ARM与嵌入式系统基础实验教程(1)\第2章\EasyJTAG_drive目录下的所有文件复制到ADS的BIN目录,如D:\application\arm\Bin。然后,打开AXD调试环境,操作菜单"Options->ConfigureTarget...",弹出"ChooseTarget"窗口,点击"ADD"添加仿真器的驱动程序,在添加文件窗口选择如D:\application\arm\Bin目录下的EasyJTAG.dll,"打开"即可。若在添加文件窗口中没有显示DLL文件,请设置"文件夹选项(O)...",将查看页中的"隐藏文件"项选用"显示所有文件",即可。接着将EasyARM2200光盘中\ARM与嵌入式系统基础教程\第5章\LPC2200专用工程模板\LPC2200Projectmodule目录下的所有文件夹复制到ADS的stationery目录。最后新建工程编写程序并编辑好后,调试程序。打开AXD的"Options->ConfigureTarget...",弹出"ChooseTarget"窗口,在"TargetEnvironments"框中选择"EasyJTAG..."项。(JP6跳线设置为Bank0-Flash和Bank1-RAM;JP7选择OUTSIDE)按如下图的设置:(在进入AXD调试环境,有时会弹出"FatalAXDError"窗口,此时可以点击"Connectmode...",然后选择"ATTACH..."项确定,再点击"Restart"即可。)程序结构程序的总体流程如图9所示,当系统上电复位开始进入引导程序。一般而言,一个ARM的启动代码必须要完成以下部分的初始化:定义入口点、设置中断/异常向量、初始化存储系统(如果需要,进行代码的搬移)、初始化堆栈、初始化I/O设备、初始化中断中用到的变量、开中断、必要时改变处理器的模式和处理器的状态、初始化C程序中用到的存储区、引导处理器进入C程序。其中的难点在于内存系统的重映射和对C程序用到的存储区进行初始化。然后进入用户的主程序,初始化端口、OS操作系统等,然后启动操作系统。在第一个任务中,建立几个优先级比它低的任务,主要有(优先级从高到低)UDP任务、TCP任务、单机任务。在使用带uC/OS-Ⅱ模版建立的工程中,已经包含了一般的用户引导程序。首先是程序的向量表的初始化、外部总线控制器的配置等。接着是存储器的映射,一般地,在ADS开发环境中,我们都把它放在MEM_A、MEM_B、MEM_C文件中,要编辑里面的内容,可以用ADS中的CodeWarriorforARMDeveloperSuite修改,在编译时选用想要的映像文件即可,见图10。一般地我们选用MEM_A。程序的总体框图:LPC2200专用模板各生成目标的配置单机功能流程在这个单机任务中,其流程如图11,要实现的功能如图12。单机功能流程图单机功能示意图UDP任务流程在这个任务中,要求跟上位机的UDP程序互相交换数据,实现用PC机控制网络热水器。用户在PC机上只需在IP和port栏写上相应网络家电的IP和UDPport,然后在设定温度栏那里写上温度,按下加热按钮则可。可以在加热的过程中按下取消按钮取消加热,如果加热已经完成,再按下取消加热按钮,则会复位加热的数据值。图13为UDP任务的流程。UDP任务流程图TCP任务流程在这个任务中,我们只对会出现的TCP数据段的数据进行处理(当然遵从http协议的数据格式),都是针对固定的网页编写的,当要网页要更改时,就要根据情况修改程序。在这里,我用的是静态网页,其传输的http信息格式都已经分析过,如果只是静态网页的修改,可以很方便在我原有的基础上改动,而如果要改成动态,则要求把传输的信息重新分析,可以用snifferpro分析数据包的格式。然后根据这些信息改写程序,可能改动较多。图14是该任务的主要流程。TCP任务流程图网页设计这是当前较流行的一种做法,嵌入式的网络应用,离不开便利性。要求通讯的界面友好易用,用户访问,修改方便。一般这类功能的实现离不开高级语言的支持。由于嵌入式系统资源紧张,所以WEBSERVER形式在嵌入式使用中还处在初级阶段,主要还是宽带路由器等以高性能ARM为内核的应用。首先,我们可以用dreamweaver软件先把网页做好。注意,如果是单个网页要一次发送的,其大小最好不要超过1460B,具体原因参考上面TCP/IP协议和路由器的介绍。更不要超过1500B,因为TCP协议默认MMS一般为1500B,如果大于这个值则会出错,否则要改MMS这个参数,增加了麻烦。然后我们把编好的网页的源代码复制下来编辑,把回车转换为/r/n,把"转换为/",编辑好后在ARM中用数组存储起来。为了写程序和分析提供方便,我使用的表单方法是get,而不是post,如果要修改,详见程序里的网页数组。如果是需要自动刷新的网页,可以在网页代码中的把下面的代码加到<head>与</head>之间,<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><metahttp-equiv="refresh"content="5">(每5秒刷新一次,你可以任意修改content的值)这样就能使得静态网页能“动态”更新了。系统调试硬件与软件部分设计都完成后,需要对该系统进行调试,以下为调试步骤。单机功能调试在没有接入网线的时候,测试设计的功能能不能很好的完成。本设计开机后,当数码管出现从右到左飞入“LPC2210”的字幕,则表示系统已经准备好了,可以对它控制了。首先按下S12设置进入温度设定界面,按S14~S16设定要加热的温度,按S13确定后,就可以按下加热按钮S9进行加热。如果想取消加热,可以按下S10。测试结果,一切符合设计要求。在点对点环境中调试为了避免受到网络的干扰,我们进行了PC机和网络热水器的点对点控制,可以用交叉线把它们连接起来。这里有个常识:一般地,同类设备连接用交叉网线,不同类设备用直连网线,Uplink口除外。例如,我们要把hub与hub连接,或者hub与router连接时,可以用交叉线把它们的普通接口接起来,也可以把hub的Uplink口与另外hub的普通接口用直连网线连接。而电脑(或者网络家电)与hub(或者router)连接,则用直连网线连接。连接好PC机和网络热水器后,我们首先进行单机的调试,同6.1的测试过程。然后进入我们最关注的部分TCP任务的测试。需要注意的是,我们用来控制网络热水器的主机必须与网络热水器在同一个子网上。这里,网络热水器的IP为74,子网掩码为,所以控制主机的IP必须为192.168.5.×,子网可以是(或者)。如果是在IE中设置了代理服务器的,先把它去掉。在IE的地址栏中输入74,可能会出现一个出错页,可以刷新一次,此时应该出现登陆网页,如图15:登陆页面输入用户密码(均为615)后,提交,会出现如下:输入温度(在20到100之间),如80,并按下加热后,如下:此时我们可以按下当前温度按钮查看当前温度,并且每隔3秒就更新一次数据,如下,完成加热后就会出现:最后,我们看看是UDP任务的调试(为了对比一下跟用浏览器控制的区别)。由于这不是像IE一样通用的程序,所以要先安装这个专用UDP程序控制端,安装完毕后,输入IP和端口,当然还有就是要加热的温度,如图16所示。UDP控制界面按下加热按钮后,应该会收到网络热水器的反馈信息。如下:按下停止按钮则会出现:在设计时,当别的用户正在使用的时候,网络用户是暂时不能使用的(家庭用户可以),如果继续操作会返回如下信息:测试结果,跟设计的要求一致。在局域网中调试测试的步骤类似6.2,测试结果表明,用TCP的方式的,可以用浏览器作为控制软件,所以不用安装其它软件就能很方便实现控制,操作界面也很友好。而用UDP方式的则要用安装专用的软件,但是访问的速度比TCP快。因为TCP在传输数据的前后分别需要连接和释放连接的过程。而且TCP使用的上层协议是http,需要传输的数据量比UDP多得多。在外网中(互联网)调试由于教学楼二这里的网络,我们不能设置端口映射,不能让外网主动访问里面的主机。所以需要到一个经过设置后能让外面主动访问里面网络的环境,我们的寝室就是这样的环境。我们要先设置一下寝室的路由器,让外网能够访问网络热水器。具体设置如下:首先是在用户的计算机中打开路由器管理网页,前提是主机地址与路由器地址在同一个子网上(这里为了和教学楼二的网络统一,我已修改了寝室的路由器IP为,网络热水器IP为74)。然后在“转发规则”中的虚拟服务器中把网络家电设置的IP和端口在这里配置,如图17。路由器的端口

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论