我有一个环形缓冲区,我希望通过串口接收一些字节。现在这些接收的字节由一个命令后跟数据字节组成。并且这些命令和数据组合中的每一个都可以具有不同的长度。我想实现一个方法,我可以从这个缓冲区复制一个命令并执行它。然后是下一个命令,依此类推。这样做的最好(也是最简单)方法是什么?
答案 0 :(得分:0)
简单的字节流就行了。实际上,您甚至可以将std::stringstream
上的包装器用作存储器作为存储器作为第一步:使用与串行端口通信的例程填充它,并使用指令解码器从中读取它。
答案 1 :(得分:0)
当你谈论环形缓冲区时,它可以像char [ring_size_in_bytes]和当前位置指示符int一样简单。从端口读取应该是逐字节的,当你到达缓冲区的末尾时,你从零开始。
我通常使用简单缓冲区来命令和从端口读取数据。在将数据从端口复制到小缓冲区后,我试图解释数据,试图找到命令的开始,然后开始放入缓冲区直到我检测到新的开始。然后我排队命令并重新开始。这构成了serice例程的上半部分(快速)。
串口非常慢,因此不存在您不能快速读取数据的风险。每次迭代(中断)都会给你几个字节......
我会使用封装你的命令的类型队列来存储收到的命令列表。
您的串行协议有多复杂?