c - 两个软件实体(Uart/I2C/等)之间串行通信的简单实现

标签 c embedded protocols

我完成了许多项目,其中包括 PC 和 arduino/PLC/某种其他微 Controller /处理器,在每个项目中,我们都有不同的协议(protocol)用于 PC 应用程序和嵌入式应用程序之间的通信。通常,硬件/ Controller 开发人员会发明一个简单的协议(protocol),该协议(protocol)在整个项目中始终会发生变化,并采用以下形式:

Barker | Size | Data | Checksum

这次我要实现双方,所以我想 - 这已经被做过一百万次了。这些东西必须有一个基本协议(protocol),并用 C、C#、Java 等实现。 我正在寻找一个轻量级层,它将基于流的串行通信传输为基于消息的通信。

我已经四处寻找了一段时间,但我自己找不到任何东西。 你碰巧认识一个吗?

最佳答案

我对最近的一个项目有完全相同的要求,但我发现对于低端 8 位微 Controller 来说没有什么足够简单的。因此,我设计了 MIN(微 Controller 互连网络)来完成这项工作(受到 CAN 和 LIN 的启发)。

代码位于 github 上:https://github.com/min-protocol/min (查看那里的维基)。

我定义了第 0 层(UART 设置)和第 1 层(帧层,带有校验和等)以及 C API。

我还在研究一个更高的层,它正式定义如何打包传感器数据(温度、压力、电压等),并使用 JSON 表示形式和自动生成嵌入代码以从帧中打包/解包它们的工具。最终目标是创建一个 Wireshark 解析器,它可以夹在串行线上,并且在输入 JSON 时将以人类可读的形式显示信号。

我写了一篇博客文章,展示了在 Arduino 板上运行的 Hello World 应用程序(使用 FTDI UART-USB 分线板将数据传送到我的主机 PC):

https://kentindell.wordpress.com/2015/02/18/micrcontroller-interconnect-network-min-version-1-0/

这个系列问题经常发生,如果我们作为一个社区能够解决这个问题,而不是为每个项目都重新编码,那就太好了。

关于c - 两个软件实体(Uart/I2C/等)之间串行通信的简单实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29385342/

相关文章:

c - 头文件中的缩写结构重新定义是否符合标准?

c - 在几个 header 中重新定义 'struct timeval'

c - C中的ascii文件处理

c - 有没有一种程序化的方法来检查堆栈损坏

c - 没有 malloc AVR 的共享指针

c - 在C中高效地遍历排序数组

c - 什么是 "stack thrash"?

swift - 快速理解协议(protocol)扩展

swift - Swift 3 中泛型协议(protocol)内部的泛型协议(protocol)

swift - 使用关联类型的 Swift 中的协议(protocol)一致性问题