embedded - 微 Controller 到微 Controller 通信库(通过 UART/RS232)

标签 embedded ipc rpc microcontroller uart

我想将两个微 Controller 与一个 UART 接口(interface)连接起来,并搜索一个协议(protocol)以在它们之间交换数据。

在实践中,我想定期交换数据(即:传感器读取)以及事件数据(GPIO 状态)。我每 100 毫秒有大约 100-200 个字节要交换。

有人知道实现这种任务的协议(protocol)或库吗?

现在,我看到了 protobuf 和 nano protobuff 吗?还有别的吗?
如果我可以在 UART 上添加一个软件层并使用“虚拟数据流”,就像它是到 N 个端口的 TCP/IP 连接一样,那就太好了。

任何的想法 ?
谢谢

最佳答案

我认为最直接的方法是自己动手。

您可以在制造商芯片支持库中找到 RS232 驱动程序。

RS232 是一种面向流的传输方式,这意味着当您发送消息并在接收方检测帧边界时,您需要将消息编码为某种帧结构。一个聪明且易于使用的机制是“一致的开销字节填充”。

https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing

这个简单的算法将消息中的零转换为其他值,因此零字节可用于检测帧的开始和结束。如果一个字节在途中损坏,您甚至可以重新同步到流并继续前进。

即使对于最小的微处理器,维基百科上的代码也应该足够简单。

之后,您可以定义您的消息格式。您可以保持它非常简单,并按原样直接发送您的数据结构。

简单消息格式的建议:

Byte-ID   Meaning
---------------------------------
0         Destination port number
1         message type (define your own)
2 to n    message data

如果您想发送可变长度的消息,您可以发送一个长度字节,或者从 Constant Overhead Byte Stuffing 帧的输出中获取长度。

顺便说一句,UART/RS232 很好用,也很容易使用,但您可能还想看看 SPI。 SPI接口(interface)更适合在两个微 Controller 之间交换数据。它通常比 RS232 更快并且更强大,因为它具有专用的时钟线。

关于embedded - 微 Controller 到微 Controller 通信库(通过 UART/RS232),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426400/

相关文章:

c++ - 如何衡量应用程序每秒可以产生多少结果

c# - 命名管道示例

concurrency - Erlang的rpc的区别:multicall/4 vs rpc:pmap/3

c# - C# 应用程序和非托管 C++ 应用程序之间的进程间通信

c# - 如何编写 C# 客户端 RPC 到远程 native C++ 服务器?

c - 如何正确初始化一个字符串,该字符串是 ANSI-C 中 RPC 自动生成结构的字段

Java 嵌入式应用程序 - 设备需要什么

linux - 有没有复制更新替代命令?

c - 减少 C 结构体的 RAM 消耗

c - KDS——最终启动顺序错误