前言:尋找寫作靈感?中文期刊網用心挑選的NDK的DSP網絡通信技術探討,希望能為您的閱讀和創作帶來靈感,歡迎大家閱讀并分享。
摘要:針對TMS320C6678DSP的嵌入式網絡實現方案,對該DSP的網絡控制模塊和ndk進行了深入地研究與分析,實現了SYS/BIOS系統下NDK組件的初始化及配置。并以PC與dsp之間網絡通信為例,介紹了PC端Winsock與DSP的NDK開發流程,通過PC與DSP的網絡通信數據傳輸的測試,分析了影響網絡通信速率的幾個因素。實驗結果表明,使用NDK提供的組件,可以方便快捷地實現網絡應用開發。
關鍵詞:嵌入式系統;TCP/IP協議;數字信號處理器(DSP);網絡開發包(NDK)
網絡通信作為一種有效的通信方式,在DSP應用開發中占據越來越重要的地位。從DSP設備實時獲取監控或測量的數據、向DSP設備發送命令控制其采取適當的處理行為等,都需要網絡通信的支持。隨著嵌入式網絡通信技術研究與應用越來越廣泛,網絡通信處理技術越來越成熟。TI公司推出了TCP/IP協議棧。此協議棧與TI網絡開發工具包NDK(NetworkDeveloper'sKit)結合在一起使用。NDK是一個基于SYS/BIOS實時操作系統的網絡協議棧,目前主要用于開發和驗證TIC6000系列和ARM系列嵌入式處理器的網絡應用功能。包含在NDK版中的代碼是通用的C代碼。NDK棧作為一個快速的原型平臺為開發網絡和包處理程序提供服務。它能用于向已經存在的應用程序中添加網絡連接,以支持網絡的通信、配置和控制。基于SYS/BIOS的網絡開發組件,提供網絡協議棧的支持,提供基本網絡服務開發的接口,簡化了DSP網絡應用程序的開發[1]。NDK僅用200~250K的程序空間和95K的數據空間即可支持常規的TCP/IP服務,包括應用層的TELNET、DHCP和HTTP等協議,可使基于數字信號處理技術的因特網終端的網絡連接成本大大降低。因此,NDK很適合目前的嵌入式系統硬件環境,是實現DSP網絡開發的重要支撐工具。
1NDK的功能架構
如圖1所示,NDK主要由5個庫組成,分別是硬件抽象庫(hal.lib)、網絡控制庫(netctrl.lib)、網絡工具庫(nettool.lib)、操作系統庫(os.lib)和協議棧庫(stack.lib)。(1)硬件抽象庫HAL將具體的底層硬件抽象為一個硬件抽象層與NDK隔離,主要負責管理與網絡相關的硬件資源,為NDK提供一組編程接口。包含硬件外設到NDK的接口,例如,計時器、LED指示燈、以太網設備和串口等。(2)網絡工具庫NETTOOL庫中包含了NDK提供的所有基于網絡服務的套接字,以及一些用于網絡應用程序開發的工具。在網絡工具庫中最常用的組件是基于標簽的配置系統,它幾乎控制棧及其服務的每個方面[2]。(3)操作系統庫將DSP/BIOS操作系統的功能抽象為一個操作系統適配層與NDK隔離,將某些抽象的操作系統調用映射到SYS/BIOS函數調用。這個適應層允許SYS/BIOS系統程序員將NDK系統調整到任何基于SYS/BIOS的操作系統中。(4)協議棧庫主要是TCP/IP協議棧,它包含以太網和點到點協議頂層套接字層的所有內容。TCP/IP協議棧是主要的TCP/IP網絡功能庫,該庫構建在SYS/BIOS操作系統之上,實現了從上層套接字到底層鏈路層的所有功能。STACK庫是基于SYS/BIOS編譯的,能充分利用SYS/BIOS操作系統,在平臺間遷移時不需要移植。(5)網絡控制庫NETCTRL是協議棧配置、初始化和事件調度的核心,它控制TCP/IP與外部的交互。在所有的協議棧模塊中,它對NDK的操作時最重要,其功能:a)負責NDK的初始化和底層設備驅動;b)通過配置服務回調函數啟動和維護系統配置;c)向底層設備驅動提供接口,同時調度驅動事件;d)在退出時卸載系統配置和清理驅動。
2NDK協議棧的配置和初始化
NDK協議棧初始化的基本過程:(1)運行StackThreadBegin(Global.stackBe-ginHook)掛鉤函數。注意在這個掛鉤函數中,任何與NDK相關的代碼都不能運行,因為NC_Syste-mOpen()函數還沒有運行。(2)用初始化函數對操作系統環境進行初始化:NC_SystemOpen(Priority,OpMode),它的兩個參數Priority和OpMode分別決定網絡事件調度器在SYS/BIOS線程中的優先級和操作模式。這個函數必須在NDK相關的函數被調用之前調用。(3)通過CfgNew()創建一個新的配置。一旦創建了配置句柄,就可以將配置信息裝載到句柄中,既可以整體裝載,也可以采用一次一個條目的形式進行裝載。(4)通過配置函數API的調用構建新配置或加載一個原來存在的配置:CfgLoad()/CfgAddEntry(),兩者的區別在于整體裝載還是逐一進行裝載,裝載的參數包括:網絡主機名,IP地址和子網掩碼,默認路由的IP地址,需要執行的服務(例如:DHCP、DNS和HTTP),命名服務器的IP地址,協議棧的屬性(例如:IP路由、套接字緩存大小等)。(5)通過調用NC_NetStart()函數,用上面的配置啟動協議棧。該函數由四個參數:配置句柄、指向開始函數的指針、指向結束函數的指針和指向IP地址時間的函數。開始函數和結束函數只被調用一次,開始函數在初始化結束后準備執行網絡應用程序時調用,IP地址事件函數允許被多次調用,NC_NetStart()函數直到協議棧繪會話終止才返回。(6)在一些初步的初始化后,NC_NetStart()函數創建一個新的線程,這個新的線程會調用生成的NetworkOpen()函數。NetworkOpen()函數根據網絡需求創建網絡任務線程。(7)在正常操作下,協議棧直到函數NC_Net-Stop()被調用才會關閉。(8)當NC_NetStart()返回且會話結束后,調用Cfg_Free()釋放配置句柄。(9)當所有資源釋放后,調用NC_System-Close完成系統關閉操作[3]。NDK的初始化流程如圖2所示。
3NDK與PC通信測試的實現
PC與DSP的網絡通信是經常使用的場景之一,采用C/S的網絡開發架構,基于socket進行PC與DSP通信的程序設計,PC端作為server,DSP端作為client,在DSP端發送數據,PC端收到數據后不作任何處理,把接收到的數據回傳給DSP,在DSP端統計往返時間及誤碼率。程序流程圖如圖3所示。這里采集100次往返時間進行統計分析,DSP端發送接收緩沖區默認設置8192字節。這里從PC操作系統的CPU負載情況進行測試分析,CPU占用率70%時的通信速率統計結果如圖4、圖5所示。為了測試PC操作系統CPU占用率比較低的情況下的網絡通信速率,將與測試無關的進程關閉,減輕CPU的負載。PC操作系統CPU占用率為10%的通信速率統計情況如圖6、圖7所示。從圖4到圖7可以看出:在Windows系統占用率低的時候,通信時間的波動確實減小,往返時間也相應的減少了。通信往返時間受PC端影響較大,因為Windows是非實時系統,在消息處理上有其內在的機制。DSP端是實時系統,所以延遲小,響應快。另外,對數據進行校驗誤碼率為零。另外在測試中關閉了Nagle算法與關閉前進行數據對比分析,發現關閉Nagle并不能減少太多時間。對于socket還有其他設置選項如發送緩沖區大小,接收緩沖區大小以及重傳超時時間設置等,可以根據具體的應用進行相關的設置,提高網絡通信效率。
4結束語
通過NDK對TCP/IP協議棧進行初始化和配置,實現了PC與DSP的網絡通信,完成了數據網絡通信工作,測試研究表明NDK開發套件使用方便,性能優良可靠,可以最大限度地節省開發時間和成本,是嵌入式DSP網絡開發的首選。
參考文獻:
[1]張楓.基于NDK的DSP網絡接口移植開發設計[J].網絡與通信,2013(3):45-47.
[2]梁迅.基于NDK的DSP網絡編程[J].計算技術與自動化,2005(3):79-82.
作者:鄭佳晶 高榮榮 單位:中國電子科技集團公司第四十五研究所