ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)
前面的话:自从接触网络模块,到现在有一阵子时间了,未来必定是网络的世界。学一些网络方面的知识是有必要的。我们ALINTEK 推出的ENC28J60网络模块块作为入门还是不错的。详细见此贴:
http://www.openedv.com/posts/list/9355.htm。时间对于一个开发人员是很宝贵的,如何快速应用是我们做技术的,都想要的。废话不多说了。因为主要集中在怎么应用所以有些细节可能不是正确的,
这个需要大家去质疑,去验证。
一、LWIP的应用
1.什么是LWIP?
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。
2.哪里可以下载源码?
在这里可以下载到最新的应用:http://savannah.nongnu.org/projects/lwip/
3.更多详细介绍?
在这里有详细的:http://lwip.wikia.com/wiki/LwIP_Wiki
4.如何移植?
LWIP 有三种应用模式 RAW API,Netconn API,Socket API.这里我们主要简单讲解如何移植RAW API。移植LWIP的过程也是一个了解LWIP大概结构的过程。
当你把所有的错误,和警告干掉的后就差不多了,呵呵。
①首先到官网上下载好源码和应用例程。
<ignore_js_op>
lwip-1.4.1中src文件夹下的源码文件结构:
<ignore_js_op>
②按以下这个目录结构将源码加入到工程
<ignore_js_op>
前面三个就不用解释了,看看上面的源码文档结构就知道了,LWIP_ARCH文件夹是什么东东呢?它是一个操作系统与处理器平台配置有关的代码,你要问我这个东西哪里来的,
嘿嘿,从ST的官方固件库中偷来滴。里面包含了大小端的配置,类型定义,和操作系统有关的部分,不过这里没有用到操作系统,所以这个sys_arch.c文件需要改装下。
LWIP_APP顾名思义就是LWIP的应用程序了,这里面编写了,TCP服务器,TCP客户端,UDP服务器,UDP客户端,Webserver(应用程序和服务器的接口技术(CGI),动态网页技术(SSI),和ajax技术,做异步提交,获取数据)。的方法和例程。接下来请看我如何修改移植。
③底层驱动的移植。
在LWIP-NETIF文件加下,我们需要对ethernetif.c文件修改。该文件是一个底层网络接口框架。LWIP的作者已经为我们搭好了框架,其中有些代码是伪代码,我们只需要去实现就好了。
A.修改底层硬件初始化函数low_level_init(struct netif *netif)函数,在函数中设置好,网络的MAC地址,最大传输单元,然后再初始化ENC28J60,如果初始化失败则返回错误给上层调用的函数。
<ignore_js_op>
B.修改底层发送包的函数low_level_output(struct netif *netif, struct pbuf *p),在这个函数中将LWIP数据包中的缓冲区pbuf 复制到待发送的缓冲区lwip_buf中来,
然后利用ENC28J60的发包函数发出去。
<ignore_js_op>
C.修改底层接收包的函数low_level_input(struct netif *netif),这个过程就是把接收缓冲区lwip_buf中的数据复制到LWIP的pbuf中,如果收到了包, 我们就可以在lwip_buf中读取数据了。注:lwip_buf作为接收和发送数据的缓冲。
<ignore_js_op>
移植完这三个函数就差不多啦,简单吧,嘿嘿。
④在主函数main.c初始化LWIP。
lwip_init()是用来LWIP初始化的,但是其中的netif_init()初始化的是回环网络接口,我们想把数据发出去必须初始化ENC28J60。所以我们先调用lwip_init()来初始化LWIP的各个模块。
再利用netif_add函数添加网络接口就可以。这个函数会调用底层的 low_level_init函数,如果返回值为空,则说明ENC28J60初始化失败了。然后再注册,建立一下这个网络接口就OK了。
<ignore_js_op>
注意到上面的有一个函数 init_lwip_timer(); 这个是什么呢,这个是用来初始化LWIP的定时器,用来计时用的,相当于LWIP的心脏。
⑤在主函数main.c中编写轮训协议栈函数
LWIP需要周期性的处理一些函数,这些函数是是根据你使能的协议和功能模块来调用的。比如你要用到TCP协议,你就必须周期性的调用tcp_tmr()。
注意到有个timer_expired函数,这个函数就在sys_arch.c文件中,这个文件本来与操作系统有关,现在改装了。用来初始化LWIP的时钟,提供超时检测的功能,相当于定时器了。
<ignore_js_op>
⑥配置LWIP
LWIP有一个标准配置文件在opt.h中,这个头文件又包含了lwipopts.h,通常我们配置LWIP是通过这个文件来配置的。
这个头文件可以覆盖opt.h中任何你需要的配置。这样做的好处,是源码更加健壮了,而且能够防止我们错误的配置,而改不回去了。
有几个配置是很重要的,NO_SYS 1-----无操作系统 MEM_ALIGNMENT 4 --- 分配内存是四字节对齐,这个很重要,曾经莫名其妙的出现hardfault
TCP_MSS 1460 --TCP最大段大小,这个是极限值了,我们可以传更多的数据。
<ignore_js_op>
⑦在main函数中加入LWIP_Polling(),基本上就移植完毕了。这时可以使用ping 命令。
比如我设置的IP地址为19.168.1.10则,通过cmd命令进入dos环境。通过 ping 192.168.1.10 -t 就可以不断查询网络是否联通了。
| 5.如何应用? RAW API中文译为原始API可以说比较接近底层了,玩过socket编程的人都知道,socket编程用起来,是比较简单了,不像RAW API的模式,用起来比较麻烦,需要应用者对TCP,UDP这些协议,有一个 稍微深入的了解。这里我推荐一款抓包软件Wireshark。这个软件可以帮助你分析这些协议是怎么工作的。不过在用这个软件的,分析协议的时候最好不要连接到外网,会干扰的哦。 ①TCP服务器和客户端 B.TCP服务器模式 tcp_accept(tcp_server_pcb,tcp_server_accept); //指定监听状态的连接联通之后将要调用的回调函数 C.TCP客户端模式 ②UDP的服务器和客户端 A.什么是CGI? B.CGI函数介绍 1.注册URL路径和对应的函数 2.设置请求的URL的路径和CGI函数 3.编写CGI函数 } D.什么是SSI? E.SSI函数简介 F.SSI应用举例 2.编写SSI处理函数 3.再编写一个返回URL为/index.shtml的文件的CGI函数就可以了。在页面中就可以看到alientek内容了。 最后重点介绍下ajax做异步提交,更新数据: 二,添加/response.ssi文件 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-
建立连接 .jpg (65.03 KB, 下载次数: 1761)
<ignore_js_op>
-
发送数据包.jpg (21.27 KB, 下载次数: 1298)
<ignore_js_op>
-
服务器关闭连接.jpg (31.6 KB, 下载次数: 1103)
<ignore_js_op>

-
20.68 KB, 下载次数: 4854
<ignore_js_op>

-
53.25 KB, 下载次数: 4647
<ignore_js_op>

-
494.66 KB, 下载次数: 7081
<ignore_js_op>

-
转载自:http://www.openedv.com/forum.php?mod=viewthread&tid=25178&extra=&page=1
ALIENTEK 战舰ENC28J60 LWIP和UIP补充例程(LWIP WEB有惊喜)的更多相关文章
- 学习随笔:Django 补充及常见Web攻击 和 ueditor
判断用户是否登录 <!-- xxx.html --> {% if request.user.is_authenticated %} django中的request对象详解 填错表格返回上次 ...
- 开始逐步补充下相关Web知识,很多年没搞了....
<script type="text/javascript"> $(function(){ ShowProduct(); $("#ShowUserInfo&q ...
- 移植LWIP(ENC28J60)
上图就是整个移植的基本思路,非常清晰的三个层次.其实想想,本质上就是收发数据,只是LWIP协议通过对数据的封装可以实现网络传输.从图中我们就可以看到这里首先需要ENC28J60的驱动,这个驱动需 ...
- ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- 第39章 ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- ENC28J60学习笔记——第1部分
1前言 嵌入式以太网开发,可以分为两个部分,一个是以太网收发芯片的使用,一个是嵌入式以太网协议栈的实现.以太网收发芯片的使用要比串口收发芯片的使用复杂的多,市面上流通比较广泛的以太网收发芯片种类还不少 ...
- 第39章 ETH—Lwip以太网通信—零死角玩转STM32-F429系列
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
- LWIP互联网资料汇总
本文主要搜集了下互联网上关于LWIP的资料和教程 欢迎补充 第一部分:移植 LWIP在UCOS上移植 LWIP 在STM32上移植 http://www.docin.com/p-459242028 ...
- 基于 LWIP 建立 TCP Server 与主机通信实验
LWIP 版本:2.0.3 上一篇文章是写如何将 LWIP 移植到板子上,今天晚上记录基于 LWIP 实现与主机的网络通信. 先是打开了原子的实验例程,大概浏览了一遍,觉得 TCP 网络网络通信也就是 ...
随机推荐
- BZOJ 2631 tree | Luogu P1501 [国家集训队]Tree II (LCT 多重标记下放)
链接:https://www.luogu.org/problemnew/show/P1501 题面: 题目描述 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: ...
- 小记--------spark的宽依赖与窄依赖分析
窄依赖: Narrow Dependency : 一个RDD对它的父RDD,只有简单的一对一的依赖关系.RDD的每个partition仅仅依赖于父RDD中的一个partition,父RDD和子RDD的 ...
- MySQL中的数据类型 [数值型、字符串型、时间日期型]
MySQL中的数据类型 [数值型.字符串型.时间日期型] MySQL中各数据类型 1. 数值类型(整型) 类型 数据大小 类型 (无符号:unsigned) 数据大小 存储空间 tinyint -12 ...
- python+pycharm+PyQt5 图形化界面安装教程
python图形化界面安装教程 配置环境变量 主目录 pip所在目录,及script目录 更新pip(可选) python -m pip install --upgrade pip ps:更新出错一般 ...
- PAT A1019 General Palindromic Number (20 分)
AC代码 #include <cstdio> const int max_n = 1000; long long ans[max_n]; int num = 0; void change( ...
- VC/MFC 进程间通信方法总结
摘 要 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程 / 多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的. M ...
- matplotlib库绘制散点图
假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温随时间(天)变化的某种规律? a = [11,17,16,11,12,11,12,6,6 ...
- PHP生成中文验证码并检测对错实例
PHP生成中文验证码并检测对错实例,中文验证码的例子还是比较少的,今天给大家分享一下,支持自定义中文.字体.背景色等 生成验证码,注意font字体路径要对,否则显示图片不存在 session_star ...
- 基于keepalived搭建mysql双主高可用
目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...
- Sql server 2012 企业中文版安装图文教程
https://blog.csdn.net/qq_30754565/article/details/82421542