• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于FreeRTOS的多連接TCP Server設(shè)計

    2023-09-23 12:55:00范亞南高軍科韓文斌魏亞偉
    儀表技術(shù)與傳感器 2023年8期
    關(guān)鍵詞:收發(fā)器PC機線程

    范亞南,高軍科,韓文斌,魏亞偉

    (中國航空工業(yè)集團(tuán)公司洛陽電光設(shè)備研究所,河南洛陽 471009)

    0 引言

    以太網(wǎng)通信具有抗干擾性、實時性和高速率等特點。面向復(fù)雜應(yīng)用環(huán)境設(shè)計的TCP/IP通信協(xié)議,具有自動糾錯功能,通信質(zhì)量穩(wěn)定,不易受外部環(huán)境干擾,已應(yīng)用于生產(chǎn)生活中的各個領(lǐng)域[1-3]。但是目前嵌入式系統(tǒng)的TCP/IP服務(wù)器,一般只能被單個TCP客戶端連接,未能充分體現(xiàn)TCP/IP協(xié)議的功能,不能滿足多個網(wǎng)絡(luò)節(jié)點同時連接、分布式通信架構(gòu)的現(xiàn)代化網(wǎng)絡(luò)通信需求[4]。

    本文提出了一種以高性能微處理器Cortex-M4芯片STM32F407VET6和以太網(wǎng)收發(fā)器LAN8742A為核心的網(wǎng)絡(luò)通信電路。通過FreeRTOS實現(xiàn)多線程任務(wù)管理與調(diào)度,并根據(jù)TCP客戶端連接情況,進(jìn)行網(wǎng)絡(luò)處理線程和數(shù)據(jù)內(nèi)存空間的動態(tài)管理,最大可實現(xiàn)4個客戶端的同時連接與數(shù)據(jù)通信?;谠揟CP Server的嵌入式系統(tǒng),能夠快速集成到網(wǎng)絡(luò)系統(tǒng)中,實現(xiàn)分布式系統(tǒng)構(gòu)建。

    1 系統(tǒng)總體設(shè)計

    如圖1所示,嵌入式TCP服務(wù)器由STM32F407VET6微處理器、以太網(wǎng)收發(fā)器LAN8472A、含網(wǎng)絡(luò)變壓器的RJ45連接器以及系統(tǒng)電源、時鐘分發(fā)等電路組成,并可通過RJ45連接器連接多個TCP客戶端。其中STM32F407VET6處理器內(nèi)部移植了FreeRTOS嵌入式操作系統(tǒng)和Lwip網(wǎng)絡(luò)協(xié)議棧,可實現(xiàn)多個外部TCP客戶端的同時連接。當(dāng)接收到客戶端的數(shù)據(jù)指令后,TCP Server通過Lwip完成用戶IP識別和數(shù)據(jù)緩存,并在任務(wù)處理線程中完成對用戶指令的響應(yīng)執(zhí)行和數(shù)據(jù)回傳。

    圖1 嵌入式TCP Server總體框圖

    2 硬件設(shè)計

    2.1 系統(tǒng)控制核心

    基于FreeRTOS的多連接TCP Server采用高性能且低功耗的STM32F407VET6處理器作為主控芯片。該芯片以ARM Cortex-M4為內(nèi)核,具有32位浮點運算單元(FPU)和自適應(yīng)實時加速器,可以從閃存0等待狀態(tài)執(zhí)行,具備內(nèi)存保護(hù)單元和數(shù)字信號處理DSP功能。STM32F407VET6時鐘頻率配置為168 MHz時,其運算能力高達(dá)210 DMIPS。除此之外,在接口方面集成了Ethernet、 USART、 FSMC、CAN等接口,能夠滿足各類嵌入式系統(tǒng)設(shè)計需求。

    2.2 LAN8742A通信模塊設(shè)計

    以太網(wǎng)電路由STM32內(nèi)部集成的MAC(媒體接入控制層)和低功耗高速網(wǎng)絡(luò)收發(fā)器LAN8742A(PHY物理層)、TVS二極管USBLC6以及RJ45連接器HR911105A組成。其中TVS二極管具有瞬態(tài)電壓抑制作用,主要防止網(wǎng)線熱插拔過程中的電壓浪涌沖擊。此外,HR911105A內(nèi)部集成網(wǎng)絡(luò)變壓器,可以隔離網(wǎng)線上連接的不同設(shè)備間電平不一致的影響,保護(hù)PHY不因外部網(wǎng)絡(luò)電壓不同而通信異常甚至燒壞電路。

    LAN8742A通過RMII接口與STM32連接。STM32為網(wǎng)絡(luò)通信設(shè)計了直接內(nèi)存訪問(DMA)功能,當(dāng)STM32內(nèi)部MAC接收到來自PHY傳遞的數(shù)據(jù)包后,將其通過FIFO傳遞到DMA,最終由DMA將以太網(wǎng)數(shù)據(jù)包直接傳遞給總線。同理,STM32對外發(fā)送的數(shù)據(jù),通過總線傳遞到DMA,進(jìn)而由DMA發(fā)送到PHY芯片LAN8742A,最終通過HR911105A連接器到達(dá)客戶端。

    STM32F407VET6內(nèi)部MAC和LAN8742A收發(fā)器均符合IEEE 802.3—2002標(biāo)準(zhǔn)的以太網(wǎng)協(xié)議,且支持10/100 MB/s的網(wǎng)速自動檢測適配功能,二者之間通過RMII接口連接。圖2為網(wǎng)絡(luò)通信電路原理圖,RMII接口的主要引腳定義如表1所示。

    表1 RMII接口主要信號說明表

    圖2 LAN8742A網(wǎng)絡(luò)收發(fā)器電路原理圖

    3 系統(tǒng)軟件設(shè)計與實現(xiàn)

    系統(tǒng)軟件使用STM32CubeMX界面化工具(以下簡稱CubeMX)和MDK-ARM集成開發(fā)環(huán)境(以下簡稱MDK)進(jìn)行程序設(shè)計。CubeMX是一種用于STM32系列MCU生成驅(qū)動配置和初始化代碼的圖形化工具,使用CubeMX在進(jìn)行管腳、時鐘、寄存器等硬件資源配置時,可自動進(jìn)行管腳重映射和時鐘倍頻計算,并對各硬件資源生成底層驅(qū)動代碼,可顯著提高系統(tǒng)軟硬件開發(fā)的工作效率。CubeMX支持一些常用的中間件,如RTOS、USB、 LwIP、 圖像和文件等。此外,CubeMX還支持MDK、IAR等工具鏈,便于不同IDE的新建工程或中途修改工程配置。MDK開發(fā)環(huán)境包含代碼編輯、編譯、調(diào)試、下載等功能,支持C語言、匯編語言編程,對STM32微處理器有良好的支持。使用CubeMX選擇MDK工具鏈配置并生成工程后,可以直接由MDK打開,其工程目錄如圖3所示。

    圖3 MDK打開CubeMX生成的代碼工程目錄

    3.1 FreeRTOS簡介與移植

    FreeRTOS操作系統(tǒng)是一個輕量級的嵌入式系統(tǒng),用C語言開發(fā),系統(tǒng)中的任務(wù)沒有數(shù)量的限制,并且支持優(yōu)先級調(diào)度算法,每個任務(wù)被賦予一定的優(yōu)先級,處理器會優(yōu)先執(zhí)行處于就緒態(tài)的優(yōu)先級最高的任務(wù);系統(tǒng)還支持輪換調(diào)度算法,允許不同的任務(wù)使用相同的優(yōu)先級,同一優(yōu)先級的任務(wù)可以共享處理器的使用時間[5-6]。

    本文使用CubeMx添加FreeRTOS系統(tǒng),主要需要配置的參數(shù)包括搶占式調(diào)度器、系統(tǒng)主頻、系統(tǒng)時鐘、最大優(yōu)先級號、堆大小等,最終會集中體現(xiàn)在FreeRTOSConfig.h文件中的相關(guān)宏定義。此外,FreeRTOS執(zhí)行需要在SysTick_Handler中斷函數(shù)中調(diào)用osSystickHandler(),其內(nèi)部修改了SVC_Handler和PendSV_Handler系統(tǒng)中斷,為實時操作系統(tǒng)構(gòu)建運行節(jié)拍。FreeRTOS主要包括list.c (內(nèi)核調(diào)度鏈表)、queue.c(隊列)、croutine.c(共享堆棧任務(wù))和task.c(任務(wù))等文件。本文使用獨立堆棧任務(wù)(task.c)建立多個任務(wù)線程,各任務(wù)線程之間支持搶占式調(diào)度。

    3.2 LwIP簡介與移植

    LwIP的資源開銷低、輕量化,是專為資源有限的嵌入式設(shè)備設(shè)計的,它以少量的資源消耗實現(xiàn)了較完整的TCP/IP協(xié)議棧,減少了對RAM的占用。此外LwIP既可以移植在RTOS里運行,也可無系統(tǒng)運行。LwIP具有內(nèi)存管理策略和數(shù)據(jù)包管理策略,數(shù)據(jù)處理效率很高。通過宏編譯可對LwIP代碼和內(nèi)核進(jìn)行裁剪,從而進(jìn)一步減少對資源的占用[7-8]。

    LwIP保留了TCP/IP協(xié)議的主要功能,支持UDP、TCP、IPv4、 ARP等協(xié)議,并提供了3種編程接口:Raw API、Netconn API和Socket API。 本文采用Socket API進(jìn)行編程,具有可讀性好,利于開發(fā)維護(hù)等優(yōu)點。Socket API執(zhí)行效率略低于另2種接口,需要在RTOS中構(gòu)建多任務(wù)執(zhí)行,其工作模式如圖4所示。

    圖4 基于RTOS多任務(wù)執(zhí)行的Socket通信

    本文使用CubeMX添加LwIP協(xié)議棧,其流程如圖5所示。CubeMX配置時需要注意ETH引腳、MAC地址、硬件校驗、DHCP關(guān)閉、RTOS使能等。關(guān)于TCP Server最大連接客戶端數(shù)量的設(shè)置最終會在opt.h中的MEMP_NUM_NETBUF和MEMP_ NUM_NETCONN體現(xiàn),本文設(shè)置為4。

    圖5 LwIP移植流程圖

    3.3 多客戶端連接的TCP Server

    基于STM32的嵌入式TCP服務(wù)器在工業(yè)領(lǐng)域具有一定的研究基礎(chǔ)和應(yīng)用,但其目前僅實現(xiàn)了面向單個客戶端TCP-Echo模式(點對點通信),未能充分發(fā)揮TCP通信能力,不能滿足分布式網(wǎng)絡(luò)化通信的應(yīng)用需求[9-10]。

    針對以上問題,本文結(jié)合工業(yè)網(wǎng)絡(luò)化通信需求,基于FreeRTOS和Lwip,開發(fā)了一種可同時連接4個客戶端的TCP Server系統(tǒng)軟件。軟件流程如圖6所示,在完成網(wǎng)口和串口等硬件初始化后,通過osThreate創(chuàng)建3個任務(wù)(TCP服務(wù)、系統(tǒng)業(yè)務(wù)、任務(wù)監(jiān)控),然后執(zhí)行osKerne1Start開啟任務(wù)調(diào)度,使各個任務(wù)以10 ms周期循環(huán)執(zhí)行。

    任務(wù)1基于socket實現(xiàn)TCP Server任務(wù):創(chuàng)建socket;調(diào)用bind()綁定IP和Port;調(diào)用listen()監(jiān)聽客戶端的連接請求;調(diào)用accept()建立新連接,并調(diào)用

    圖6 系統(tǒng)軟件流程圖和TCP Server任務(wù)流程圖

    sys_thread_new()為新連接的客戶端動態(tài)創(chuàng)建子線程并為客戶端開辟內(nèi)存空間pvPortMalloc();動態(tài)子線程個數(shù)取決于所連接的客戶端數(shù)量(最大4個),當(dāng)檢測到有客戶端斷開連接后則調(diào)用vTaskDelete()銷毀線程并釋放相應(yīng)內(nèi)存vPortFree();在子任務(wù)中通過recv()、send()接收并發(fā)送數(shù)據(jù),解析的指令傳送到任務(wù)2中由業(yè)務(wù)線程進(jìn)行執(zhí)行。

    任務(wù)2作為業(yè)務(wù)線程,按照客戶端指令循環(huán)執(zhí)行嵌入式系統(tǒng)功能性任務(wù)。任務(wù)3作為任務(wù)監(jiān)控線程,主要完成各線程狀態(tài)監(jiān)控和系統(tǒng)狀態(tài)監(jiān)控,并通過串口上報系統(tǒng)運行信息。

    4 系統(tǒng)測試及集成應(yīng)用

    4.1 通信測試

    圖7為對嵌入式TCP Server的網(wǎng)絡(luò)測試實驗圖。其中TCP Server的IP為192.168.1.31,端口:2000,PC機作為客戶端,其物理網(wǎng)卡地址為192.168.1.50。在PC機的Windows控制臺中使用“ping 192.168.1.31 -t”命令測試網(wǎng)絡(luò)是否連通。通過Windows控制臺輸出可以看到,PC機發(fā)送的32 bit的數(shù)據(jù)均成功返回,耗時均小于1 ms,整個過程的數(shù)據(jù)收發(fā)正確,丟包率為0%。

    圖7 TCP Server通信測試實驗圖

    對于多客戶端連接測試,可采用多個物理PC機同時打開網(wǎng)絡(luò)調(diào)試助手作為客戶端連接到TCP Server。本文通過在一個物理PC機上創(chuàng)建多個虛擬機的方式,利用多個虛擬機的多個虛擬網(wǎng)卡進(jìn)行多客戶端連接測試。圖8所示為IP 92.168.1.51的虛擬機中的客戶端與TCP Server的數(shù)據(jù)通信測試圖。

    圖8 TCP Server與客戶端數(shù)據(jù)通信測試圖

    4.2 分布式系統(tǒng)集成應(yīng)用

    本文設(shè)計的TCP Server 作為云臺控制單元已應(yīng)用于一款分布式網(wǎng)絡(luò)架構(gòu)的掛軌型巡檢機器人,該系統(tǒng)的網(wǎng)絡(luò)交聯(lián)關(guān)系如圖9所示。其中TCP Server云臺控制單元可同時連接并響應(yīng)來自系統(tǒng)的主控模塊、行走升降模塊、遠(yuǎn)程監(jiān)控后臺,以及調(diào)試計算機的控制指令,并在其內(nèi)部的系統(tǒng)業(yè)務(wù)線程(任務(wù)2)中完成三軸云臺方位、左臂俯仰、右臂俯仰的角度控制[11]。

    圖9 嵌入式TCP Server的多連接應(yīng)用案例示意圖

    5 結(jié)束語

    本文針對目前工業(yè)設(shè)備分布式網(wǎng)絡(luò)通信需求,設(shè)計了一種基于STM32,可最大支持4個客戶端同時連接訪問的嵌入式TCP Server模塊。目前,該TCP Server模塊已作為云臺控制單元集成于一款分布式架構(gòu)的光電檢測機器人中,完成三軸云臺控制功能。經(jīng)測試,該TCP Server具有工作穩(wěn)定、響應(yīng)實時的特點,在嵌入式控制系統(tǒng)中應(yīng)用該TCP Server的軟硬件方案,可有效提升系統(tǒng)的通信能力、拓展性和可維護(hù)性。

    猜你喜歡
    收發(fā)器PC機線程
    清管球收發(fā)器設(shè)計細(xì)節(jié)分析及應(yīng)用
    基于PC機與單片機的多機通信技術(shù)及抗干擾方法
    基于三菱FXPLC的感應(yīng)淬火機床與PC機的串行通信實現(xiàn)
    Virtex5 FPGA GTP_DUAL硬核兩個收發(fā)器獨立使用的實現(xiàn)
    淺談linux多線程協(xié)作
    VC.NET下實現(xiàn)dsPIC單片機與PC機的通信
    電子制作(2017年23期)2017-02-02 07:16:47
    Linux線程實現(xiàn)技術(shù)研究
    富士通半導(dǎo)體推出收發(fā)器家族全新LTE優(yōu)化多頻單芯片MB86L13A
    么移動中間件線程池并發(fā)機制優(yōu)化改進(jìn)
    光纖收發(fā)器常見故障原因
    义乌市| 深水埗区| 宣化县| 合阳县| 虞城县| 大姚县| 大化| 滦南县| 靖江市| 桐乡市| 宝应县| 惠安县| 响水县| 平度市| 高安市| 莆田市| 临泉县| 兴化市| 安塞县| 九江市| 吉安市| 阿城市| 栾城县| 曲靖市| 沙洋县| 平舆县| 枣庄市| 广平县| 松潘县| 霞浦县| 温泉县| 兴业县| 高青县| 梁平县| 泽州县| 河源市| 黄山市| 巫溪县| 家居| 闽清县| 渝北区|