V1.4.1与V2.1.2的文件对比
根目录
从解压后的文件结构可以看出,结构上没有改动,因为用了git,所以增加了两个相关的文件,并添加了另外两个文件。
doc文件夹
主要增加的doxygen这个文件夹,对查看文档非常有帮助。其它的看看就行了。
src文件夹
V2.1.2相对V1.4.1增加了很多的上层应用,这些应用都放在apps这个文件夹里了。
api文件夹
这里只多了一个''if_api.c''的一个文件,跟socket有关;
core文件夹
snmp文件夹移到apps里边去了,timers.c改成了timeouts.c,增加了其它的几个文件。
include文件夹
posix文件夹移到compat去了,ipv4和ipv6里的文件移到lwip了
netif文件夹
只是新增了文件。
test文件夹
增加了很多测试例程,根据需要看看就好,不影响升级。
升级步骤
升级有一个前提,必须保证除移植以外的文件都是官方的,没有被修改过。因为,升级需要替换掉这些文件,如果修改过,那就有得扯了。这里用NUC472_NUC442_BSP_CMSIS_V3.03.000
中的FreeRTOS_lwIP_TCP_EchoServer为例进行说明,开发工具为Keil MDK。
-
1、打开 MDK 工程, 删除工程中的lwip V1.4.1 的源文件(除了移植相关的!!), 然后将 V2.1.2 的源文件直接添加到工程,并调整相关的头文件包含路径;
-
2、V1.4.1中的
ppp_oe.h
在V2.1.2中改名为pppoe.h
,原工程中包含的头文件作相应的修改;V1.4.1中,原本要在cc.h
定义的数据类型,在新版本中已经在arch.h
定义。如果你的编译器无法提供stdint.h
的话才需要像之前版本一样要在cc.h
定义。在本例中就不需要定义,所以删除cc.h
中的下面定义typedef uint8_t u8_t; typedef int8_t s8_t; typedef uint16_t u16_t; typedef int16_t s16_t; typedef uint32_t u32_t; typedef int32_t s32_t; typedef u32_t mem_ptr_t;
-
3、V1.4.1中的
struct ip_addr
在新版中改为ip_addr_t
,此处要作相应修改; - 4、下载contrib-2.1.0,并用下图中的文件替换原工程中的相应文件
-
5、编译一下,出现不少错误:
错误提示 解决方法 error: #136: struct "pbuf" has no field "ts_nsec" 出现这个是因为本例程的移植中在 struct pbuf
中增加了TIME_STAMPING
相关的定义。这里涉及到了官方的源码改动,暂时先不管,屏蔽该宏的定义。所以开头就说前提是保证官方源码没有改动,不然就麻烦了!!error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function type 这个是因为 LWIP_RAND
在V1.4.1中是常量宏,定义在lwipopts.h
中,而到了V2.1.2,它是宏函数的形式LWIP_RAND()
,定义在cc.h
中,所以出现这么个提示。本例在sys_arch.c
中定义了_LWIP_RAND()
,使用系统的tick计数作为随机数,因此在cc.h
中定义#define LWIP_RAND() _LWIP_RAND()
即可。没有的话可以使用标准库的rand()
。Error: L6218E: Undefined symbol errno (referred from if_api.o). 在ethernetif.c中定义 int errno;
,全局搜索都没找到int errno;
的定义,只好自己定义了。Error: L6218E: Undefined symbol sys_mbox_trypost_fromisr (referred from tcpip.o). 新版的 sys.h
中增加了err_t sys_mbox_trypost_fromisr(sys_mbox_t *mbox, void *msg);
,将中断和非中断分开了,以前是一起的。本例中的sys_mbox_trypost
同时支持了两种方式,所以拷贝一份,将函数名改成这个就可以了。Error: L6218E: Undefined symbol sio_open (referred from slipif.o). 将 slipif.c
从工程中删除即可,这个没用上。Error: L6218E: Undefined symbol sio_read (referred from slipif.o). 同上 Error: L6218E: Undefined symbol sio_send (referred from slipif.o). 同上 Error: L6218E: Undefined symbol sio_tryread (referred from slipif.o). 同上
网友评论