?

基于FreeRTOS系統和LwIP協議棧的網絡通訊

2016-12-21 09:28王亞丁徐俊臣李冠宇邱文博
電子技術與軟件工程 2016年20期
關鍵詞:網絡通訊移植

王亞丁+徐俊臣++李冠宇++邱文博++胡軼群++楊子原

摘 要 嵌入式設備常采用實時操作系統和網絡協議棧的組合來實現網絡通訊功能,本文基于FreeRTOS操作系統和LwIP協議棧為一款轉發模塊實現網絡通訊功能。FreeRTOS和LwIP開源免費,移植簡單,功能完善,配置靈活。本文介紹了FreeRTOS和LwIP的移植過程和配置方法,并給出了DHCP服務器和TCP協議的軟件設計流程,驗證了基于FreeRTOs和LwIP協議棧實現網絡通訊的可行性。

【關鍵詞】FreeRTOS LwIP 網絡通訊 移植 TCP

當前主流的嵌入式網絡設備所使用的操作系統有Linux、UCOSII、FreeRTOS、RTX等。Linux的網絡協議棧完備,但內核移植裁剪較為復雜,開發難度較大;UCOSII參考資料多,但系統商用需付費;RTX(Keil開發)簡單好用,自帶RL_TCPnet協議棧,但是協議棧不開源,不便于調試和研究。本文基于FreeRTOS實時操作系統,采用第三方LwIP網絡協議棧,實現網絡通訊功能,為嵌入式網絡設備提供了一種新的設計思路。

FreeRTOS具備良好的實時性、多任務功能,可移植裁剪,可靈活配置調度策略,RAM占用小,對系統資源要求低。最重要的是FreeRTOS完全開源免費,而且移植方法簡單,在當前小型嵌入式操作系統市場使用率很高。LwIP是由瑞典計算機學院開發的一個開源的輕量級TCP/IP協議棧。LwIP的特點是在有無操作系統環境下都可以運行,提供完備的API接口,RAM消耗低。本文基于市面上的網絡轉發模塊,進行FreeRTOS操作系統和LwIP協議棧的移植,并在移植好的工程上測試DHCP服務器、TCP通訊功能等,驗證這種可靠實用的網絡通訊解決方案。

1 硬件平臺

本文采用的設備是一種能夠將RS232串口數據轉成網絡數據的轉發模塊,模塊的單片機采用ARM架構的STM32F429芯片,STM32F429基于Cortex-M4架構,具有浮點運算單元,2MB容量的FLASH,256KB的RAM,系統時鐘頻率能達到180MHz,外設豐富,最主要的是它具有以太網MAC接口,通過外接PHY芯片可以實現網絡通訊功能。該模塊的PHY芯片采用的是LAN8720,LAN8720是低功耗的10/100M以太網PHY芯片,支持通過RMII接口與以太網MAC層通信,內置10/100M全雙工傳輸模塊,支持HP Auto-MDIX自動翻轉功能。轉發模塊網絡部分硬件連接圖如圖1所示。

2 移植FreeRTOS操作系統

首先從官網下載FreeRTOS -8.2.3版本源碼;然后在已有的工程模板(keil軟件)上創建 FreeRTOS相關文件夾,添加源碼文件到相應目錄,添加后的工程目錄如圖2所示,紅框內的文件就是添加的FreeRTOS源碼,Source目錄下主要是任務調度、消息隊列、定時器等操作系統基本功能的實現,Ports目錄下是操作系統與處理器平臺架構相關的接口文件,Port.c是支持Cortex-M4架構的,Heap_4.c是一種動態內存使用方法。

FreeRTOSConfig.h是操作系統的配置文件,配置選項至關重要,決定了系統的功能和性能。移植后主要的配置功能有:使能搶占式調度器;系統主頻 180MHz;系統時鐘節拍 1KHz,即 1ms;系統最大優先級號;定義堆大小,用于動態內存申請,任務棧;定義系統可以使用信號量。除此之外,移植中需要注意的地方是要加入三個宏定義,將STM32F429原本的SVC_Handler,PendSV_Handler,SysTick_Handler中斷函數定義為FreeRTOS內部定義的三個函數,因為FreeRTOS對這三個系統中斷有特殊的處理過程。至此,FreeRTOS移植基本完成,可以在后續軟件工程中使用創建線程,創建信號量、消息隊列等API函數來實現任務間的調度和通信了。

3 移植LwIP協議棧

首先從官網下載LwIP-1.4.1源碼,然后在軟件工程中添加LwIP相關目錄,工程結構如圖3所示。LwIP_src目錄下是LwIP源碼,實現基本的LwIP協議功能。LwIP_port目錄下的文件主要實現了LwIP協議棧與系統的接口,ethernetif.c文件實現LwIP協議和以太網驅動的接口,sys_arch.c文件(位于arch目錄下)實現LwIP協議和操作系統的接口。

ethernetif.c主要功能是初始化 MAC 相關工作環境、初始化 DMA 描述符鏈表。實現LwIP最底層的發送和接收一幀數據的函數。

sys_arch.c文件包含了LwIP要用到的必要的基于FreeRTOS機制的函數,主要有創建線程函數sys_thread_new,創建信號量函數sys_sem_new,創建郵箱函數sys_mbox_new等。這些函數需要對FreeRTOS的API做簡單的封裝,如sys_thread_new函數的本質是調用xTaskCreate來實現創建線程。

APP目錄屬于應用層的文件。netconf.c文件實現LwIP協議棧的初始化并開啟DHCP服務器,tcp_echoclient.c 文件實現指定的通訊協議任務。

stm32f429_eth.c,stm32f429_phy.c由ST公司官方提供,屬于以太網標準庫,用于實現ETH外設的配置,包括GPIO 初始化,RMII、 SMI 接口初始化,MAC 控制器工作環境配置,PHY 狀態獲取等。

4 網絡通訊測試

測試DHCP服務器軟件流程如圖4所示,首先硬件初始化,初始化系統時鐘、GPIO引腳、以太網ETH模塊、串口等;然后創建FreeRTOS任務,指定任務優先級,棧大??;啟動FreeRTOS調度,至此以后系統開始輪詢調度任務。

在DHCP任務中首先執行LwIP_Init函數初始化 LwIP 協議棧,設置ip地址、子網掩碼、網關;添加以太網設備;設置以太網設備為默認網卡;啟動網卡;設置鏈路回調函數,用于獲取鏈路狀態。然后以250ms的周期查詢DHCP的狀態,當 DHCP 狀態為DHCP_START 時,啟動 DHCP 功能, LwIP 會向 DHCP 服務器申請分配 IP 請求。當 DHCP 狀態為 DHCP_WAIT_ADDRESS 時,先判斷IP 地址是否為 0,如果不為 0 說明已經有 IP 地址, 將停止DHCP 功能;如果IP 地址總是為 0,就需要判斷超時時間,并響應超時錯誤。

使用網線把網絡模塊和電腦連入同一個路由器,保證路由器可以提供 DHCP 服務器功能。打開串口調試助手,為系統上電,可以看到在使能 DHCP 功能后,能夠動態獲取 的IP 地址,用電腦ping這個地址可以ping通,說明基于FreeRTOS和LwIP協議的DHCP功能調試成功。

TCP是一種可靠的、面向連接的通信協議,建立連接時需要通過“三次握手”建立連接。本文基于LwIP的socket編程接口實現TCP協議網絡通訊,電腦作為客戶端,網絡模塊作為服務器,TCP軟件流程如圖4所示,初始化軟件流程與DHCP相同,區別是是創建的任務是TCP任務:創建socket套接字;調用bind函數綁定套接字的地址和端口號;調用listen函數監聽客戶端的連接請求;調用accept函數,確立連接;通過recv、send函數接收發送數據,與客戶端通訊。在網絡調試助手中確定客戶端和服務器的IP和端口號,輸入一行內容,可回顯服務器的響應,即將輸入內容打印出來,證明TCP通訊正常。

5 結語

在嵌入式操作系統和網絡協議棧百花齊放的今天,選擇一種簡單實用的網絡通訊方式能夠很大的提高產品的可靠性和質量。本文基于開源免費,移植簡單的FreeRTOS和LwIP協議棧,為嵌入式設備提供一種新的實現網絡通訊功能的設計流程,具有一定的參考價值。

參考文獻

[1]李少杰,馬曉輝.基于FreeRTOS和LwIP的SNTP設計[J].單片機與嵌入式系統應用,2013(09).

[2]謝鵬程.基于STM32和FreeRTOS的獨立式運動控制器設計與研究[D].廣州:華南理工大學,2012(05).

[3]余曉光.基于實時操作系統FreeRTOS的Lwip協議的移植研究[D].昆明:昆明理工大學,2013(04).

作者單位

國家海洋技術中心 天津市 300112

猜你喜歡
網絡通訊移植
“移植”瘦人糞便能減肥?
數控設備的數據傳輸技術淺探
基于現代網絡通訊工具的中醫診斷學教學實踐與探索
計算機遠程網絡通訊技術
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合