基于單片機的嵌入式系統(tǒng)網(wǎng)絡設計方案
系統(tǒng)主應用程序的實現(xiàn)
系統(tǒng)初始化后,進入主程序循環(huán)的兩部分:一是對接收到的以太網(wǎng)數(shù)據(jù)幀進行解包,供應用程序使用,一是對發(fā)送的數(shù)據(jù)進行封裝并發(fā)送,使采用TCP/IP協(xié)議的以太網(wǎng)內的所有計算機都能收到此數(shù)據(jù)幀。圖2是系統(tǒng)的主應用程序的流程圖。
圖2 系統(tǒng)的主應用程序的流程圖
單片機實現(xiàn)TCP/IP協(xié)議的難點
51單片機的程序空間、可用的內存RAM、運算速度、指令集等原因,在UNIX或Windows上實現(xiàn)的TCP/IP協(xié)議的源代碼并不能夠直接移植到8位的單片機上。在51單片機上編寫代碼會受許多限制,特別是實現(xiàn)TCP/IP協(xié)議這樣關系復雜的程序,我們必須根據(jù)實際情況盡可能挖掘51單片機的性能。綜合來說,單片機實現(xiàn)與UNIX實現(xiàn)TCP/IP有如下區(qū)別:
?。?)操作系統(tǒng):Windows或UNIX都是多任務操作系統(tǒng),這使得代碼編寫簡單化,在單片機只能是單任務系統(tǒng),代碼結構為順序執(zhí)行+硬件中斷的方式,無法并發(fā)執(zhí)行。
?。?)內存分配:Windows或UNIX的內存分配是動態(tài)的。而一般單片機只有外接的一塊32K字節(jié)的RAM,并同時被各個協(xié)議使用。一個最大的以太網(wǎng)數(shù)據(jù)包有1.5K字節(jié),分配一包的緩沖區(qū)就要1.5K字節(jié)。為此,我們分配一個256×6=1536個字節(jié)的固定的RAM來存放收到的以太網(wǎng)數(shù)據(jù)包。收到一包就處理一包。
(3)指針:在PC里所有程序都必須先放在RAM里才能運行,所以它的指針都指向RAM.而單片機的結構和PC的結構有很大差別,指針類型很多,各指針運算的速度也不一樣,特別是“一般指針”運算很慢,還會占用很多程序空間。UNIX實現(xiàn)TCP/IP的源代碼中,用得最多的就是指針,而在單片機里一般要求少用指針,或使用特定類型的指針。對使用UNIX的源代碼需要作很多的改動。
?。?)參數(shù)傳遞:在UNIX實現(xiàn)的TCP/IP源代碼中,一般有很多的參數(shù)傳遞,而在單片機里允許傳遞的參數(shù)是有限的(因為受到內部RAM的限制),同時參數(shù)傳遞的過程要浪費程序代碼空間,也降低單片機執(zhí)行速度。所以在單片機的實現(xiàn)里,一般不要做太多的參數(shù)傳遞,而多使用公共的全局變量來實現(xiàn)調用的過程。
?。?)硬件接口:在UNIX或Windows里,對網(wǎng)卡驅動無一例外都是采用中斷方式,因為PC的處理速度快,一次中斷的處理時間也很短,不會影響系統(tǒng)內的其它中斷。而在單片機的應用中,大部分的方案都是查詢式的。PC的NE2000的網(wǎng)卡,一般都是用16位DMA的方式,而在單片機里卻只能用8位DMA方式。這也使UNIX對網(wǎng)卡驅動的代碼不能直接移植。
結語
本文設計的嵌入式網(wǎng)絡接入方案,采用廉價的8位51單片機實現(xiàn)了簡化TCP協(xié)議和UDP協(xié)議,并支持主動和被動連接、跨越網(wǎng)關,實現(xiàn)互聯(lián)網(wǎng)接入,在被控設備與上位控制機之間提供了一條透明的傳輸通道,用戶不需對原有串口設備或其他數(shù)字設備做任何修改,就可享受到網(wǎng)絡的好處。目前,本文的系統(tǒng)已被成功使用在網(wǎng)絡化的數(shù)據(jù)采集器中。
tcp/ip相關文章:tcp/ip是什么
評論