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