我通常使用硬连线的串口连接嵌入式设备,用于自定义命令/响应/状态协议。
在这个应用中,我计划使用Microchip TCP/IP堆栈和Wi-Fi模块没有操作系统来交换短(≤100字节)的命令和响应。
该堆栈已在Microchip以太网开发套件上运行,并且我可以从我的桌面ping它(尚未使用Wi-Fi模块)。
我想我可以入侵ping(Microchip为堆栈提供c源代码)并添加所需的消息,但我正在寻找正确/最简单/最佳的方法。
我通常使用硬连线的串口连接嵌入式设备,用于自定义命令/响应/状态协议。
在这个应用中,我计划使用Microchip TCP/IP堆栈和Wi-Fi模块没有操作系统来交换短(≤100字节)的命令和响应。
该堆栈已在Microchip以太网开发套件上运行,并且我可以从我的桌面ping它(尚未使用Wi-Fi模块)。
我想我可以入侵ping(Microchip为堆栈提供c源代码)并添加所需的消息,但我正在寻找正确/最简单/最佳的方法。
正确/最简单/最好并不一定相同。但如果我是你,我会考虑使用UDP而不是TCP。
UDP是一种数据报协议;TCP是面向流的,并且具有更多的开销(和与开销相关的好处)。 但UDP更接近于您今天拥有的当前串行端口字节导向(分组导向)方法。
很可能您有一些更高级别的协议,该协议从UART接收/缓冲/校验/分隔/解析数据流。 如果您使用UDP,则可以使用精简,轻量级的UDP实现来很好地模拟此操作。 使用UDP,您只需射出字节(数据包)并祈祷它们到达另一端(非常类似于串行)。
TCP是一种较重的基于连接的协议,具有内置的重发,确认,按顺序传递,计时器,退避算法等。 在我使用TCP(几个不同的堆栈)的大多数嵌入式系统中,UDP比TCP更轻巧且在代码大小和吞吐量方面表现更佳。
还要记住,TCP用作Internet的骨干网络;一些数据包通过十几个或更多跳(路由器/网关)传递到最终目的地。 很多地方可以丢掉数据包,因此TCP可以透明地处理很多混乱的细节。 我猜在您的系统/情况下,我们正在谈论一个LAN(每个人都在同一条线上),传输将非常可靠...因此TCP开销并不是必需的。
有时TCP的好处使得开销合理,但根据您的写作,我认为您应该考虑基本的UDP数据报设置。 只需搜索“简单的UDP示例”,您就会看到基本结构。 例如,这里是一个简单的UDP客户端/服务器示例,只使用43行(服务器)和30行(客户端)。