stm23f1+ucosii移植lwip-1.3.2到lwip-2.0.2

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

8.至此,点击双箭头的Rebuild编译应当无报错,移植2.0.2完成。

你可能感兴趣的:(stm23f1+ucosii移植lwip-1.3.2到lwip-2.0.2)