一种在嵌入式设备上将字节流转换为C89中的数据包流的方法

Pio*_*pla 11 c embedded communication c89

我正在研究一种使用rs232(rs232 over USB)连接到PC的嵌入式设备.

我正在考虑开发自己的协议:

<MAGIC><LENGTH><BINARY DATA><CRC>

但我不想重新发明轮子.

注意:我正在考虑相当受限的设备:4kb的RAM,没有内核,也没有标准的C lib.

你能想到一个标准的方法(也许是开源库)吗?

如果您编写自己的解决方案,是否有任何最佳实践?

  • 你是否也在包的末尾使用MAGIC字节?
  • 也许最好使用时间间隔而不是分隔符?
  • 如何在流二进制数据中找到包的开头?
  • 也许最好使用文本协议?

更新: 请重新阅读问题.我不应该要求图书馆,而是要求良好做法.

Ste*_*off 4

请参阅我对有关简单协议细节的一个非常相似的问题给出的答案。

回应您的具体观点:

  1. 数据包末尾的“魔术”字节不会造成任何损害,但如果您已经知道数据包应该有多长并且有 CRC,那么它们就是多余的。
  2. 指定超时时间是明智的,因此如果一个数据包内的字节之间存在太大的间隙,则会标记一个错误。使用过Modbus后,我不相信在其他地方使用基于时间的分隔符的价值。
  3. 您的意思是“如何在二进制数据流中找到数据包的开头”?如果是这样,可以指定数据包之间的最小间隙,和/或要求接收者在每个数据包后进行确认。
  4. 使调试更容易,并且不需要PC上任何特殊软件,但效率不是很高。当然,如果可用性比效率更重要,那么基于文本的系统是完全合适的。