一种在嵌入式设备上将C89字节流转换为包流的方法
我正在使用使用 rs232(通过 USB 的 RS232)连接到 PC 的嵌入式设备。
我正在考虑开发自己的协议:
但我不想重新发明轮子。
请注意:我正在考虑非常受限的设备:4kb RAM,没有内核,也没有标准 C 库。
您能考虑一个标准方法来做到这一点(也许是开源库)?
如果您编写自己的解决方案是否有任何最佳实践?
- 您是否也在包的末尾使用 MAGIC 字节?
- 也许使用时间间隔而不是分隔符更好?
- 如何在流二进制数据中找到包的开头?
- 也许使用文本协议更好?
更新: 请重新阅读问题。 我不应该要求图书馆,而应该要求良好的实践。
I’m working on with an embedded device that is connected to PC using rs232 (rs232 over USB).
I’m thinking about developing my own protocol:
<MAGIC><LENGTH><BINARY DATA><CRC>
but I don’t want to reinvent the wheel.
Please note that: I'm thinking about quite restricted device: 4kb of RAM, no kernel, nor standard C lib.
Can you think about a standard way to do this (maybe open source library)?
If you code your own solution do have any best practices?
- Do you use MAGIC bytes also at the end of packages?
- Maybe it is better to use time gaps instead of delimiters?
- How do you find the beginning of packages in a stream binary data?
- Maybe it is better to use text protocols?
UPDATE:
Please re read the question. I shouldn't ask for library but for good practices.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
请参阅我对一个非常相似的问题给出的答案关于简单协议的细节。
回应您的具体观点:
See this answer I gave to a very similar question regarding details of a simple protocol.
To respond to your specific points:
对于这样的事情,当您获得可在您的设备上运行的现有解决方案时,重新发明轮子会更容易。
或者也许我低估了你的问题。 如果您正在寻找如何生成 RS232 位,请查看微控制器数据表。
For something like this by the time you get an existing solution to work on your device, it would have been easier just to reinvent the wheel.
Or maybe I am underestimating your problem. If you're looking for how to generate the RS232 bits look in your microcontrollers datasheet.
除了 I/O 原语之外,唯一的事情就是 CRC 计算。 这里有一篇带有代码的精彩文章。
About the only thing there beyond your I/O primitives is going to be the CRC calculation. There's a nifty article, with code, here.