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