我通常使用嵌入式设备之间的硬连线串行端口连接来实现自定义命令/响应/状态协议.在这个应用程序中,我计划使用微芯片TCP/IP堆栈和没有操作系统的 Wi-Fi模块来交换短(<= 100字节)命令和响应.堆栈已在微芯片以太网开发套件上启动并运行,我可以从我的桌面ping它(暂时不使用Wi-Fi模块).我想我可以入侵ping(微芯片提供堆栈的c源)并添加我需要的消息,但我正在寻找正确/最简单/最好的方法.
正确/最简单/最好不一定是一回事.但如果我是你,我会考虑使用UDP而不是TCP.
UDP是数据报协议; TCP是面向流的,并且具有更多的开销(以及开销带来的好处).但UDP更接近当前串行端口面向字节(面向分组)的方法.
有可能你有一些更高级别的协议接收/缓冲/校验和/分隔/解析你从UART收到的数据流.如果您使用UDP,您可以使用精简,轻量级的UDP实现很好地模仿它.使用UDP,你只需要射出字节(数据包)并将手指交叉到另一端(很像串行).
TCP是基于重量级连接的协议,具有内置重发,确认,按顺序传送,定时器,退避算法等.在大多数嵌入式系统上,我使用过TCP(几种不同的堆栈),UDP是重量轻,在代码大小和吞吐量方面优于TCP.
另外不要忘记TCP被用作互联网的骨干; 一些数据包通过十几个或更多跳(路由器/网关)到达最终目的地.数据包被丢弃的地方很多,所以TCP透明地处理了很多混乱的细节.我猜你的系统/情况,我们谈的是局域网(每个人在同一条线路上),传输将非常可靠......因此TCP开销并不是必需的.
有时候TCP的好处证明了开销是合理的,但是根据你的编写,我认为你应该考虑建立一个基本的UDP数据报.只需谷歌"简单的udp示例",你就会看到基本的结构.例如,这是一个简单的UDP客户端/服务器示例,仅使用43行(服务器)和30行(客户端).