嵌入式LWIP网络客户端设计.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

??

?

??

嵌入式LWIP网络客户端设计

?

??

?

?

?

?

?

?

?

???

?

?

?

?

?

胡晓玲余世欣

摘要:嵌入式网络客户端需要移植性高、占用资源小的协议栈,设计了基于轻量级协议栈LWIP的网络客户端。采用STM32处理器作为主控芯片,通过以太网控制器EN28J60和RJ45接口连接互联网,移植了操作系统uC/OS-II和轻量级协议栈LWIP,最后对客户端与主机进行联机测试。结果表明:通过主机ping32字节的数据,4个包所用的时间最长为5ms,最短为3ms,而TTL值均为255;数据收发正确,错误率为0%。说明轻量级协议栈LWIP不仅占用资源小,而且满足嵌入式系统应用的可靠性要求。

关键词:嵌入式;轻量级协议栈;STM32;移植;操作系统

DOI:10.3969/i.issn.1005-5517.2016.1.010

引言

嵌入式技术的兴起使得传统的基于PC机的互联网技术优势不再,嵌入式网络客户端与服务端技术成为热点,而该技术需要移植性高、占用资源小的协议栈,轻量级TCP/IP协议栈LWIP(lightweightInternetprotocol)比较适合嵌入式设备中存储容量有限的情况,而且能实现TCP/IP协议栈的基木功能,不影响设备的网络互联与传输服务[1]。轻量级网络协议LWIP依附的硬件操作系统有RT_Thread[2-3]和uC/OS-11[4-5],鉴于uC/OS-II是一款应用较为广泛、技术较成熟的操作系统,本文采用uC/OS-II操作系统设计网络客户端。实验结果表明:ping32字节的数据,其收发正确,错误率为0%。

1系统硬件

如图1所示:硬件采用STM32处理器作为主控芯片,通过以太网控制器EN28J60和RJ45接口连接互联网,而且为了进行功能扩展和试验验证,主控芯片也可以由串口与计算机进行数据互传。

STM32F107是主控芯片,它不仅具有USBOTG和CAN2.OB接口,而且片上集成了以太网10/100MAC模块。该模块支持Mll和RMII两种模式,所以,主控制器只需外接一个物理层PHY芯片就可以实现一个完整的以太网收发器;在时钟信号方面,只需用一个25MHz的晶振就可以给整个主控制器提供时钟、而主控制器还能输出一个25MHz或50MHz的时钟,交外部物理层PHY层芯片使用,这样可以为系统节省一个附加晶振[6]。

以太网控制器是ENC28J60,它符合IEEE802.3协议的全部规范、可以利用健全的包过滤机制对输入的数据包进行限制。集成了DMA模块,支持数据的高速吞吐率,并结合硬件实现IP地址校验和计算。它和主控器的通信依赖于两个中断管脚和SPI总线实现,数据传输速率高达10MB/s,为了观察数据传输的活动状态,可以在两个专用的引脚接上发光二极管[7]。

2操作系统移植

操作系统uC/OS-II移植涉及到的主要内容是[4-5][8]:修改并整合与处理器相关的源文件,包含os_cpu_c.c,os_cpu_a.s,os_cpu.h三个文件。其中os_cpu.h文件负责定义与编译器相关的数据类型、堆栈类型,另外还有几个宏定义和函数声明,在进行移植工作时,由于对一个相同的数据类型,不同的编译器所支持的数据长度却不相同,所以需要修改原来的数据类型。os_cpu_a.s文件主要负责定义与处理器相关的任务切换函数,实现任务上下文的切换以满足任务调度时的需要,另外还定义了时钟中断处理函数和进退临界区宏指令。os_cpu_c.c文件主要负责定义堆栈的初始化函数,以利于操作系统在进行任务切换或中断时对相关操作数据进行堆栈保护,另外还定义了相关的HOOK函数。

首先修改。s_cp_u_a.asm文件,将原来的RSEGCODE:CODE:NOROOT(2)改成:

AREA|.text|,CODE,READONLY,ALIGN=2;(其中AREA|.text|代表选择段|.text|,CODE指明代码段,READONLY代表默认情况:只读。由于当ALIGN=n,则字节数为2^n,故此处ALIGN=2表示对齐4字节。)

THUMB;Thumb指令集

REQUIRE8:说明当前文件是八字节对齐堆栈需求

PRESERVE8:说明当前文件属于八字节对齐堆栈

修改。s_cpu.h文件,注释掉下面的这三个函数:VoidOS_CPU_SysTickHandler(void);VoidOS_CPU_SysTicklnit(void);UINT320S_CPU_SysTickClkFreq(void);

修改os_cpu_c.c又件,注释掉以下定义和函数:

#defineOS_CPU_CM3_NVIC_ST_CTRL(*((volatileINT32U*)OxEOO

文档评论(0)

158****0330 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档