V1.4.1與V2.1.2的文件對(duì)比
根目錄

從解壓后的文件結(jié)構(gòu)可以看出,結(jié)構(gòu)上沒有改動(dòng),因?yàn)橛昧薵it,所以增加了兩個(gè)相關(guān)的文件,并添加了另外兩個(gè)文件。
doc文件夾

主要增加的doxygen這個(gè)文件夾,對(duì)查看文檔非常有幫助。其它的看看就行了。
src文件夾

V2.1.2相對(duì)V1.4.1增加了很多的上層應(yīng)用,這些應(yīng)用都放在apps這個(gè)文件夾里了。
api文件夾

這里只多了一個(gè)''if_api.c''的一個(gè)文件,跟socket有關(guān);
core文件夾

snmp文件夾移到apps里邊去了,timers.c改成了timeouts.c,增加了其它的幾個(gè)文件。
include文件夾

posix文件夾移到compat去了,ipv4和ipv6里的文件移到lwip了
netif文件夾

只是新增了文件。
test文件夾

增加了很多測(cè)試?yán)?,根?jù)需要看看就好,不影響升級(jí)。
升級(jí)步驟
升級(jí)有一個(gè)前提,必須保證除移植以外的文件都是官方的,沒有被修改過。因?yàn)?,升?jí)需要替換掉這些文件,如果修改過,那就有得扯了。這里用NUC472_NUC442_BSP_CMSIS_V3.03.000中的FreeRTOS_lwIP_TCP_EchoServer為例進(jìn)行說明,開發(fā)工具為Keil MDK。
-
1、打開 MDK 工程, 刪除工程中的lwip V1.4.1 的源文件(除了移植相關(guān)的!!), 然后將 V2.1.2 的源文件直接添加到工程,并調(diào)整相關(guān)的頭文件包含路徑;
-
2、V1.4.1中的
ppp_oe.h在V2.1.2中改名為pppoe.h,原工程中包含的頭文件作相應(yīng)的修改;V1.4.1中,原本要在cc.h定義的數(shù)據(jù)類型,在新版本中已經(jīng)在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,此處要作相應(yīng)修改;-
4、下載contrib-2.1.0,并用下圖中的文件替換原工程中的相應(yīng)文件
-
5、編譯一下,出現(xiàn)不少錯(cuò)誤:
錯(cuò)誤提示 解決方法 error: #136: struct "pbuf" has no field "ts_nsec" 出現(xiàn)這個(gè)是因?yàn)楸纠痰囊浦仓性?code>struct pbuf中增加了 TIME_STAMPING相關(guān)的定義。這里涉及到了官方的源碼改動(dòng),暫時(shí)先不管,屏蔽該宏的定義。所以開頭就說前提是保證官方源碼沒有改動(dòng),不然就麻煩了??!error: #109: expression preceding parentheses of apparent call must have (pointer-to-) function type 這個(gè)是因?yàn)?code>LWIP_RAND在V1.4.1中是常量宏,定義在 lwipopts.h中,而到了V2.1.2,它是宏函數(shù)的形式LWIP_RAND(),定義在cc.h中,所以出現(xiàn)這么個(gè)提示。本例在sys_arch.c中定義了_LWIP_RAND(),使用系統(tǒng)的tick計(jì)數(shù)作為隨機(jī)數(shù),因此在cc.h中定義#define LWIP_RAND() _LWIP_RAND()即可。沒有的話可以使用標(biāo)準(zhǔn)庫的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同時(shí)支持了兩種方式,所以拷貝一份,將函數(shù)名改成這個(gè)就可以了。Error: L6218E: Undefined symbol sio_open (referred from slipif.o). 將 slipif.c從工程中刪除即可,這個(gè)沒用上。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). 同上

