Contact me: hankecnc@gmail.com

堆栈粉碎保护失败! #456

推推 grbl 3年前 (2023-01-30) 304次浏览
关闭
Claude54 打开了这个问题 2020 年 6 月 27 日 · 6条评论
关闭

堆栈粉碎保护失败!#456

Claude54 打开了这个问题 2020 年 6 月 27 日 · 6条评论

注释

堆栈粉碎保护失败! #456

请回答以下问题。

您使用的是什么版本的固件?Grbl 1.3a

问题是否可重复?是的

什么情况下会出现bug?

它发生在我使用第四轴 A 时。我正在将 GCode 发送到 bCNC。
3 轴一切顺利,但当我使用第四轴时,它会在一段时间后系统地崩溃。

重要如果您粘贴固件代码,请使用C++ 语言的Markdown 代码和语法高亮。使用三个反勾法。

  #define EASIER_TO_READ true
堆栈粉碎保护失败! #456 Claude54 添加了 漏洞 有些东西不工作标签 2020 年 6 月 27 日
堆栈粉碎保护失败! #456
所有者

您能否发布导致问题的gcode。我今天晚些时候可以测试它。只需最少的几行即可重复该问题。

必须尝试通过串行监视器手动发送 gcode?许多 gcode 发送者在超过 3 个轴时遇到问题,查看这是否是问题的一部分会很有帮助。

堆栈粉碎保护失败! #456
作者

很抱歉回复晚了,但我这个周末没空。我正在向您发送一段系统地使 GRBL
崩溃的 GCode。我注意到当 A 到达 -10000 左右时 GRBL 崩溃了。

test_axe_A.zip

堆栈粉碎保护失败! #456
作者

我尝试过其他文件并且总是一样,当 A 到达 -10000 左右时 GRBL 崩溃了

堆栈粉碎保护失败! #456
所有者
培养 评论了 2020 年 7 月 1 日 通过电子邮件
堆栈粉碎保护失败! #456
所有者

我能够重复这个问题。我认为这是由于没有在功能上正确规划如此大量的原因……

// formats axis values into a string and returns that string in rpt
static void report_util_axis_values(float* axis_value, char* rpt) {
    uint8_t idx;
    char axisVal[10];
    float unit_conv = 1.0; // unit conversion multiplier..default is mm
    rpt[0] = '\0';
    if (report_inches->get())
        unit_conv = 1.0 / MM_PER_INCH;
    for (idx = 0; idx < N_AXIS; idx++) {
        if (report_inches->get())
            sprintf(axisVal, "%4.4f", axis_value[idx] * unit_conv);  // Report inches to 4 decimals
        else
            sprintf(axisVal, "%4.3f", axis_value[idx] * unit_conv);  // Report mm to 3 decimals
        strcat(rpt, axisVal);
        if (idx < (N_AXIS - 1))
            strcat(rpt, ",");
    }
}

char axisVal[10];没有足够的空间来存放它。

这是在 report.cpp 中。您可以尝试将其更改为char axisVal[20];. 它对我有用。在更新代码之前,我需要寻找其他区域。

堆栈粉碎保护失败! #456
作者

Yessss..
我已经改变了 axisVal 数组的大小,它现在可以工作了。
非常感谢你。