2017-06-22 127 views
1

我有一个环形缓冲区,我想在其中放置通过串行端口接收的一些字节。现在这些收到的字节由一个命令后跟数据字节组成。而且这些命令和数据组合中的每一个都可以具有不同的长度。我想实现一种方法,我可以从这个缓冲区复制一个命令并执行它。然后下一个命令等。什么是最好的(也是最简单的)做法呢?实现命令队列

+1

你的问题是什么,你需要展示你做了什么。 –

+0

*什么是最好的(最简单的)做法?* - “最好”和“最简单”都是主观的。 – PaulMcKenzie

+0

使用TLV结构封装您的命令。 https://stackoverflow.com/questions/tagged/tlv – Amadeus

回答

0

简单的字节流将做。实际上,您甚至可以使用一个包装器,将std::stringstream作为第一步,将字节流用作存储器:填充与串口通信并通过指令解码器读取的例程。

0

当你谈论环形缓冲区时,它可以像char [ring_size_in_bytes]和当前位置指示符int那样简单。从端口读取应该是逐字节的,当你到达缓冲区的末尾时,你从零开始。

我通常使用简单的缓冲区命令和从端口读取数据。在将数据从端口复制到小缓冲区后,我立即解释数据,试图找到命令的开始,然后开始放入缓冲区,直到检测到新的开始。然后我排队命令并重新开始。这构成了serice例程的上半部分(快速)。

串行端口非常慢,因此不会有足够快的速度读取数据的风险。每次迭代(中断)会给你几个字节...

我会使用封装你的命令的类型的队列来存储接收到的命令列表。

串口协议有多复杂?