将lwip1.4.1工程移植至lwip2.1.2记录
关于二者文件、功能等差异网上已有很多文章介绍,类似这个文档有简单说了下这两个版本间的一些差异:lwip 1.4.1到lwip2.1.2升级之路
本文要记录在将基于lwip1.4.1版本例程:STM32F4x7_ETH_LwIP_V1.1.1\Project
Standalone\udp_echo_server移植至lwip2.1.2平台过程中遇到的一些问题,例如头文件的包含,结构体的差异,某些函数的实现差异等;
1. ip_addr结构体
1.4.1版本中使用 struct ip_addr定义地址,此结构体在lwip-1.4.1\ src\include\ipv4\lwip\ ip_addr.h定义,如下图;
2.1.2版本中需替换为ip_addr_t, 头文件包含#include “lwip/ip_addr.h”
2. etharp.h
二者位于不同文件下,1.4.1位于lwip-1.4.1\src\include\netif|etharp.h, 2.1.2位于lwip-2.1.2\src\include\lwip\etharp.h主要为函数声明, lwip-2.1.2\src\include\lwip\prot\etharp.h主要为ARP protocol definitions;
3. cc.h与arch.h
arch.h(lwip-2.1.2\src\include\lwip\arch.h)中u8_t、u32_t等类型定义已在cc.h(STM32F4x7_ETH_LwIP_V1.1.1\Utilities\ Third_Party\lwip-1.4.1\port\STM32F4x7\arch\cc.h)中定义,需定义宏LWIP_NO_STDINT_H以避免arch中重复定义,可在程序中定义
#ifndef LWIP_NO_STDINT_H
#define LWIP_NO_STDINT_H 1
#endif, 或在keil里定义均可;
4. tcp_impl.h
2.1.2中删除了此头文件,并将其实现放在了历史文件夹下
lwip-2.1.2\src\include\lwip\priv\tcp_priv.h。
在2.1.2版本不应再使用此文件,像lwip-1.4.1\src\include\lwip\tcp_impl.h里的TCP_TMR_INTERVAL参数,1.4.1中经常见到像下面这样使用该参数:
2.1.2中TCP_TMR_INTERVAL参数在lwip-2.1.2\src\core\timeouts.c中定义,tcp_tmr()、etharp_tmr()等函数的周期调用已在sys_check_timeouts()中采用链表的方式实现,用户只需循环调用此函数即可,使用TIMERS需修改lwipopts.h中NO_SYS为1,NO_SYS_NO_TIMERS为0,以定义LWIP_TIMERS宏,用户还应实现u32_t sys_now(void)函数,返回系统时间;关于times想了解更多可以看下这篇文章:LwIP 之四 超时处理/定时器(timeouts.c/h)
暂且想起来这么多,后续想起来再补充。。。