轻量化TCP/IP客栈是TCP/IP协定的精简实作,专门计划用来缩减RAM内存的应用量,这使其十分合适用在嵌入式体系。它供给三种奇特的利用顺序编程接口(API):? 未封装的低阶API? 担任收集通信的高阶 API? BSD 作风的socket套接字 API本文专一探究应用未封装API接口的典范。应用未封装API建置callback回调函数的利用顺序会由中心变乱触发。只管未封装API较socket套接字API更为庞杂,但因为其处置负荷(overhead)较低,因而能供给超过很多的吞吐量。接着将探究多少个建构在lwIPTCP/IP客栈之上的典范,此中采取Analog Devices的MAX32570微把持器。开端的局部是一个ping展现,重要从PC向安装发送ping探测讯号。后续的局部先容TCP Echo效劳器典范,这个开端的效劳器展现对测试TCP贯穿连接相称适用。 ADI的MaximSDK软件开辟东西包收录很多须要的软件与东西,让用户针对ADI的MSX32xxx微把持器开辟韧体。套件中有一个lwIP客栈函式库档案「MaximSDKLibrarieslwIP」。图一表现MaximSDK文件夹构造中的lwIP函式库档案。 本文援用地点:图一 : ADI的MaximSDK lwIP 函式库档案lwIP文件夹包括多个子目次: ? API 文件夹(收集通信与 socket 套接字API)? 中心文件夹(lwIP 中心档案,包括 “tcp.c”、“ip.c” 等)? Netif 文件夹(收集接口档案)? Include 文件夹(全部lwIP include 引入档案)? Maxim文件夹(为ADI微把持器计划的客制化mac 驱动顺序)lwIP架构依循TCP/IP模子构造。TCP/IP通信协定是多个分层构成的协议。TCP/IP平日被当作是一个四层构造的体系,如图二所示。 图二:TCP/IP通信协定分层lwIP 名目档中必定有一个名为「lwipopts.h」的组态档案,以及一个名为「opt.h」的组态档案。「opt.h」档案中记载全部默许的客栈组态以及其模块组态,而「lwipopts.h」则让用户能自行设定客栈与其模块的全部组态。须留神这个档案并未包括全部可能的lwIP选项。因而,假如在“lwipopts.h”组态档案中不界说某项组态,体系就会采取「opt.h」中界说的预设组态。相似的情形,lwIP函式库有一个跟顺序相干的表头文件名为 「lwipcfg.h」。包含把持器的IP地点、网关地点、收集屏障地点、以及MAC地点都应界说在「lwipcfg.h」档案。要在lwIP以及底层的硬件驱动顺序之间树立链接,须要用到一个特定平台专属的配接层。举例来说,在为微把持器建置lwIP客栈时,须要量身计划的驱动顺序来桥接lwIP客栈与微把持器的以太收集MAC驱动顺序。这个客制化驱动顺序应涵盖以下功效:? 初始化功效: 此项功效担任初始化微把持器专属的MAC驱动顺序? 传递功效: 将从TCP客栈收到的数据传递赐与太收集MAC驱动顺序,以便停止后续的传输? 接受功效: 将从以太收集MAC驱动顺序收到的封包转送到TCP客栈对ADI微把持器,预存的客制化驱动顺序已放在「MaximSDKLibrarieslwIPMaximmxc_eth.c」门路下的MaximSDK。这个驱动顺序可作为包装器,能包装微把持器自身的Ethernet MAC (EMAC)外围函式库,该函式库位于「C:MaximSDK LibrariesPeriphDriversSourceEMAC」门路下的外围驱动顺序中。Ping 典范「ping」指令是一个简略的东西,用来停止收集除错。其能履行因特网把持讯息协定(ICMP)的echo 呼应恳求,向指定的IP地点传递一个讯号而后等待复兴。当目标地收到这个恳求,就会复兴一个echo封包。本章节说明怎样从Windows PC向微把持器履行基础的ping测试以检讨其贯穿连接状况,同时还会论述怎样应用微把持器的ping模块来跟PC停止通信。以下详列Windows情况中ping东西的任务流程:? 向微把持器传递4个数据封包,而后等候呼应? 微把持器将这些数据封包传回PC作为呼应,亦即反响回答恳求。? 履行ping测试? 应用以太收集线将微把持器EVKIT套件连到PC? 开启下令行提醒窗口,而后输入「ping 微把持器的IP地点 」而后按下enter键下令行提醒窗口中表现呼应,如图三所示,意谓着在PC与微把持器之间已树立畸形运转的贯穿连接 图三:下令行提醒窗口表现的Ping输出内容从微把持器测试Ping 「lwIP_Ping」档案是ADI旗下MAX32570微把持器的ping典范,收录于MaximSDK开辟东西包。该档案寄存在「C:MaximSDKExamples MAX32570lwIP_Ping」,目次中并供给以下指南:? 微把持器的IP地点是应用「lwipcfg.h」档案来设定。微把持器与PC的IP地点应在统一个网段。在微把持器的「lwipcfg.h」档案中,PC的IP地点应设定成网关地点。? 应用以太收集线衔接PC与MAX32570 EVKIT套件? 履行ping典范码? 在eclipse顺序中开启序列终端机 (Window- Show view - Terminal)。如图四所示,假如ping胜利,终端机画面应表现ping的成果 图四:序列终端机表现的Ping输出内容下令行提醒窗口仅表现ping统计数据。要检视现实传递的数据,须要用到一个名为Wireshark的顺序。Wireshark能撷取收集联机所传递的数据。开启Wireshark后,再抉择以太收集选项。别的还能表现像是起源与目标地MAC地点、起源与目标地IP地点、通信协定、以及额定传递数据等细部数据。Wireshark表现的信息如图五所示。 正如典范所示,传递的数据为 0x00, 0x01… 始终到0x1F。但假如用户想要修正传递数据的内容那该怎样做? 图五:Wireshark顺序中表现的ping数据封包修正微把持器Ping指令所发送的数据 透过ping指令收回的数据是在「ping. c」档案中设定的。「Ping.c」档案是ping的传递顺序模块。要传递的数据巨细是以「PING_DATA_SIZE」参数设定在“ping.c”档案中。比方要传递的数据巨细为32 字节。筹备要传递的数据的界说亦写在「ping.c」档案。额定的数据缓冲区会写入雷同的数据,如「0x00, 0x01, 0x02…to 0x1F.」。根据利用顺序的需要,假如用户想要修正数据,能够在「ping .c」档案中修正数据缓冲区。举例来说,将全部32字节的数据变革成「0x01, 0x01…0x01」。在Wireshark中表现修正后的「ping .c」档案。此处应用新的参数来更新数据。TCP Echo 效劳器ping典范中采取ICMP来断定目的体系的反映状态。其会应用默许数据透过收集向目的接受端传递一个echo恳求。当目的地点收到这个恳求时,它会复兴一个echo应对封包。假如用户盼望从某个安装向另一个安装传递客制化数据,可应用TCP协定停止数据传输。在尺度TCP函式中的Echo效劳重要用来检讨可及性以及断定种种路由成绩。在这项效劳中,效劳器与客户端都是应用TCP来树立的。当效劳器从客户端收到讯息,它会复兴雷同的讯息。在MaximSDK,「lwIP TCP」原始码档案展现怎样应用lwIP函式库中的 TCP函数。在这个案例中,微把持器表演TCP效劳器,并会等待客户端发送衔接恳求。接着效劳器会返传从客户端送来的数据。在TCP Echo效劳器典范中,应应用「tcpecho_raw.c」原始码档案。依循以下步调设定TCP Echo效劳器。要设定TCP Echo效劳器: ? 树立一个 socket? 将socket绑定到宣布的埠号? 实现绑定后,其会开端监听传来的衔接恳求? 收到衔接恳求后,其会接收客户端装备发送来的衔接恳求? 效劳器接受到客户端传来的数据? 最后,其传回雷同的数据图六的剧本表现了韧体的构造,该构造是主函数的一局部。config_emac会初始化EMAC,而MXC_ETH_Init 则会初始化 lwIP客栈。 图六:从剧本片段察看韧体的构造在EMAC与lwIP客栈实现初始化后,TCP Echo 效劳器会透过tcpecho_raw_init停止初始化。Echo效劳器构造如图七所示。 图七:Echo效劳器初始化构造.Echo效劳器的初始化会树立新的socket。之后它会将指定的IP地点跟端标语绑定到新的socket。实现绑定后,其会连续监听近程客户端发送的衔接恳求。要测试TCP效劳器典范,须应用 echotool.exe PC 客户端东西。echotool.exe履行档应寄存在C槽,故咱们应从C槽开启下令行提醒窗口。在客户端形式中,其会将数据传递到效劳器并检讨能否会回传。确保必定要在客户端形式中应用echo东西来测试效劳器典范。怎样测试 TCP Server 典范? 确保全部贯穿连接都畸形运转 ? 应用eclipse软件将典范顺序代码组建成可履行顺序? 在除错形式中履行剧本? 在近程PC开启下令行提醒窗口。 ? 在下令行提醒栏中输入以下指令: 「C: echotool IP_address /p tcp /r 7 /n 15 /t 2 /d LwIP TCP echo server Example」IP_address 是现实的机板IP 地点。静态 IP 地点为192.168.100.200/p tcp 是通信协定 (TCP协议)/r 是回应效劳器的现实近程通讯埠 (echo port)/n 是echo恳求的数目/t 是衔接时长限度的秒数 /d 是恳求呼应的讯息 (像是 「LwIP TCP echo server Example」) 图八:TCPEcho效劳器输出内容TCP协定跟透过收集传递的数据,都可透过Wireshark软件停止测验。透过收集传递的封包在会Wireshark中表现,如图九所示。透过下令行提醒栏传递的数据为「LwIP TCP echo server Example」。在Wireshark顺序中也能看到雷同的数据。 图九:Wireshark顺序中的TCPEcho效劳器输出成果总结懂得并无效率地应用lwIP客栈的功效以及ICMP协定为基本的ping东西跟TCP协定,能为收集诊断以及数据传输首创出浩繁的可能性。ADI的MAX32570微把持器与MaximSDK 供给一个踏实的基本来建置lwIP客栈,并建构牢靠的通信体系。藉由依循本文罗列的典范,即可消除种种收集成绩,进而发明无缝的链接以及确保数据完全性。(本文作者Anju Puthenpurayil为ADI利用工程师)