迅维网

标题: 【NUCLEO-F412ZG试用体验】移植LWIP,进行ping实现 [打印本页]

作者: バ幸福De右岸    时间: 2016-12-13 15:39
标题: 【NUCLEO-F412ZG试用体验】移植LWIP,进行ping实现
不知不觉都试用了这么久,发到了第六弹,只可惜发的质量都不怎么样,基本都是贴代码。不管那么多了,这次是移植了LWIP,简单测试了一下ping,最长时间7ms,最短时间4ms,时间是有那么点长哈,之前在F407上外接phy的网返时间基本都是1ms,这差别是有那么点大。不管时间长短,功能是实现了。


                               
登录/注册后看高清大图


在工程中添加lwip库,本人用的是IAR,工程目录如下。keil能用,不过还是习惯用IAR,后续打算迁移到eclipse上,毕竟keil和IAR目前用的都是pojie版的,对于一个爱折腾的人来说,还是要折腾一下,毕竟之前也用过eclipse玩过java,用着还是不错的。闲话少说,网络相关的代码都在lwip这个group里。

                               
登录/注册后看高清大图

首先是介绍初始化代码,又是粘贴party,哎,没办法。理论性的东西自己还在摸索。

[color=rgb(51, 102, 153) !important]复制代码

接下来是网络任务函数,net_task,调用 sch_add(net_task, 0, 250)把任务添加到调度器中,250ms循环一下,这样就OK了,用命令行ping一下,大功告成。其中net_task主要是定时更新lwip相关的时钟。其代码如下
[color=rgb(51, 102, 153) !important]复制代码


呵呵,太陋了,是不是有点敷衍。移植lwip主要是要实现底层的接口,网卡初始化,数据包收发,都在ethernetif.c这个文件中实现。主要是处理数据包的收发。关于这几个函数的具体实现,请参看附件。移植这事很多帖子都讲烂了,这里说说自己在移植过程中的一点收获。最重要的接口移植都在ethernetif.c这个文件中,此外移植的过程中有一些小细节,就是都文件的加载。也许大神看着会觉得这个很简单,但是就是这个头文件的路径问题,在我第一次移植的过程中成了拦路虎。主要是lwip头文件包含使用了相对路径。所以包含路径时一定要包含相对路径的最顶层路径。一般都要包含以lwip为名字的文件夹所在路径。例如包含ipv4相关api的头文件,其路径如下,则应该包含$PROJ_DIR$\..\lwip\include\ipv4.

                               
登录/注册后看高清大图

下面是全部lwip应该包含的头文件,这里是IAR工程的路径包含。

[color=rgb(51, 102, 153) !important]复制代码


工程建立相关的内存介绍完了,接下来介绍一下tcp,udp相关的应用。主要就是通过TCP和udp跟电脑之间进行数据收发。这里仅仅介绍一下tcp server,tcp client和udp基本都差不多。
tcp server需要先于tcp client建立,待server建立完成后,client才能连接server,并进行数据通信。首先进行初始化

[color=rgb(51, 102, 153) !important]复制代码

tcpserver_accept函数内容如下

[color=rgb(51, 102, 153) !important]复制代码

下面看看数据接收部分,主要就是把接收到的数据回传给客户端。

[color=rgb(51, 102, 153) !important]复制代码

下面是数据收发,但是有个问题,字符串中间不能有标点,现在还不知道原因,各位大神如果知道原因给点指点,但是这个我用F407解析命令时倒没有这个问题,中间有空格也没问题。

                               
登录/注册后看高清大图











欢迎光临 迅维网 (https://www.chinafix.com/) Powered by Discuz! X3.4