基于ARM和eCos的嵌入式WEB服务器设计

发布者:xrmilk最新更新时间:2009-02-06 来源: 单片机与嵌入式系统应用 关键字:ARM  WEB服务器TCP/IP  LwIP  eCos  LPC2210 手机看文章 扫描二维码
随时随地手机看文章

      引 言

  随着现代通信技术和网络技术的迅猛发展,以太网技术也越来越成熟,特别是基于TCP/IP通信协议的Web技术得到了广泛应用。我们可以用微控制器加以太网接口芯片,取代PC机进行现场控制,组成嵌入式Web Serv-er系统。现场传感器自动跟踪各监测点的信息,把检测到的数据存储在非易失性存储器中,并及时发布到互联网上;相关的工作人员就可以通过Web技术对设备进行远程控制、管理和维护,从浏览器上直接监控现场设备的运行,这样就大大提高了生产效率和管理水平。

  为了实现WEB服务器的功能,嵌入式操作系统和一个可实现的TCP/IP协议栈是必需的,因此对嵌入式处理器提出了更高的要求。与传统的8/16位单片机相比,ARM核处理器在运算速度、功耗和存储容量方面都有很大的优势,而且ARM核处理器可以很方便地实现嵌入式TCP/IP协议栈,所以ARM核处理器成为嵌入式Web服务器设备的首选处理器。系统的设计模型如图1所示。

  1 系统硬件设计

  ARM核处理器LPC2210基于支持实时仿真和嵌入跟踪的32/16位ARM7TDMI—S CPU。片内有16 KBSRAM,通过外部存储器接口配置成4组,每组的容量达16 MB。LPC2210采用144脚封装,功耗极低,具有多个32位定时器、8路10位ADC、PWM输出,最多可提供76个GPIO以及多达9个外部中断引脚;采用3级流水线技术,极大地提高了指令执行效率,通过可编程的片内锁相环(PLL)可实现最大60 MHz的CPU操作频率。

  LPC2210的EMC组合符合ARM公司的PL090标准,总线宽度可设置为8位、16位或32位,通常16位总线宽度的存储器具有较高的性价比。

  以Philips公司的ARM核处理器LPC2210为核心来实现嵌入式Web服务器;网络接口芯片采用Realtek公司的NE2000兼容芯片RTL8019AS,它内置了10BASE—T收发器,通过HR901170A器件接入以太网。硬件结构如图2所示。

 

  在图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可以用来引导程序的运行。

  LPC2210的大容量片上存储器为TCP/IP协议栈的实现和数据处理提供了足够的存储空间;利用LPC2210SPI接口扩展MMC/SD卡作为外部非易失性存储器,可以将ADC现场采集的数据、IP地址、网卡物理地址以及更新网页保存在里面,需要时还可随时更换MMc/SD卡。LPC2210具有ARM和Thumb指令集,采用流水线处理技术,能在指令执行期间预处理下一条指令,极大地提高了指令执行效率,为需要快速传输数据的网络应用提供了有效的支持。

  2 系统软件设计

  eCos(embedded Configurable operating system,嵌入式可配置操作系统)是一种针对16位、32位和64位处理器的可移植嵌入式实时操作系统。由于其源代码公开,因而越来越多的设计人员开始关注eCos操作系统。eCos最大的特点是模块化、内核可配置。最小版本的eCos只有几百字节,非常适合小型嵌入式系统的开发。与嵌入式Linux相比,eCos有配置灵活和节省资源的优势。它的其他优点是使用多任务抢占机制、具有最小的中断延迟、支持嵌入式系统所需的所有同步原语,并拥有灵活的调度策略和中断处理机制。因而eCos具有良好的实时性,与μClinux和μC/OS等操作系统相比,它更适用于处理实时信号的设备,如移动通信、WLAN等通信设备的开发。

  3 eCos的移植

  图3所示为eCos的移植流程。eCos的移植通过3个子模块来完成,即体系结构抽象层(Architeeture Hal)、变体抽象层(Variant Hal)和平台抽象层(Platform Hal)。对一个新的体系结构来说,系统结构抽象层的建立相对来说比较困难。目前,eCos已经支持各种主流CPU,也就是说,eCos源码中包含了CPU的体系结构层和变体抽象层,所以移植工作主要集中在平台抽象层。

  RedBoot移植是平台抽象层移植的最好开始。RedBoot是位于硬件抽象层之上的命令行接口,并且包含GDB调试工具及其调试stub。一旦硬件抽象层移植到目标板中,RedBoot能将程序加载到目标板中,并且能在目标板上调试代码。

4 TCP/IP协议栈——LwIP的实现

  LwIP是瑞士计算机科学院Adam Dunkles等人开发的用于嵌入式系统的开放源代码TCP/IP协议栈。它既可以移植到操作系统上,也可以在无操作系统的情况下运行。LwIP实现的重点是,在保持TCP协议主要功能的基础上,减少对RAM的占用;一般只需要几十字节的RAM和40 KB左右的ROM就可以运行,这使得LwIP适合在中低端的嵌入式系统中应用。

  LwIP主要可以分为图4所示的几个层次。主要功能模块有:操作系统模拟层、网络接口函数、实现TCP/IP协议的各部分模块 (IP、UDP、TCP、IC—MP、ARP)、缓冲和存储管理子系统、校验和函数。

 

  LwIP API是一组应用程序接口,通过该接口程序员就可以使用LwIP所有的功能。另外,LwIP也为开发者提供了更加高级的BSD Socket APl,使其可以使用通用的Socket函数来编写网络通信软件。操作系统模拟层可以使LwIP能够使用操作系统提供的一些高级管理功能,例如信号量管理、消息队列管理、创建线程等。

  4.1 IP处理

  LwIP仅能实现IP层大部分基本功能。它虽然能够发送、接收以及转发信息包,但不能接收和发送IP分片包,也不能处理携带IP参数选项的信息包。不过对大多数的应用来说,这不会成为问题。

  ①接收信息包。对于到达的IP信息包,可由网络设备驱动调用ip_input()函数开始处理,并在这里完成对IP版本字段及包头长度的初始完整性检查,同时还要计算和验证包头校验和。

  ②发送信息包。外发的信息包由ip_output()函数处理,该函数使用ip_route()函数查找适当的网络接口来传送信息包。当外发的网络接口确定后,信息包传给以外发网络接口为参数的ip_output_if()函数。

  ③转发信息包。如果没有网络接口的地址与到达信息包的目标地址相同,信息包应被转发。这项工作由ip_ forward()函数完成。

  ④ICMP处理。ICMP处理相当简单。ip_input()函数收到的ICMP信息包被移交给icmp_input()函数,后者对ICMP包头解码,然后进行适当的动作。

  4.2 UDP处理

  UDP是被用来在不同进程问分解信息包的简单协议。每个UDP会话的状态保存在一个PCB结构体中。UDP PCB保存在一个链表中,当一个UDP数据包到达时对这个链表进行匹配检索。

  4.3 TCP处理

  TCP属于传输层协议,它为应用层提供了可靠的字节流服务。对它的描述要比对其他协议的描述复杂的多,其代码占了LwIP代码总量的50%。基本的TCP处理过程被分割为6个功能函数来实现,tcp_input()、tep_ process()及tcp_receive()函数与TCP输入有关,tcp_write()、tcp_enqueue()及tcp_output()则用于TCP输出。TCP的处理过程如图5所示。

 

  4.4 应用程序接口设计

  LwIP API专为LwIP设计,所以它可以充分利用LwIP的内部结构实现其设计目标。LwIP API与BSDAPI类似,但操作相对低级。API不需要在应用程序和协议栈之间复制数据,因为应用程序可以巧妙地直接处理内部缓冲区。另外,BSD Socket API易于理解,并且很多应用程序为它而写,所以LwIP保留一个BSD Socket兼容层是很有用的。

  鉴于TCP/IP协议栈的处理模式,APl分成两部分实现。如图6所示,一部分作为应用程序的连接库实现,另一部分在TCP/IP进程内实现。这两部分之间采用由操作系统模拟层提供的进程间通信机制(IPC)进行通信。当前的实现采用以下3种IPC方式:共享内存、消息传递和信号量。虽然这些IPC方式被操作系统支持,但它们并不需要操作系统底层支持,实际上是操作系统模拟层在模拟它们。

  结 语

  基于实时内核eCos,在嵌入式系统中实现了LwIP协议栈的移植与优化。移植优化后的LwIP栈做为一个网络模块运行,代码占用40 KB的ROM,实现了Ethernet/IP/TCP网络功能,并提供了模块API,与系统实现无缝连接。基于LwIP的网络应用任务与其他非网络应用任务在eGos实时内核管理下协调运行。进一步增强了协议栈的网络安全性与稳定性,并开发相应的的网络应用程序。“eCos/LwIP协议栈”架构有望应用在信息家电和网络化的仪器、仪表方面。

关键字:ARM  WEB服务器TCP/IP  LwIP  eCos  LPC2210 引用地址:基于ARM和eCos的嵌入式WEB服务器设计

上一篇:基于ARM和nRF24L01的无线数据传输系统
下一篇:嵌入式系统内存数据库引擎的研究与设计

推荐阅读最新更新时间:2024-05-02 20:45

嵌入式JavaPOS系统测试的设计与实现
0 引 言     随着嵌入式计算机应用技术的发展,嵌入式技术已经广泛应用到现代生活的方方面面。在零售系统方面,零售收款机是嵌入式应用的一个重要领域。目前,市场上的收款机大体上可分为三类:第一类是基于PC和DOS/Windows体系的,这类产品目前占市场绝大多数,属于高端产品,价格太高,适合大的商场和销售系统;第二类是基于单片机(51系列居多)的,基本上没有操作系统的支持,功能也较弱,主要用于餐饮娱乐,占据中低档市场;第三类是正在快速发展的基于嵌入式芯片和嵌入式操作系统的,价格较低,功能较强,适用于中高档市场,这类产品将是未来市场的主体。以上三类收款机的开发平台形形色色,基本上是每一款就是一种开发平台,没有统一的规范、开发和调
[嵌入式]
ARM的PWM定时器(S3C2440)
参考S3C2440的数据手册的第10章《PWM定时器》 概述 S3C2440A 有 5 个 16 位定时器。其中定时器 0、1、2 和 3 具有脉宽调制(PWM)功能。定时器 4 是一个无输出引脚的内部定时器。定时器 0 还包含用于大电流驱动的死区发生器。 S3C2440有两个8 位预分频器。定时器 0 和 1 共用一个 8 位预分频器,定时器 2、3 和 4 共用另外的 8 位预分频器。使得PCLK分频进入下一步操作。8 位预分频器由TCFG0寄存器设置。 每个定时器都有一个可以生成 5 种不同分频信号(1/2,1/4,1/8,1/16 和 TCLK)的时钟分频器。使得经过8 位预分频器的时钟再次分频。由TCFG1寄存器
[单片机]
<font color='red'>ARM</font>的PWM定时器(S3C2440)
ARM嵌入式系统开发之发送过程的实现
要通过网卡发送数据时,上层协议实体调用函数 hard_start_xmit() ,在我们的驱动程序中这个函数被映射成 DM9000_wait_to_send_packet() 函数,正如它名字中 wait 所表示的那样,这个函数只完成了等待发送的工作,实际的发送是调用 DM9000_hardware_send_packet() 函数完成的,这也是前面提到的 buffer 分配机制的一种体现。 在具体介绍这两个函数之前,有必要简单说一说 DM9000 芯片发送数据的工作原理。前面已经讲过,为了增加网络吞吐量 DM9000 芯片内部集成了 8K 的 buffer ,芯片对这些 buffer 采用了内存页面管理方式,每页 256
[嵌入式]
关于ARM汇编中字符串表达式及运算符总结
:LEN:X 返回字符串X的长度(字符数) :CHR:M 将0~255之间的整数转换为一个字符 :STR:X 将一个数字表达式或逻辑表达式转换为一个字符串.对于数字表达式,STR运算符将其转换为一个以十六进制组成的字符串;对于逻辑表达式,STR运算符将其转换为字符串T或F. X:LEFT:Y 返回某个字符串左端的一个子串.X为源字符串,Y表示返回的个数 X:RIGHT:Y 与LEFT对应 X:CC:Y 将Y连接到X的后面 :BASE:X 返回基于寄存器的表达式中寄存器的编号 :INDEX:X 返回基于寄存器的表达式中相对于其基址寄存器的偏移量 ?X 返回定义符号X的代码行所生成的可执行代码的字节数 :DEF:X 如
[单片机]
ZDNet:AMD不需要采用ARM架构
    导语:美国IT网站ZDNet今天撰文,对AMD是否应该采用ARM架构进行了分析,最后认为AMD完全不需要选择ARM架构。   以下为文章全文:   传言四起   最近有传言称,AMD将采用ARM的技术设计并出售一款处理器。这恐怕是AMD拓展智能手机市场最快、成本最低的方法了。但还有很多原因使得AMD仍有可能继续坚持x86架构,从而获得更为安全的地位。   传言始于一篇有关AMD招募Android工程师的报道。随后,AMD又于上周宣布,ARM高管将于今年6月在该公司的首届Fusion开发者峰会上作主题演讲。最后,在上周的财报电话会议上,ARM高管证实,AMD长期以来都在“追求”该公司。“AMD是一家非常适合采用ARM技术的企业
[手机便携]
基于ARM的旋转编码器采集模块设计
  随着工业生产自动化水平的提高,各种传感器的应用也越来越多。旋转编码器作为速度和位移反馈的传感器,主要应用于数控机床、高精度的闭环调速系统、伺服电动机、异步电动机、步进电动机、电梯曳引机、电梯门机乃至机械轴等需要对运动速度和位移信息反馈的自动化控制场合,以保证机械的高精度稳定运转,进而提高生产效率和保障安全运营。   本文针对旋转编码器在工业现场中的应用,基于LPCI768硬件平台,设计出一种旋转编码器采集模块,该模块内部具有高精度分析、整形、解码电路,可同时对2路编码器输入信号进行分析、解码。经过处理的旋转信号通过高性能处理器进行采集及数字滤波。旋转编码器同时还对2路编码器信号进行角速度计算,最终模块通过CAN总线将采集到
[单片机]
基于<font color='red'>ARM</font>的旋转编码器采集模块设计
常见的五大ARM存储器之一:协处理器CP15
  ARM存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要。ARM存储器系统可以使用简单的平板式地址映射机制(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地址),也可以使用其他技术提供功能更为强大的存储系统。比如:   · 系统可能提供多种类型的存储器件,如FLASH、ROM、SRAM等;   · Caches技术;   · 写缓存技术(write buffers);   · 虚拟内存和I/O地址映射技术。   大多数的系统通过下面的方法之一实现对复杂存储系统的管理。   · 使能Cache,缩小处理器和存储系统速度差别,从而提高系统的整体性能。   · 使用内存映射技术实现虚拟空间
[单片机]
常见的五大<font color='red'>ARM</font>存储器之一:协处理器CP15
什么是ARM中的SP(堆栈)和LR?
问题描述 我一遍又一遍地阅读定义,我还没有得到什么是ARM中的SP和LR?我明白PC(它显示下一个指令的地址),SP和LR可能是相似的,但我只是不明白它是什么。你可以帮我吗? 编辑:如果你可以用例子说明一下,那会很棒。 编辑:终于弄清楚LR是什么,还没有得到什么SP。 最佳解决方案 LR是用于保存函数调用的返回地址的 link register 。 SP是堆栈指针。堆栈通常用于在函数调用中保存”automatic”变量和上下文/参数。从概念上讲,您可以将”stack”视为您”pile”您的数据的地方。您将”stacking”保留在一个数据之上,堆栈指针告诉您”high”的数据是”stack”。您可以从”stack”的”to
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved