对话
@ashelly: 感谢您的努力! |
别客气。这主要是出于自身利益——我想通过某种方式在我每天乘坐火车时测试我的 grbl 客户端。 我真的很欢迎反馈。这个版本理论上比旧版本对实际硬件更准确,但由于它几乎实时运行,它也更慢。我想看看这是否会影响其他用户。(而且我很想听听关于加快批处理模式的想法——我的尝试收效甚微。) |
@ashelly: 自利是一个很好的动力。:) 这几乎就是我过去几年一直在开发 Grbl 的原因。大多数其他东西都是乱七八糟的。也不是说 Grbl 是完美的,但至少我有一些控制权,并且可以说它是如何以一种有意识的方式进行的。 我还没有机会使用你的代码,但我对 sim 代码本身也不是很熟悉。这是延斯的领地。@jgeisler0303您有时间看一下新的 SIM 卡代码并就此发表一些评论吗? |
今天早上我正在使用 .9f。我花了一些时间在 .9a 上,现在我已经跳到 .9f 了。我在 Delphi 中创建了自己的界面,并意识到 F 发生了很大变化,我不得不调整我的界面。大家都用什么直接发文件给这个?是环球还是别的?.9A 有点挂断了我,所以我想看看 .9f 是否有同样的问题。如果是,那么我知道这是我的界面。我还下载了测试 Gcode 文件来玩。 |
好的,我试试看。我应该检查 dev 上的当前 HEAD 吗? |
@jgeisler0303: 谢谢!dev 分支不再存在。一切都被推送到边缘分支,那里一切都是最新的。 |
现在我第一眼看到了,我必须说我印象非常深刻!仅提及几件事:
我也用 MinGW 编译模拟器没有问题。但似乎只听控制台,所以重定向或管道 实时功能可能非常有用,但我对 grbl_sim 的初衷是想办法快速获得准确的刀具路径。所以,如果有“比实时快得多”的选项就好了。所以我改变了
无论如何,伟大的工作,绝对是要走的路!稍后再打给你。 |
@jgeisler0303,感谢您抽出宝贵的时间来查看此内容,并提供如此好的反馈。 很抱歉在 MingW 上破坏了 sim.bat – 我以为我已经测试过了,但显然没有。
并且仅 关于比实时更快的速度。我不得不承认,它也没有按我预期的方式工作。在您发表评论后,我回去再次查看了它。我尝试了您提到的相同印刷品并得到了类似的结果:~1800。1800 滴答声 / 16MHz = 112 微秒/ 我认为正在发生的事情是它可以跟上实时,但没有太多余地。完成一个循环有最短时间。它至少可以在那个时间内模拟相应数量的arduino CPU ticks。但是当你增加 我将尝试一直在 float 中进行计算,并试验实际的最大模拟速率是多少。我做了有限的分析,据我所知,它大部分时间都花在循环的最外层测试上,等待有趣的事情发生。 如果它太慢,我可以通过跳过滴答直到下一个中断来尝试使计时器代码更智能,或者可能通过恢复一些确保模拟器保持赶上计划线的钩子来以不同方式处理非交互模式。 |
@ashelly,不用担心 sim.bat。我认为 出于好奇:我认为 ^-F 发送一个 EOF,因此从最终调用到 您对实时行为的发现正是我所期望的。有趣的是我们的两台机器都能够跟上实时。很奇怪,外层循环竟然要消耗这么多时间来计数和比较。但我不会在预测下一次中断时间的算法上花费太多工作。如果不同的计时器异步运行,这可能会变得很糟糕。 也许比实时更快不再那么重要,因为 UGS 具有图形预览。我不会重新引入那些使模拟器如此依赖 grbls 内部工作的钩子。但这只是我的三分钱。 你如何分析?你能告诉我一本关于使用 gcc 进行分析的入门读物吗? |
@jgeisler0303 @ashelly: 仅供参考,我将在周末更改 Grbl 设置编号以及反转遮罩的工作方式。我这样做是为了让未来的扩展更容易、更有条理。这会影响您的模拟器代码吗?我不打算再做这样的事情,因为这是永久性的改变。 |
重新编号设置不会破坏任何东西。它的行为就像硬件在闪烁新代码后第一次一样——CRC 不匹配,因此它会重新加载默认值。 |
@jgeisler0303,关于输入,我认为最简单的事情可能是从阻塞输入切换到非阻塞输入的命令行参数。旧式阻塞输入似乎适用于批处理模式。 对于基本分析,我使用了 perf tools。 |
我今天做了一些进一步的研究。我使用 gprof,gcc 内置的分析功能(由 经过一些优化后,我设法将执行时间缩短到 200 秒,但挂钟时间仍然在 3 分钟左右。我不记得我所做的一切,但它主要是在 sim 循环中内联所有内容,并通过等待事件机制替换两次睡眠调用:如果 我尝试的一切都是快速而肮脏的,等待事件机制仅适用于 Windows。所以我不会推动任何东西。 最糟糕的时间杀手仍然存在。我只是不明白为什么需要 6 分钟。用于在执行时间仅为 3 分钟时运行仿真。它运行的机器是四核的。我很确定 grbl_sim.exe 有一个单独的 cpu。 最后是我的最后一个随机发现:我的 3GHz 机器将有 187 个周期用于计算,以实时模拟 16MHz 的三个 atmega 定时器。考虑到 x86 CPU 平均每条指令可能需要一个以上的周期,这并不算多。我估计定时器模拟很容易每次调用 200 条指令。如果这一切都是真的,那么这个概念根本不可能实现比实时更快的速度。(这让我意识到在带有适当外围设备的 RISC CPU 上,你可以从区区 16MHz 获得惊人的能力)。 |
干得好,坏消息…… |
@ashelly:最近我一直在与 Chilipeppr 的 John Lauer 讨论一个想法。我需要将 Grbl 的一部分编译为可执行文件。我需要做些什么才能在 Mac 上编译它吗?我试图编译为 Linux(它应该在 Mac 上工作),但它正在寻找一个仅限 Windows 的文件。 |
我无法轻松访问 Mac,所以我不确定。当我 |
@ashelly:啊。通过更改 Makefile 中的该参数来修复文件抱怨,但不会编译到 Mac。我将启动 Windows 虚拟机。谢谢。 |
修复了使用 STEP_PULSE_DELAY 和/或 ENABLE_SOFTWARE_DEBOUNCE 编译模拟器的问题
加上用空格替换制表符以与其余代码保持一致。