关闭 bdurbrow 打开了这个问题 2018 年 10 月 21 日 · 5 条评论 关闭 安全门优先?#543 bdurbrow 打开了这个问题 2018 年 10 月 21 日 · 5 条评论 注释 黑眉 评论了 2018 年 10 月 21 日 我发现了这一点(我已经发布了 ‘328 版本的代码,它在 2560 版本中有点不同,但问题也存在于那里): 因为它是用“else if”树实现的,如果任何先验条件为真,则不会测试后面的条件……最后检查安全门。 难道不应该首先检查它,以便它优先于其他输入,比如循环开始吗? 来自 system.c,第 63 行: ISR(CONTROL_INT_vect) { uint8_t pin = system_control_get_state(); 如果 (pin) { 如果 (bit_istrue(pin,CONTROL_PIN_INDEX_RESET)) { mc_reset(); } else if (bit_istrue(pin,CONTROL_PIN_INDEX_CYCLE_START)) { bit_true(sys_rt_exec_state, EXEC_CYCLE_START); #ifndef ENABLE_SAFETY_DOOR_INPUT_PIN } else if (bit_istrue(pin,CONTROL_PIN_INDEX_FEED_HOLD)) { bit_true(sys_rt_exec_state, EXEC_FEED_HOLD); #else } else if (bit_istrue(pin,CONTROL_PIN_INDEX_SAFETY_DOOR)) { bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR); #endif } } } 贡献者 香奈儿 评论了 2018 年 10 月 21 日 不,在这里没关系。它在中断中,整个引脚状态在开始时被复制。 chamnit已完成 关闭 2018 年 10 月 21 日 朗瓦特 评论了 2018 年 10 月 21 日 仍然看起来如果循环开始和安全门同时发生,您将获得一个循环开始并忽略安全门,至少直到下一个引脚更改中断 贡献者 香奈儿 评论了 2018 年 10 月 21 日 呵呵。这些应该是明确的 if 语句。我会纠正它。 chamnit 重新打开了这个 2018 年 10 月 21 日 贡献者 香奈儿 评论了 2018 年 11 月 12 日 现在应该修好了。 chamnit已完成 关闭 2018 年 11 月 12 日 作者 黑眉 评论了 2018 年 11 月 16 日 这也需要应用于 grbl-mega 存储库。 bdurbrow 提到了这个问题 2019 年 8 月 10 日 ENABLE_SAFETY_DOOR_INPUT_PIN 没有执行记录在案的操作? #705 关闭 喜欢 (0) 启动时出错… #656 新的 GRBL 前端 SerialComCNC #657 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭 无法在 gsender 1.2.0 中打开 .gcode 文件 #367 RaspberryPi 运行 gsender 时出现问题 #89 向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭无法在 gsender 1.2.0 中打开 .gcode 文件 #367RaspberryPi 运行 gsender 时出现问题 #89向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473功能请求:抑制发送到机器的 gcode 中的 gcode 注释。 #444 关闭通过网络连接进行连接 #171操纵杆运动的剩余问题 #204 关闭新版本认为我的机器一直处于锁定状态 #474 关闭
我发现了这一点(我已经发布了 ‘328 版本的代码,它在 2560 版本中有点不同,但问题也存在于那里):
因为它是用“else if”树实现的,如果任何先验条件为真,则不会测试后面的条件……最后检查安全门。
难道不应该首先检查它,以便它优先于其他输入,比如循环开始吗?
来自 system.c,第 63 行:
ISR(CONTROL_INT_vect)
{
uint8_t pin = system_control_get_state();
如果 (pin) {
如果 (bit_istrue(pin,CONTROL_PIN_INDEX_RESET)) {
mc_reset();
} else if (bit_istrue(pin,CONTROL_PIN_INDEX_CYCLE_START)) {
bit_true(sys_rt_exec_state, EXEC_CYCLE_START);
#ifndef ENABLE_SAFETY_DOOR_INPUT_PIN
} else if (bit_istrue(pin,CONTROL_PIN_INDEX_FEED_HOLD)) {
bit_true(sys_rt_exec_state, EXEC_FEED_HOLD);
#else
} else if (bit_istrue(pin,CONTROL_PIN_INDEX_SAFETY_DOOR)) {
bit_true(sys_rt_exec_state, EXEC_SAFETY_DOOR);
#endif
}
}
}