<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=195 </link><title>基于ARM和eCos的嵌入式WEB服务器设计</title><author>sunman</author><pubDate>2009/12/1 10:47:31</pubDate><description><![CDATA[&nbsp;<strong>引 言</strong>
<p>　　随着现代通信技术和网络技术的迅猛发展，以太网技术也越来越成熟，特别是基于TCP／IP通信协议的Web技术得到了广泛应用。我们可以用微控制器加以太网接口芯片，取代PC机进行现场控制，组成<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/嵌入式">嵌入式</a>Web Serv-er系统。现场<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr77" onmousemove="" onmouseout="GlobalHide('77',null)" onclick="">传感器</nobr>自动跟踪各监测点的信息，把检测到的数据存储在非易失性存储器中，并及时发布到互联网上；相关的工作人员就可以通过Web技术对设备进行远程控制、管理和维护，从浏览器上直接监控现场设备的运行，这样就大大提高了生产效率和管理水平。</p>
<p>　　为了实现<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/WEB服务器">WEB服务器</a>的功能，嵌入式操作系统和一个可实现的TCP／IP协议栈是必需的，因此对嵌入式处理器提出了更高的要求。与传统的8／16位单片机相比，<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/ARM">ARM</a>核处理器在运算速度、功耗和存储容量方面都有很大的优势，而且ARM核处理器可以很方便地实现嵌入式TCP／IP协议栈，所以ARM核处理器成为嵌入式Web服务器设备的首选处理器。系统的设计模型如图1所示。</p>
<p align="center"><img style="letter-spacing: normal" border="0" hspace="0" alt="系统的设计模型" src="http://image.mcuol.com/News/090206100952370.jpg" width="302" height="389" /></p>
<p>　　<strong>1 系统硬件设计</strong></p>
<p>　　ARM核处理器LPC2210基于支持实时仿真和嵌入跟踪的32／16位ARM7TDMI&mdash;S CPU。片内有16 KBSRAM，通过外部存储器接口配置成4组，每组的容量达16 MB。LPC2210采用144脚封装，功耗极低，具有多个32位定时器、8路10位<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr65" onmousemove="" onmouseout="GlobalHide('65',null)" onclick="">ADC</nobr>、PWM输出，最多可提供76个GPIO以及多达9个外部中断引脚；采用3级流水线技术，极大地提高了指令执行效率，通过可编程的片内锁相环(PLL)可实现最大60 MHz的CPU操作频率。</p>
<p>　　LPC2210的EMC组合符合ARM公司的PL090标准，总线宽度可设置为8位、16位或32位，通常16位总线宽度的存储器具有较高的性价比。</p>
<p>　　以Philips公司的ARM核处理器LPC2210为核心来实现嵌入式Web服务器；网络接口芯片采用Realtek公司的NE2000兼容芯片RTL8019AS，它内置了10BASE&mdash;T收发器，通过HR901170A器件接入以太网。硬件结构如图2所示。</p>
<p align="center"><span><img style="letter-spacing: normal; cursor: pointer" title="点击看大图" onclick="" border="0" hspace="0" alt="硬件结构" src="http://image.mcuol.com/News/090206100952591.jpg" width="580" /> </span></p>
<p align="center">点击看原图</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p>　　在图1中，LPC2210扩展了2 MB的NOR Flash(芯片型号为SST39VFl60)和8．MB PSRAM(芯片型号为MT45W4Mwl6)。为了方便调试及最终代码的固化应用，使用LPC2210外部存储器接口BankO和Bankl的地址空间，通过片选信号选通nCE_F和nCE_R，来将地址空间Bank0和Bankl分别分配给PSRAM和Flash。通常将代码固化到Flash，分配Flash为Bank0，PSRAM为Bankl，因为Bank0可以用来引导程序的运行。</p>
<p>　　LPC2210的大容量片上存储器为TCP／IP协议栈的实现和数据处理提供了足够的存储空间；利用LPC2210SPI接口扩展MMC／SD卡作为外部非易失性存储器，可以将ADC现场采集的数据、IP地址、网卡物理地址以及更新网页保存在里面，需要时还可随时更换MMc／SD卡。LPC2210具有ARM和Thumb指令集，采用流水线处理技术，能在指令执行期间预处理下一条指令，极大地提高了指令执行效率，为需要快速传输数据的网络应用提供了有效的支持。</p>
<p>　　<strong>2 系统软件设计</strong></p>
<p>　　<a style="color: blue; font-weight: normal; text-decoration: none" href="/news/listbylabel/label/eCos">eCos</a>(embedded Configurable operating system，嵌入式可配置操作系统)是一种针对16位、32位和64位处理器的可移植嵌入式实时操作系统。由于其源代码公开，因而越来越多的设计人员开始关注eCos操作系统。eCos最大的特点是模块化、内核可配置。最小版本的eCos只有几百字节，非常适合小型嵌入式系统的开发。与嵌入式Linux相比，eCos有配置灵活和节省资源的优势。它的其他优点是使用多任务抢占机制、具有最小的中断延迟、支持嵌入式系统所需的所有同步原语，并拥有灵活的调度策略和中断处理机制。因而eCos具有良好的实时性，与&mu;Clinux和&mu;C／OS等操作系统相比，它更适用于处理实时信号的设备，如移动通信、WLAN等通信设备的开发。</p>
<p>　　<strong>3 eCos的移植</strong></p>
<p>　　图3所示为eCos的移植流程。eCos的移植通过3个子模块来完成，即体系结构抽象层(Architeeture Hal)、变体抽象层(Variant Hal)和平台抽象层(Platform Hal)。对一个新的体系结构来说，系统结构抽象层的建立相对来说比较困难。目前，eCos已经支持各种主流CPU，也就是说，eCos源码中包含了CPU的体系结构层和变体抽象层，所以移植工作主要集中在平台抽象层。</p>
<p align="center"><img style="letter-spacing: normal" border="0" hspace="0" alt="eCos的移植流程" src="http://image.mcuol.com/News/090206100952822.jpg" width="422" height="871" /></p>
<p>　　RedBoot移植是平台抽象层移植的最好开始。RedBoot是位于硬件抽象层之上的命令行接口，并且包含GDB调试工具及其调试stub。一旦硬件抽象层移植到目标板中，RedBoot能将程序加载到目标板中，并且能在目标板上调试代码。</p>
<p>　　<strong>4 TCP／IP协议栈&mdash;&mdash;LwIP的实现</strong></p>
<p>　　LwIP是瑞士计算机科学院Adam Dunkles等人开发的用于嵌入式系统的开放源代码TCP／IP协议栈。它既可以移植到操作系统上，也可以在无操作系统的情况下运行。LwIP实现的重点是，在保持TCP协议主要功能的基础上，减少对RAM的占用；一般只需要几十字节的RAM和40 KB左右的ROM就可以运行，这使得LwIP适合在中低端的嵌入式系统中应用。</p>
<p>　　LwIP主要可以分为图4所示的几个层次。主要功能模块有：操作系统<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr93" onmousemove="" onmouseout="GlobalHide('93',null)" onclick="">模拟</nobr>层、网络接口函数、实现TCP／IP协议的各部分模块 (IP、UDP、TCP、IC&mdash;MP、ARP)、缓冲和存储管理子系统、校验和函数。</p>
<p align="center"><span><img style="letter-spacing: normal; cursor: pointer" title="点击看大图" onclick="" border="0" hspace="0" alt="LwIP软件层次" src="http://image.mcuol.com/News/090206100952983.jpg" width="580" /> </span></p>
<p align="center">点击看原图</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p>　　LwIP API是一组应用程序接口，通过该接口程序员就可以使用LwIP所有的功能。另外，LwIP也为开发者提供了更加高级的BSD Socket APl，使其可以使用通用的Socket函数来编写网络通信软件。操作系统模拟层可以使LwIP能够使用操作系统提供的一些高级管理功能，例如信号量管理、消息队列管理、创建线程等。</p>
<p>　　<strong>4．1 IP处理</strong></p>
<p>　　LwIP仅能实现IP层大部分基本功能。它虽然能够发送、接收以及转发信息包，但不能接收和发送IP分片包，也不能处理携带IP参数选项的信息包。不过对大多数的应用来说，这不会成为问题。</p>
<p>　　①接收信息包。对于到达的IP信息包，可由网络设备驱动调用ip_input()函数开始处理，并在这里完成对IP版本字段及包头长度的初始完整性检查，同时还要计算和验证包头校验和。</p>
<p>　　②发送信息包。外发的信息包由ip_output()函数处理，该函数使用ip_route()函数查找适当的网络接口来传送信息包。当外发的网络接口确定后，信息包传给以外发网络接口为参数的ip_output_if()函数。</p>
<p>　　③转发信息包。如果没有网络接口的地址与到达信息包的目标地址相同，信息包应被转发。这项工作由ip_ forward()函数完成。</p>
<p>　　④ICMP处理。ICMP处理相当简单。ip_input()函数收到的ICMP信息包被移交给icmp_input()函数，后者对ICMP包头解码，然后进行适当的动作。</p>
<p>　　<strong>4．2 UDP处理</strong></p>
<p>　　UDP是被用来在不同进程问分解信息包的简单协议。每个UDP会话的状态保存在一个PCB结构体中。UDP PCB保存在一个链表中，当一个UDP数据包到达时对这个链表进行匹配检索。</p>
<p>　　<strong>4．3 TCP处理</strong></p>
<p>　　TCP属于传输层协议，它为应用层提供了可靠的字节流服务。对它的描述要比对其他协议的描述复杂的多，其代码占了LwIP代码总量的50％。基本的TCP处理过程被分割为6个功能函数来实现，tcp_input()、tep_ process()及tcp_receive()函数与TCP输入有关，tcp_write()、tcp_enqueue()及tcp_output()则用于TCP输出。TCP的处理过程如图5所示。</p>
<p align="center"><span><img style="letter-spacing: normal; cursor: pointer" title="点击看大图" onclick="" border="0" hspace="0" alt="TCP的处理过程" src="http://image.mcuol.com/News/090206100953114.jpg" width="580" /> </span></p>
<p align="center">点击看原图</p>
<p>&nbsp;</p>
<p align="left">&nbsp;</p>
<p>　　<strong>4．4 应用程序接口设计</strong></p>
<p>　　LwIP API专为LwIP设计，所以它可以充分利用LwIP的内部结构实现其设计目标。LwIP API与BSDAPI类似，但操作相对低级。API不需要在应用程序和协议栈之间复制数据，因为应用程序可以巧妙地直接处理内部缓冲区。另外，BSD Socket API易于理解，并且很多应用程序为它而写，所以LwIP保留一个BSD Socket兼容层是很有用的。</p>
<p>　　鉴于TCP／IP协议栈的处理模式，APl分成两部分实现。如图6所示，一部分作为应用程序的连接库实现，另一部分在TCP／IP进程内实现。这两部分之间采用由操作系统模拟层提供的进程间通信机制(IPC)进行通信。当前的实现采用以下3种IPC方式：共享内存、消息传递和信号量。虽然这些IPC方式被操作系统支持，但它们并不需要操作系统底层支持，实际上是操作系统模拟层在模拟它们。</p>
<p align="center"><img style="letter-spacing: normal" border="0" hspace="0" alt="API实现" src="http://image.mcuol.com/News/090206100953295.jpg" width="473" height="266" /></p>
<p>　　<strong>结 语</strong></p>
<p>　　基于实时内核eCos，在嵌入式系统中实现了LwIP协议栈的移植与优化。移植优化后的LwIP栈做为一个网络模块运行，代码占用40 KB的ROM，实现了Ethernet／IP／TCP网络功能，并提供了模块API，与系统实现无缝连接。基于LwIP的网络应用任务与其他非网络应用任务在eGos实时内核管理下协调运行。进一步增强了协议栈的网络安全性与稳定性，并开发相应的的网络应用程序。&ldquo;eCos／LwIP协议栈&rdquo;架构有望应用在信息家电和网络化的仪器、仪表方面。</p>]]></description></item></channel></rss>