在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例Clojure → 野火LWIP开发实战指南

野火LWIP开发实战指南

Clojure

下载此实例
  • 开发语言:Others
  • 实例大小:11.61M
  • 下载次数:29
  • 浏览次数:122
  • 发布时间:2022-01-19
  • 实例类别:Clojure
  • 发 布 人:ak_240
  • 文件格式:.pdf
  • 所需积分:2
 相关标签: LWIP STM32

实例介绍

【实例简介】野火LWIP开发实战指南
【实例截图】

from clipboard


【核心代码】
Contents
关于本项目. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
关于野火 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
开源共享,共同进步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
联系方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
TODO 和悬赏任务 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
第 1 章 网络协议简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 常用网络协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 网络协议的分层模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 协议层报文间的封装与拆封 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
第 2 章 LwIP 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1 LwIP 的优缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2 LwIP 的文件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 如何获取 LwIP 源码文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 LwIP 文件说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 查看 LwIP 的说明文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4 使用 vscode 查看源码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.1 查看文件中的符号列表(函数列表) . . . . . . . . . . . . . . . . . . . . . 26
2.4.2 函数定义跳转 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5 LwIP 源码里的 example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.6 LwIP 的三种编程接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.1 RAW/Callback API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.2 NETCONN API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.6.3 SOCKET API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
第 3 章 开发平台介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1 以太网简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.1 PHY 层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.2 MAC 子层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
论坛:https://www.firebbs.cn i 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
3.2 STM32 的 ETH 外设 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.3 MII 和 RMII 接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.4 PHY:LAN8720A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.5 硬件设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.6 软件设计 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.1 获取 STM32 的裸机工程模板 . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.2 添加 bsp_eth.c 与 bsp_eth.h . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.6.3 修改 stm32f4xx_hal_conf.h 文件 . . . . . . . . . . . . . . . . . . . . . . . . 58
第 4 章 LwIP 的网络接口管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.1 netif 结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2 netif 使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.3 与 netif 相关的底层函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4 ethernetif.c 文件内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.1 ethernetif 数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.2 ethernetif_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.4.3 low_level_init() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
第 5 章 LwIP 的内存管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1 几种内存分配策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1.1 固定大小的内存块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.1.2 可变长度分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.2 动态内存池(POOL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.1 内存池的预处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.2.2 内存池的初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.2.3 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.2.4 内存释放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.3 动态内存堆 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.3.1 内存堆的组织结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5.3.2 内存堆初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.3.3 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.3.4 内存释放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.4 使用 C 库的 malloc 和 free 来管理内存 . . . . . . . . . . . . . . . . . . . . . . . . . 115
论坛:https://www.firebbs.cn ii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
5.5 LwIP 中的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
第 6 章 网络数据包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1 TCP/IP 协议的分层思想 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.2 LwIP 的线程模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.3 pbuf 结构体说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.4 pbuf 的类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.4.1 PBUF_RAM 类型的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.4.2 PBUF_POOL 类型的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
6.4.3 PBUF_ROM 和 PBUF_REF 类型 pbuf . . . . . . . . . . . . . . . . . . . . . 128
6.5 pbuf_alloc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.6 pbuf_free() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.7 其它 pbuf 操作函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.1 pbuf_realloc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.2 pbuf_header() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.7.3 pbuf_take() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
6.8 网卡中使用的 pbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.8.1 low_level_output() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.8.2 low_level_input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.8.3 ethernetif_input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
第 7 章 无操作系统移植 LwIP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.1 将 LwIP 添加到裸机工程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
7.2 移植头文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.3 移植网卡驱动 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
7.4 LwIP 时基 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
7.5 协议栈初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
7.6 获取数据包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
7.6.1 查询方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
7.6.2 ping 命令详解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
7.6.3 中断方式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
第 8 章 有操作系统移植 LwIP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.1 LwIP 中添加操作系统 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
论坛:https://www.firebbs.cn iii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
8.1.1 拷贝 FreeRTOS 源码到工程文件夹 . . . . . . . . . . . . . . . . . . . . . . . 194
8.1.2 添加 FreeRTOS 源码到工程组文件夹 . . . . . . . . . . . . . . . . . . . . . 195
8.1.3 指定 FreeRTOS 头文件的路径 . . . . . . . . . . . . . . . . . . . . . . . . . 197
8.1.4 修改 stm32f4xx_it.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
8.2 lwipopts.h 文件需要加入的配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.3 sys_arch.c/h 文件的编写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
8.4 网卡底层的编写 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
8.5 协议栈初始化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.6 移植后使用 ping 测试基本响应 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
第 9 章 LwIP 一探究竟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.1 网卡接收数据的流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
9.2 内核超时处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
9.2.1 sys_timeo 结构体与超时链表 . . . . . . . . . . . . . . . . . . . . . . . . . . 236
9.2.2 注册超时事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.2.3 超时检查 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.3 tcpip_thread 线程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
9.4 LwIP 中的消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.4.1 消息结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.4.2 数据包消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.4.3 API 消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
9.5 揭开 LwIP 神秘的面纱 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
第 10 章 ARP 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.1 链路层概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.2 MAC 地址的基本概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.3 初识 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
10.4 以太网帧结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
10.5 IP 地址映射为物理地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
10.6 ARP 缓存表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
10.7 ARP 缓存表的超时处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
10.8 ARP 报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
10.9 发送 ARP 请求包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
论坛:https://www.firebbs.cn iv 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
10.10 数据包接收流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.10.1 以太网之数据包接收 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.10.2 ARP 数据包处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
10.10.3 更新 ARP 缓存表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
10.11 数据包发送流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.11.1 etharp_output() 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.11.2 etharp_output_to_arp_index() 函数 . . . . . . . . . . . . . . . . . . . . . . . . 298
10.11.3 etharp_query() 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
第 11 章 IP 协议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
11.1 IP 地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
11.1.1 概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
11.1.2 IP 地址编址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
11.1.3 特殊 IP 地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
11.2 局域网和广域网的概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
11.2.1 什么是局域网 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
11.2.2 什么是广域网 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
11.3 网络地址转换(NAT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
11.4 IP 数据报 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
11.5 IP 数据报的数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
11.6 IP 数据报分片 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
11.7 IP 数据报发送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
11.8 IP 数据报接收 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
第 12 章 网际控制报文协议 ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
12.1 ICMP 功能简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
12.2 ICMP 报文结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
12.3 ICMP 报文类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.3.1 ICMP 差错报告报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
12.3.2 ICMP 查询报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
12.4 LwIP 中的 ICMP 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
12.4.1 ICMP 报文数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
12.4.2 发送 ICMP 差错报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
论坛:https://www.firebbs.cn v 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
12.4.3 处理 ICMP 报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
第 13 章 TCP 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.1 TCP 服务简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.2 TCP 的特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.2.1 连接机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.2.2 确认与重传 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.2.3 缓冲机制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.2.4 全双工通信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
13.2.5 流量控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
13.2.6 差错控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
13.2.7 拥塞控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
13.3 端口号的概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
13.4 TCP 报文段结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
13.4.1 TCP 报文段的封装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
13.4.2 TCP 报文段格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
13.5 TCP 连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
13.5.1 “三次握手”建立连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
13.5.2 “四次挥手”终止连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
13.6 TCP 状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
13.6.1 LwIP 中定义的 TCP 状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
13.6.2 TCP 状态转移 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
13.7 TCP 中的数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
13.8 窗口的概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
13.8.1 接收窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
13.8.2 发送窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
13.9 TCP 报文段处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
13.9.1 报文段缓冲队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
13.9.2 TCP 报文段发送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
13.9.3 TCP 报文段接收 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
第 14 章 UDP 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
14.1 UDP 协议简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
论坛:https://www.firebbs.cn vi 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
14.2 UDP 常用端口号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
14.3 UDP 报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
14.4 UDP 报文的数据结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
14.4.1 UDP 报文首部结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
14.4.2 UDP 控制块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
14.5 UDP 报文发送 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
14.6 UDP 报文接收 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
第 15 章 使用 NETCONN 接口编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
15.1 netbuf 结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
15.2 netbuf 相关函数说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
15.2.1 netbuf_new() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
15.2.2 netbuf_delete() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
15.2.3 netbuf_alloc() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
15.2.4 netbuf_free() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
15.2.5 netbuf_ref() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
15.2.6 netbuf_chain() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
15.2.7 netbuf_data() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
15.2.8 netbuf_next() 与 netbuf_first() . . . . . . . . . . . . . . . . . . . . . . . . . . 449
15.2.9 netbuf_copy() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
15.2.10 netbuf_take() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
15.2.11 其他操作 netbuf 的宏定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
15.3 netconn 结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
15.4 netconn 函数接口说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
15.4.1 netconn_new() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
15.4.2 netconn_delete() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
15.4.3 netconn_getaddr() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
15.4.4 netconn_bind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
15.4.5 netconn_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
15.4.6 netconn_disconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
15.4.7 netconn_listen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
15.4.8 netconn_accept() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
论坛:https://www.firebbs.cn vii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
15.4.9 netconn_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
15.4.10 netconn_send() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
15.4.11 netconn_sendto() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
15.4.12 netconn_write() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
15.4.13 netconn_close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
15.5 实验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
15.5.1 TCP Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
15.5.2 TCP Client 实验现象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
15.5.3 TCP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
15.5.4 TCP Server 实验现象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
15.5.5 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
15.5.6 UDP 实验现象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
第 16 章 使用 Socket 接口编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
16.1 什么是 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
16.2 LwIP 中的 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
16.3 Socket API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
16.3.1 socket() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
16.3.2 bind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
16.3.3 connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
16.3.4 listen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
16.3.5 accept() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
16.3.6 read()、recv()、recvfrom() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
16.3.7 sendto() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
16.3.8 send() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
16.3.9 write() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
16.3.10 close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
16.3.11 ioctl()、ioctlsocket() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
16.3.12 setsockopt() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
16.3.13 getsockopt() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
16.4 实验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
16.4.1 TCP Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
论坛:https://www.firebbs.cn viii 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
16.4.2 TCP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
16.4.3 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
第 17 章 使用 RAW API 接口编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
17.1 RAW API 的 UDP 编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
17.1.1 新建控制块 udp_new() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
17.1.2 绑定控制块 udp_bind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
17.1.3 建立会话 udp_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
17.1.4 断开会话 udp_disconnect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
17.1.5 接收数据 udp_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
17.1.6 发送数据 udp_send() 与 udp_sendto() . . . . . . . . . . . . . . . . . . . . . . 540
17.1.7 删除 UDP 控制块 udp_remove() . . . . . . . . . . . . . . . . . . . . . . . . . 542
17.2 RAW API 的 TCP 编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
17.2.1 新建控制块 tcp_new() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
17.2.2 绑定控制块 tcp_bind() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
17.2.3 控制块监听 tcp_listen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
17.2.4 处理连接 tcp_accept() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
17.2.5 建立连接 tcp_connect() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
17.2.6 终止连接 tcp_close() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
17.2.7 接收数据 tcp_recv() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
17.2.8 发送数据 tcp_sent() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
17.2.9 异常处理 tcp_err() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
17.2.10 周期性回调 tcp_poll() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
17.2.11 构建报文段 tcp_write() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
17.2.12 更新接收窗口 tcp_recved() . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
17.3 实验 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
17.3.1 TCP Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
17.3.2 TCP Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
17.3.3 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
第 18 章 使用 JPerf 工具测试网速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
18.1 iPerf 与 JPerf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
18.2 测试网络速度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
论坛:https://www.firebbs.cn ix 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
18.2.1 获取 JPerf 网络测速工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
18.2.2 测试开发板接收速度(NETCONN API) . . . . . . . . . . . . . . . . . . . 578
18.2.3 测试开发板接收速度(Socket API) . . . . . . . . . . . . . . . . . . . . . . 582
18.2.4 测试开发板发送速度(NETCONN API) . . . . . . . . . . . . . . . . . . . 588
18.2.5 测试开发板发送速度(Socket API) . . . . . . . . . . . . . . . . . . . . . . 592
18.3 提高 LwIP 网络传输的速度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
第 19 章 HTTP 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
19.1 什么是 HTTP 协议? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
19.2 URL 与资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600
19.3 HTTP 报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
19.4 使用 Postman 获取论坛数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
19.5 使用开发板获取论坛数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
第 20 章 HTTP 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
20.1 Hello World 网页 demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
20.2 提供网页控制 LED 灯开关的功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
第 21 章 MQTT 协议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
21.1 MQTT 协议简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
21.2 MQTT 通信模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
21.3 消息主题与服务质量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
21.4 MQTT 控制报文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
21.4.1 固定报头 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
21.4.2 可变报头 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
21.4.3 有效载荷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
21.5 移植 MQTT 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
21.6 cJSON 移植 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
第 22 章 连接到百度天工物接入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
22.1 物接入简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
22.2 使用 IoT Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
22.2.1 创建计费套餐 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
22.2.2 创建项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
22.2.3 创建策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
论坛:https://www.firebbs.cn x 天猫:https://yehuosm.tmall.com
[野火]LwIP 应用开发实战指南
22.2.4 创建身份与创建用户 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
22.2.5 MQTT 软件测试连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
22.3 开发板连接 IoT Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
22.4 IoT Hub 的规则引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
22.4.1 什么是规则引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
22.4.2 使用规则引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
22.5 数据可视化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
22.5.1 IoT Hub 的时序数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
22.5.2 IoT Hub 的物可视 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
第 23 章 连接到阿里云物联 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
23.1 使用阿里云物联 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
23.2 MQTT 软件测试连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
23.3 开发板连接阿里云物联 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
23.4 阿里云物联的规则引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
第 24 章 连接到 OneNET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
24.1 使用 OneNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
24.2 测试连接 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
24.3 开发板连接 OneNET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
24.4 添加数据流 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
24.5 系统主题的发布格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
24.6 使用开发板发布数据点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
24.7 数据可视化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
联系我们 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
如何参与项目 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
项目源码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
文档在线阅读与 pdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
常见问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
版权说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719


标签: LWIP STM32

实例下载地址

野火LWIP开发实战指南

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警