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