开源改变世界

Grbl 的字符计数协议 #110

推推 grbl 3年前 (2023-01-21) 99次浏览

关闭
luben111 打开了这个问题 2017 年 1 月 27 日 · 1条评论

注释

Grbl 的字符计数协议 #110

在 Grbl 的字符计数协议https://github.com/grbl/grbl/wiki/Interfacing-with-Grbl的描述中,显示了发送 25、40、31、58 和 20 个字符时的示例。PC 端的算法计算发送的字节数并知道哪些命令保留在 GRBL 串行缓冲区中,每个 GRBL 响应都表明处理了栈顶命令并且串行缓冲区中的空间增加了该特定命令的字节数。

这是我的问题 – 如果 PC 发现缓冲区中没有足够的空间来发送下一行但仍有一些可用空间,是否不值得部分发送下一行以及响应何时发送剩余字节?我不明白等待缓冲区有空间容纳一整行以便发送它的意义所在,相反,我们可以用新行的一部分填充串行缓冲区,并在收到响应后发送剩余的字节。

例如,当使用 127 字节缓冲区发送 25、40、31、58 和 20 个字符时:

  1. 我们发送 25、40 和 31 – 总共 96 个(缓冲区中剩余 31 个字符)
  2. 我们没有等待响应,而是从下一行 58 个字符开始发送 31 个字符——一旦收到响应,我们需要发送 27 个字符而不是 58 个字符。

这种方式的好处是通信吞吐量会增加,变得接近硬件握手,代价是在PC端处理稍微复杂一些。

Grbl 的字符计数协议 #110
贡献者

@luben111: 没有理由说它在任何时候都无法正常工作。但实际上,您通常只谈论十几个字节左右,因为典型的行就是这个大小。性能的提高将非常小,并且只会在会耗尽缓冲区的极其苛刻的工作中出现。我只是发现在处理单行时编写流式脚本更容易。所以这就是卡住的原因。

喜欢 (0)