开源改变世界

启用以太网会导致周期性停顿。 #6

推推 grbl 3年前 (2023-02-08) 159次浏览
关闭
phil-barrett 打开了这个问题 2021 年 7 月 11 日 · 8条评论
关闭

启用以太网会导致周期性停顿。#6

phil-barrett 打开了这个问题 2021 年 7 月 11 日 · 8条评论

评论

启用以太网会导致周期性停顿。 #6
菲尔·巴雷特 评论了 2021 年 7 月 11 日  

我认为这可能与之前一份从未得到解决的报告有关。

使用当前的默认分发文件,我使用 USB_SERIAL_CDC 2 为 T41U5XBB(从 my_machine.h 设置)构建了 grblHAL,没有启用任何其他功能。在一个简单的 teensy 4.1 上运行它,它工作正常。当我在 my_machine.h 中启用以太网时,在同一个裸机上重建并运行它,我得到了“停顿”。进入控制台并检查详细信息,可以看到报告被延迟了。

延迟似乎有些周期性。通常 5 或 6 个空闲消息,延迟,1 个空闲消息,延迟,然后重复。延迟似乎比 2 秒长一点。

如果我将 teensy 插入带有工作网络硬件的板上,我会得到相同的行为。

顺便说一下,我在旧版本的 grblHAL [VER:1.1f.20210219:] 中看到了这种行为,但仅限于 Pro 版本的网络。我转移到最新版本,发现它也发生在 T41U5XBB 版本中。启用网络导致停顿。我删除了以前的 grblHAL 库并从头开始重新安装了最新的库,但 T41U5XBB 和 T41BB5X_PRO 版本的停顿行为相同。

编辑:这与发件人无关,我在终端应用程序中看到了相同的行为。

$i 来自工作构建:
[VER:1.1f.20210629:]
[OPT:VNMSL,35,1024,3,0]
[NEWOPT:ENUMS,RT+,ES,TC]
[FIRMWARE:grblHAL]
[NVS STORAGE:*FLASH ]
[驱动程序:iMXRT1062]
[驱动程序版本:210703]
[驱动程序选项:USB.2]
[电路板:T41U5XBB]
[AUX IO:4,3,0,0]

$i 来自停滞构建
[VER:1.1f.20210629:]
[OPT:VNMSL,35,1024,3,0]
[NEWOPT:ENUMS,RT+,ES,TC,ETH]
[FIRMWARE:grblHAL]
[NVS STORAGE:*闪存]
[驱动程序:iMXRT1062]
[驱动程序版本:210703]
[驱动程序选项:USB.2]
[电路板:T41U5XBB]
[AUX IO:4,3,0,0]
[IP:0.0.0.0]

启用以太网会导致周期性停顿。 #6
贡献者

在使用 Pro 板进行测试时,这不会发生在我身上。上次这个问题浮出水面时,我将其追溯到新的相当大的常量设置描述符数组,评论了一个随机的修复它的问题。为了解决这个问题,我用 ArduinoPROGMEM符号装饰了一些常量数组。您能否尝试通过注释掉或暂时删除一堆设置描述符来查看大型常量数组是否仍然可能导致它?

数组从这里开始:

https://github.com/grblHAL/core/blob/222ba55724741b1ab3b699f3ae4953cc90bc30f5/settings.c#L361

我不知道上次失败的原因是什么,Arduiono/Teensy 构建系统的一些特殊性?
没有其他驱动程序表现出这种行为,非 Arduino 驱动程序PROGMEM也会用空字符串替换该符号。

我正在使用 Arduino 1.8.13 和 Teensy 1.53 进行编译。

启用以太网会导致周期性停顿。 #6
作者
菲尔·巴雷特 评论了 2021 年 7 月 12 日  

我注释掉了 Group_Spindle_ClosedLoop 设置(其中 5 个)。那“固定”了它。你有一个建议的阵列移动PROGMEM吗?

使用相同的构建 – Arduino 1.8.13 和 Teensyduino 1.53。Teensyduino 1.54 已经测试了大约 5 个月,很快就会发布,所以当他们宣布它稳定时,我会试一试。

我确实在 PJRC 论坛上发现了一个听起来类似的问题,但就像许多这样的话题一样,它无休止地徘徊,没有什么明显的。怀疑是某种计时器问题,但没有确定的 – 主要是“巫毒”修复(有点像这个……)。

启用以太网会导致周期性停顿。 #6
作者
菲尔·巴雷特 评论了 2021 年 7 月 12 日  

在这里找到主题。

[edit] 跳到最后几页,似乎已解决,但老实说,我不明白他们做了什么。

启用以太网会导致周期性停顿。 #6
贡献者

作为第一步,您可以根据此评论更改 startup.c 吗?

如果那没有帮助……:

我注释掉了 Group_Spindle_ClosedLoop 设置(其中 5 个)。那“固定”了它。

如果您改为注释掉其他一些设置,是否也能解决问题?

你有建议的阵列移动到 PROGMEM 吗?

将 system.c 中的第 170 行更改为
PROGMEM static const sys_command_t sys_commands[] = {

nuts_bolts.h 中有两个小的 const 数组可以用 PROGMEM 修饰,还有一些在 gcode.c 中的 gc_execute_block() 中。

由于启用以太网时会出现问题,那么 WsStream.c 中的 const 数组可能是触发器?multipartparser.c 中有一个,base64.c 中有一个…

怀疑是某种计时器问题,但没有确定的 – 主要是“巫毒”修复

这是一个非常奇怪的问题,奇怪的是我再也看不到它了……

启用以太网会导致周期性停顿。 #6
作者
菲尔·巴雷特 评论了 2021 年 7 月 12 日  

OK,改了startup.c。使用 settings.c 构建恢复到分发版。它解决了这个问题。不确定我是否应该在修复周围添加引号。我将研究 teensyduino 1.54 是否包含此更改。

启用以太网会导致周期性停顿。 #6
贡献者

太好了,然后它有一个解释。

我将研究 teensyduino 1.54 是否包含此更改。

保罗稍后在线程中评论说它确实如此。

我已经将 PROGMEM 添加到一些没有它的 const 数组中,它释放了一些 RAM…RAM 更快,所以我没有将它添加到所有。

启用以太网会导致周期性停顿。 #6

很高兴对此有一个很好的解决方案。

启用以太网会导致周期性停顿。 #6
作者
菲尔·巴雷特 评论了 2021 年 7 月 12 日  

最后说明。升级到 Teensyduino 1.54 似乎解决了这个问题。我建议现在构建 iMXRT1062 版 grblHAL 的每个人都升级到 1.54