uIP其主要是為8位和16位系統(tǒng)設計的,程序在編寫時就考慮到了移植問題。uIP的主要文件包括uip.c和uip_arp.c。
(1)移植的基本過程。
針對所用編譯器的類型更改定義數(shù)據類型,底層RTL8019AS芯片的驅動和實現(xiàn)應用層代碼,系統(tǒng)定時器接口等。下面分別予以說明。
數(shù)據類型的定義:
typedefunsignedcharu8_t;typedefunsignedshortu16_t;typedefunsignedshortuip_stats_t;由于KeilC編譯器默認情況下的編譯模式為small,變量的定義在內部RAM中,編譯時編譯模式應改為Large,即變量的定義在XDATA中。
(2)RTL8019AS的驅動。
主要包括以下內容。
?、賓therdev_init()完成系統(tǒng)上電初始化,包括設定RTL8019的物理地址和IP地址等,設定收發(fā)緩沖區(qū)的位置和大小等。
②etherdev_send()完成數(shù)據的發(fā)送。
?、醗therdev_read()完成以太網數(shù)據的接收。底層網絡設備驅動程序與uIP協(xié)議棧通過兩個全局變量實現(xiàn)接口:變量uip_buf為收發(fā)緩沖區(qū)的首地址;uip_len為收發(fā)的數(shù)據長度。
etherdev_send函數(shù)將uip_buf里的uip_len長度的數(shù)據發(fā)送到以太網上。recv函數(shù)將接收到數(shù)據存儲到uip_buf中,同時返回uip—len的值。
?、躤therdev_timerO_isr()定時器1中斷函數(shù)為系統(tǒng)提供時鐘定時。
51系列單片機一般有2或3個定時器,本移植中選用定時器1產生定時時間,為ip_perioDIC()函數(shù)的執(zhí)行提供基準,另外還對ARP表項,TCP連接超時等提供時間基準。
RTL8019AS初始化、收發(fā)包的詳細過程在12.6節(jié)中已經詳細介紹過,在此不再贅述。移植后的文件如下:
uIP的設置在uipopt.h頭文件中。在該文件中用戶根據具體的實際條件設置uIP的IP地址,MAC地址,網絡掩碼,網關地址。另外還包括可建立的最大連接數(shù),端口是否啟動UDP協(xié)議功能等,在具體的應用中可以參考uIP的說明文檔,其中都有詳細的說明。





