輕量級TCP/IP協議棧OpenTCP的移植與應用
發布時間:2008/8/18 0:00:00 訪問次數:724
引言
隨著工業控制和計算機技術的發展,對數據的傳輸提出了更高的要求,各種總線技術的發展日新月異。
其中,采用以太網技術完成數據的遠程通信并連入internet,已經成為工業和家用領域的重要發展方向,將來幾乎所有上業設備和家電均需要具有internet連接能力。目前,以mcu等構成的嵌入式系統已廣泛應用于工業、家電等各個領域,嵌入式系統對網絡應用的要求也越來越高,因此在嵌入式系統中實現tcp/ip協議,已經成為嵌入式系統領域的研究熱點。
傳統的tcp/ip協議在資源有限的嵌入式系統中實現起來很困難,必須把大量的資源花在保證數據傳送的可靠性以及數據流量的控制上,因而在實時性要求比較高的嵌入式領域中,不能滿足實時要求。因此,研究并改進嵌入式tcp/ip協議棧以滿足嵌入式系統的高性能要求,具有重要的現實意義。
1硬件平臺和opentcp簡介
1.1硬件平臺
該系統硬件部分由ade7758高性能電能計量芯片、arm處理器、2mbnorflash、64mbsdram和以太網接口等組成。ade7758內部集成了6路16位△-∑adc、高性能dsp、電壓基準及溫度傳感器等電路,在1000:1動態范圍內誤差小于0.1%;提供有功、無功及視在電能,電壓、電流有效值及波形采樣等數據;三相三線/三相四線兼容;dsp內部對無功電能進行了補償;提供獨立的有功電能及無功電能脈沖輸出,非常適合三相電能計量。被測三相電壓、電流經傳感器和調理電路后,送入ade7758的a相、b相、c相電壓和電流輸入端;經ade7758計算后,轉換為有功功率、無功功率、視在功率、復功率等電能信息,數據通過ade7758的spi接口輸出。mcu讀出電能數據信息并處理后,送lcd顯示和網絡接口。硬件原理框圖如圖1所示。
為了通過計算機遠程監控電能數據,軟件部分采用了opentcp作為協議棧完成數據通信。opentcp是英國vi-ola公司開發的用于8/16位mcu的源碼開放的tcp/ip協議棧。與通用的嵌入式tcp/ip協議棧(如lwip、uip)相比,其代碼更為精簡,不需要操作系統的支持,可以根據需要進行裁剪,全部用ansic編寫,支持ethernet、slip、arp、rarp、icmp、tcp、udp;應用層支持tftp、tel-net、http、smtp、pop3、dns等,對于應用層協議都提供callback接口,可方便用戶的應用程序設計。
1.2協議棧的特點
通用計算機上運行的tcp/ip協議棧過于復雜,需占用大量系統資源,而嵌入式應用系統的資源往往都非常有限。因此,需要將傳統的tcp/ip協議棧加以簡化。在設計中opentcp為提高協議棧的運行效率,在保持高性能的同時,針對嵌入式系統的要求對tcp/ip進行了部分精簡和優化,使其能在各種mcu體系結構上實現,減少對資源的消耗,以滿足嵌入式應用的要求。具體特點如下:
①由于嵌入式系統對網絡功能的要求各有不同,opentcp可以根據應用的要求選擇必要的協議,縮減程序代碼的大小和對數據存儲器的占用。
②根據嵌入式系統應用環境的特點,一般其作為服務器端,與之通信的都是實現了完整tcp/ip的設備,通信較為可靠,不需要復雜的路由選擇、ip分片、重裝、tcp流量控制、擁塞控制等。因此,在opentcp中簡化了tcp、ip等協議的實現,取消了所有的ip選項和tcp選項(包括ip的分段);tcp的流量控制窗口長度為1,即報文傳輸是基于停止一等待方式。避免了復雜的流量控制和分段處理,可以滿足嵌人式網絡應用的要求。tcp狀態機也進行了一定的簡化處理。
③opentcp針對tcp/ip協議中對性能影響最大的部分——緩沖區的管理進行了優化,采用零拷貝技術,即在網卡驅動程序和協議之間沒有數據拷貝的過程,以減少對系統資源的占用,簡化緩沖區的管理,提高實時性。
tcp/ip具有層次性,每一層都有自己的數據格式。數據在各層之間傳送時需要不斷地進行打包和解包處理,以及數據的拷貝,會大大增加系統對存儲器和運算能力的開銷,降低系統的性能。在opentcp協議棧中,每一層都沒有用于數據傳輸的緩沖區,協議棧之間傳遞的是數據指針。接收數據時,每一層將本層的數據處理完畢后,將處理過的數據指針指向上一層的數據的頭部;發送數據時,也是以類似的過程來實現。
為了減小網絡對系統存儲器的需求,采用靜態分配技術,在網絡初始化時靜態分配數據緩沖區,設置專門的發送和接收緩沖區,大小一般大于網絡的mtu值。該值可根據網絡環境調整,在本系統中采用的底層網絡接口為以太網,設置接收緩沖區大小為1500字節。當一個數據包來到時,網絡設備驅動將其放在接收緩沖區里,調用tcp/ip協議棧。如果數據包里有數據,tcp/ip協議就會通知相應的應用程序。如果應用程序需要發送數據,opentcp的每一層協議都有自己的數據結構用于本層報文頭部處理,發送緩沖區的只用來存放發送的數據。發送數據時,應用程序把數據寫入緩沖區,設備驅動程序立即發送報文頭部和數據到網絡上。
④opentcp協議棧可
引言
隨著工業控制和計算機技術的發展,對數據的傳輸提出了更高的要求,各種總線技術的發展日新月異。
其中,采用以太網技術完成數據的遠程通信并連入internet,已經成為工業和家用領域的重要發展方向,將來幾乎所有上業設備和家電均需要具有internet連接能力。目前,以mcu等構成的嵌入式系統已廣泛應用于工業、家電等各個領域,嵌入式系統對網絡應用的要求也越來越高,因此在嵌入式系統中實現tcp/ip協議,已經成為嵌入式系統領域的研究熱點。
傳統的tcp/ip協議在資源有限的嵌入式系統中實現起來很困難,必須把大量的資源花在保證數據傳送的可靠性以及數據流量的控制上,因而在實時性要求比較高的嵌入式領域中,不能滿足實時要求。因此,研究并改進嵌入式tcp/ip協議棧以滿足嵌入式系統的高性能要求,具有重要的現實意義。
1硬件平臺和opentcp簡介
1.1硬件平臺
該系統硬件部分由ade7758高性能電能計量芯片、arm處理器、2mbnorflash、64mbsdram和以太網接口等組成。ade7758內部集成了6路16位△-∑adc、高性能dsp、電壓基準及溫度傳感器等電路,在1000:1動態范圍內誤差小于0.1%;提供有功、無功及視在電能,電壓、電流有效值及波形采樣等數據;三相三線/三相四線兼容;dsp內部對無功電能進行了補償;提供獨立的有功電能及無功電能脈沖輸出,非常適合三相電能計量。被測三相電壓、電流經傳感器和調理電路后,送入ade7758的a相、b相、c相電壓和電流輸入端;經ade7758計算后,轉換為有功功率、無功功率、視在功率、復功率等電能信息,數據通過ade7758的spi接口輸出。mcu讀出電能數據信息并處理后,送lcd顯示和網絡接口。硬件原理框圖如圖1所示。
為了通過計算機遠程監控電能數據,軟件部分采用了opentcp作為協議棧完成數據通信。opentcp是英國vi-ola公司開發的用于8/16位mcu的源碼開放的tcp/ip協議棧。與通用的嵌入式tcp/ip協議棧(如lwip、uip)相比,其代碼更為精簡,不需要操作系統的支持,可以根據需要進行裁剪,全部用ansic編寫,支持ethernet、slip、arp、rarp、icmp、tcp、udp;應用層支持tftp、tel-net、http、smtp、pop3、dns等,對于應用層協議都提供callback接口,可方便用戶的應用程序設計。
1.2協議棧的特點
通用計算機上運行的tcp/ip協議棧過于復雜,需占用大量系統資源,而嵌入式應用系統的資源往往都非常有限。因此,需要將傳統的tcp/ip協議棧加以簡化。在設計中opentcp為提高協議棧的運行效率,在保持高性能的同時,針對嵌入式系統的要求對tcp/ip進行了部分精簡和優化,使其能在各種mcu體系結構上實現,減少對資源的消耗,以滿足嵌入式應用的要求。具體特點如下:
①由于嵌入式系統對網絡功能的要求各有不同,opentcp可以根據應用的要求選擇必要的協議,縮減程序代碼的大小和對數據存儲器的占用。
②根據嵌入式系統應用環境的特點,一般其作為服務器端,與之通信的都是實現了完整tcp/ip的設備,通信較為可靠,不需要復雜的路由選擇、ip分片、重裝、tcp流量控制、擁塞控制等。因此,在opentcp中簡化了tcp、ip等協議的實現,取消了所有的ip選項和tcp選項(包括ip的分段);tcp的流量控制窗口長度為1,即報文傳輸是基于停止一等待方式。避免了復雜的流量控制和分段處理,可以滿足嵌人式網絡應用的要求。tcp狀態機也進行了一定的簡化處理。
③opentcp針對tcp/ip協議中對性能影響最大的部分——緩沖區的管理進行了優化,采用零拷貝技術,即在網卡驅動程序和協議之間沒有數據拷貝的過程,以減少對系統資源的占用,簡化緩沖區的管理,提高實時性。
tcp/ip具有層次性,每一層都有自己的數據格式。數據在各層之間傳送時需要不斷地進行打包和解包處理,以及數據的拷貝,會大大增加系統對存儲器和運算能力的開銷,降低系統的性能。在opentcp協議棧中,每一層都沒有用于數據傳輸的緩沖區,協議棧之間傳遞的是數據指針。接收數據時,每一層將本層的數據處理完畢后,將處理過的數據指針指向上一層的數據的頭部;發送數據時,也是以類似的過程來實現。
為了減小網絡對系統存儲器的需求,采用靜態分配技術,在網絡初始化時靜態分配數據緩沖區,設置專門的發送和接收緩沖區,大小一般大于網絡的mtu值。該值可根據網絡環境調整,在本系統中采用的底層網絡接口為以太網,設置接收緩沖區大小為1500字節。當一個數據包來到時,網絡設備驅動將其放在接收緩沖區里,調用tcp/ip協議棧。如果數據包里有數據,tcp/ip協議就會通知相應的應用程序。如果應用程序需要發送數據,opentcp的每一層協議都有自己的數據結構用于本層報文頭部處理,發送緩沖區的只用來存放發送的數據。發送數據時,應用程序把數據寫入緩沖區,設備驅動程序立即發送報文頭部和數據到網絡上。
④opentcp協議棧可