LWIP移植说明及程序分析.docxVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LWIP移植说明及程序分析新哥NUAA(技术交流279141909) 2015年8月说在前面LWIP,这个轻量级的TCP/IP协议,说来惭愧,把我虐得够惨的,今天算是第三次接触lwip了,第一次是认真看了别人移植可以ping通的程序,后来我也参照野火的以太网文档一步步的移植了一次,但不管怎么调都有bug!bug!bug!一气之下就不想再碰了!!这两天想想又很不甘心,于是乎,我又开始移植起来~~~移植要点这次也首先是基于无操作系统的移植,在后期再移植基于ucou2的网络协议。那么在这里我就首先带领那些炙热于lwip协议但又因网上的移植资料残缺不全而苦无移植良策的同志们来一次彻底的lwip移植吧(好长,说的我好累)!本文档是基于stm32f103+ENC28J06的移植(如果是stm32f107就不是这种方法了,107处理器自带MAC控制器,只需要外接一个PHY控制器和以太网变压器就可以实现以太网功能。)我发现上一次移植是照葫芦画瓢,完全没有理解移植的要点,在这里我简单的总结一下移植要点和出现bug的原因吧。移植要点1:复制 opt.h文件到新建的lwipopt.h文件,并按照处理器资源与实际需求修改。(虽然lwipopt.h是有opt.h文件修改得到的,但opt.h文件仍然有用,里面涉及到的条件编译在协议的正常运行中是必要的,在keil4中要同样包含在路径中。换句话说,只要在其他文件里没有对opt.h中条件编译的对象进行重定义,那么就要以opt.h中的条件编译为准,如果读者删掉opt.h后可以看到很多bug)。移植要点二:编写enc28j60的驱动文件(含头文件)。(函数模块包括读控制寄存器、向以太网控制器写入命令、读取buff的数据、向buffer写入数据、选定将要操作的bank、读取控制寄存器的内容、写入数据到控制寄存器、向PHY写入控制参数、初始化以太网控制器、发送数据包函数、接收数据包函数)。以上括号中的函数可以查看enc28j60的datasheet自己写,也可以网上下载借鉴别人写好的。移植要点三:编写网络处理函数netconfig.c(与对应的netconfig.h)。主要是初始化lwip协议栈、以及做一些系统时钟中断等处理。这一句将enc28j6与lwip连接起来:netif_add(enc28j60, ipaddr, netmask, gw, NULL, ethernetif_init, ethernet_input);ethernetif_init, ethernet_input是lwip协议中neif与外设接口的函数。移植要点四:修改路径为\LWIP\lwip-1.3.2\lwip-1.3.2\src\netif中ethernetif.c文件。原协议栈中ethernetif.c只提供了一些子函数的模板,要实现通信功能还要根据网卡(enc28j60)进一步修改。需修改的子函数有:网卡初始化函数(low_level_init)、底层发送数据函数(low_level_output)、底层接收数据函数(low_level_input)、数据输入处理函数(ethernetif_input)。对以上四个要点进行正确的配置后,就完成了移植步骤的一大半了。但移植的最大问题往往不是出在这儿。往往是读者对keil的不熟悉,比方说头文件路径是不是正确的包含了,这往往是出现bug的根本原因所在。移植过程好了,说完以上要注意的要点后,其实我们对lwip的移植过程也有一个大体的了解。那接下来我们就真正手把手去移植lwip吧,在移植的过程中呢,带读者简要分析一下程序,就当做学习一下嵌入式及编程咯。Step1:在移植的时候,我们也常常需要利用contrib-1.3.0.zip 中的文件。解压后,在\contrib-1.3.2_\contrib\ports 目录下有一些针对特定平台移植时使用的文件,选择进入其中一个目录,如\contrib-1.3.0_\contrib\ports old\6502\include\arch。我们需要用到的是cc.h、perf.h(不需修改)和sys_arch.h (可以暂不移植,根据操作系统而定)文件,通常把它复制出来存放到自己工程中的arch 文件夹中。cc.h 包含了LwIP 对于基本数据类型的定义。perf.h文件是和系统统计和测量有关的头文件,sys_arch.h 定义了与系统有关的信号量、邮箱及线程(这里是基于无操作系统的移植暂时不需要对其进行更改)。其中cc.h要根据编译器平台与处理器平台等进行修改。还有一个lwipopt.h文件也要根据\LWIP\lwip-1.3.2\lwip-1.3.2\src\include\lwip中的opt.h文件进行修改。(其实lwiopts.

文档评论(0)

rovend + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档