0.从lwip官网下载lwip-2.0.2
。
1.替换旧版本的api文件夹、core文件夹。
2.复制并替换旧版本的include文件夹、netif文件夹(此文件夹下的ethernetif.c不进行替换)。
3.更改USER/
目录下的文件夹lwip-1.3.2
名字为lwip-2.0.2
。
4.打开keil工程,修改工程分组名中的1.3.2为2.0.2。
5.将工程文件中带有感叹号的文件移除,并按照以下步骤重新添加进工程。
注:arch表示与修改移植相关,ethernetif.c是lwip自带文件,用户修改。
5.0.User分组
-
search.c
位于lwip-2.0.2/src
。
5.1.LWIP_2.0.2_Core分组
添加以下文件。此分组的文件为lwip-2.0.2/src/core
文件夹一级目录下的所有C文件,ipv4目录下的所有文件,以及lwip-2.0.2/src/netif
文件夹下的ethernet.c
。
5.2.LWIP_2.0.2_Arch分组
添加以下文件。此分组为用户移植相关。
-
lwip.c
位于lwip-2.0.2/src
。 -
sys_arch.c
位于lwip-2.0.2/src/arch
。 -
ethernetif.c
位于lwip-2.0.2/src/netif
。
5.3.LWIP_2.0.2_Api分组
添加以下文件。此分组的文件为lwip-2.0.2/api
文件夹下的所有C文件。
6.修改工程头文件路径
工程选项>>C/C++选项卡>>Include Paths所有路径名中的1.3.2替换成2.0.2,新增一条路径..\USER\lwip-2.0.2\src\include\netif\ppp
。
7.修改具体文件
-
sys.h
第108行#define LWIP_COMPAT_MUTEX 0
改为#define LWIP_COMPAT_MUTEX 0
。 -
arch.h
第113行#define LWIP_NO_STDINT_H 0
改为#define LWIP_NO_STDINT_H 1
。 -
lwip.c
第60行到第62行struct ip_addr
改为ip_addr_t
。 -
sys_arch.c
注释掉第56行的struct sys_timeouts null_timeouts;
,和第365行开始的sys_arch_timeouts
函数。timeouts只在sys_arch_mbox_fetch
函数中使用,所以版本2.0.2取消了timeouts相关函数,直接在sys_arch_mbox_fetch
中实现。
在56行的struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];
之前添加
struct sys_timeouts{
struct sys_timeo *next;
};
-
sntp.c
第55、333行struct ip_addr
改为ip_addr_t
。 -
lwip.c
添加头文件#include "lwIP/inet.h"
。
*按照sys.h
列举的几个函数声明,修改报错的1.3.2版本的函数实现、函数参数、函数调用。 -
lwip.c
底部添加以下程序
u32_t sys_now(void)
{
return OSTimeGet();
}
int sys_mbox_valid(sys_mbox_t *mbox)
{
if(*mbox == SYS_MBOX_NULL)
return 0;
else
return 1;
}
void sys_mbox_set_invalid(sys_mbox_t *mbox)
{
*mbox=SYS_MBOX_NULL;
}
int sys_sem_valid(sys_sem_t *sem)
{
if(*sem == SYS_SEM_NULL)
return 0;
else
return 1;
}
void sys_sem_set_invalid(sys_sem_t *sem)
{
*sem=SYS_SEM_NULL;
}
-
init.c
第299行#if !LWIP_DISABLE_TCP_SANITY_CHECKS
去掉感叹号,第266行
#if !NO_SYS && LWIP_TCPIP_CORE_LOCKING && LWIP_COMPAT_MUTEX && !defined(LWIP_COMPAT_MUTEX_ALLOWED)
的上方插入一行#define LWIP_COMPAT_MUTEX_ALLOWED
。