实现命令队列

时间:2017-06-22 14:40:48

标签: c++ buffer

我有一个环形缓冲区,我希望通过串口接收一些字节。现在这些接收的字节由一个命令后跟数据字节组成。并且这些命令和数据组合中的每一个都可以具有不同的长度。我想实现一个方法,我可以从这个缓冲区复制一个命令并执行它。然后是下一个命令,依此类推。这样做的最好(也是最简单)方法是什么?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

串口非常慢,因此不存在您不能快速读取数据的风险。每次迭代(中断)都会给你几个字节......

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

您的串行协议有多复杂?