注释
我应该补充一点,我还必须在这个块内注释掉 |
我通常默认假设 grbl 是正确的,因为很多人都成功地使用了它,但我同意它看起来很奇怪并且似乎只是因为一些怪癖才起作用。与旧的 grbl 代码相比,它是倒置的 |
您是否还启用了 control_mask 反转?@ line 185 // #define INVERT_CONTROL_PIN_MASK CONTROL_MASK // 默认禁用。取消注释以禁用 pin 变量被 CONTROL_MASK 屏蔽,我相信这就是为什么“pin”值保持为零而不进入 if 块的原因。本质上,if 块正在检查“pin”是否大于零。 |
@shooter64738请看第一篇文章,我包括了 |
是的,我看到了,但是有 2 个面具彼此相邻。我也不确定你指的是哪一个。 我倾向于,如果反转打开并且它将 0 切换为 1 以进入 if 块,它应该检查该位是否为真。我看到你的困惑。:) |
查看这个函数的历史,Sonny Jeon 重命名并重组了一些东西,还反转了所有测试。评论说“移动(并调整)反转控制引脚掩码定义并放入 config.h,而不是 cpu_map.h 文件中。在那里更有意义。” 此更改于 2016 年 3 月 30 日进行。我不明白… |
正如我提到的,我的门开关是 NC,如果我能理解的话,用计算机术语来说就是“1”或“真”。这就是为什么我把它倒过来的原因,我想如果门是开着的,我希望它是“真”的。我删除了反转并恢复了 Sonny 的更改,它现在按照我想要的方式运行。有问题的代码现在对我来说看起来像这样:
仍然对为什么我必须做出这样的改变感到困惑(以及为什么 Sonny 做出了他的改变)。 |
请记住,该 |
理解它为什么有效对我来说实际上并不重要,尽管我是一名程序员,所以我可能会为此失眠…… 正如我所说,我唯一感兴趣的控制是门,所以我将其设置为
因为我想反转它,所以我将其设置为
这是行不通的。我有了反转所有控制引脚的想法,我用这个替换了上面的内容:
这可以按预期工作,尽管肯定不直观。我不明白,但无论如何,它正在工作。谢谢。 |
@dastultz: 等待。如果理解它的工作原理对您来说并不重要,那么在 2016 年 3 月 30 日的拉取请求中跟踪一个小的代码更改并发布这个问题有什么意义:“ chamnit 你能在这里解释逻辑反转的原因吗(bit_istrue 到 bit_isfalse)? ” 为了再次明确说明, 此外,请记住,Grbl 还必须支持反转引脚状态,其中引脚可以反转为正常低电平并触发引脚高电平,而不是触发正常高电平和引脚低电平。在这种情况下, 老实说,我真的不明白几行紧凑的代码有什么大惊小怪的。像这样的代码在科学研究中很常见(我的背景)。您一直在尝试平衡优化性能和可读性。对我来说,如果您花时间了解 pin 变量获取端口上的 pin 状态并且您可能有不同的触发状态,那么这段代码就非常清楚了。 |
我要求解释,以便它可以帮助我了解如何配置我的设置。我应该寻求更直接的帮助,对此感到抱歉。GRBL 是一款很棒的产品,我对它的出色表现感到惊讶。谢谢你。我不是出色的 C 程序员,也不是出色的微控制器程序员。但我是一个优秀的程序员。在其上下文之外简单地查看有问题的块,这就是我看到它的方式(简化代码):
我认为
现在我们对引脚的假状态感兴趣。为什么我们应该要求至少有一个 pin 为真才能进入区块?如果所有的引脚都是假的,我们应该采取所有的行动,但我们不会采取任何行动,因为 对不起,如果我冒犯了。 |
您好,我正在运行 GRBL 1.1f。我只有一个“控制”连接,那就是
CONTROL_SAFETY_DOOR_BIT
。开关是常闭的,所以我也#define INVERT_CONTROL_PIN_MASK ((1<<CONTROL_SAFETY_DOOR_BIT))
查看此处的代码,如果至少有一个引脚被抬起,我们将进入该块。然后我们会问一些
bit_isfalse
问题。这对我来说似乎很奇怪。如果是,true
我们进入块并尝试找到是的东西false
。如果我的门半开着,结果bit_isfalse(pin,(1<<CONTROL_SAFETY_DOOR_BIT))
是true
。我不确定我只有一个控件是否重要,但是当CONTROL_SAFETY_DOOR_BIT
未设置时,测试pin
也是错误的,它永远不会进入块。if (pin) {
为了让我的门开关工作,我必须注释掉这个块。我做了什么奇怪的事吗?意外?这对任何人都有效吗?我希望
CONTROL_SAFETY_DOOR_BIT
在true
出现问题时出现,所以这if (pin) {
似乎是正确的,但我希望bit_istrue
在CONTROL_SAFETY_DOOR_BIT
.我说的有道理吗?
谢谢。
/达里尔