Contact me: hankecnc@gmail.com

关于 system_???_exec_????_overrides 的澄清 #445

推推 grbl 3年前 (2023-01-22) 184次浏览

关闭
cri-s 打开了这个问题 2018 年 5 月 20 日 · 8条评论
关闭

关于 system_???_exec_????_overrides 的澄清#445

cri-s 打开了这个问题 2018 年 5 月 20 日 · 8条评论

注释

关于 system_???_exec_????_overrides 的澄清 #445

嗨,查看代码,启用它在 avr 目标上编译超过 32k 的大部分功能(N 行、coreXY 等) 。

现在查看代码,我看到了这种类型的函数,它只更新 volatile 8 位变量。

void system_clear_exec_motion_overrides() {
uint8_t sreg = SREG;
cli();
sys_rt_exec_motion_override = 0;
SREG = sreg;
}

由于veriable是volatile和atomar,这个函数和中断阻塞开销的原因是什么?

问候
危机

关于 system_???_exec_????_overrides 的澄清 #445
贡献者

我相信这是为了防止串行中断在清除此变量时触发和设置此变量。

关于 system_???_exec_????_overrides 的澄清 #445

对于所有只是写入而不是读取/修改的功能,不需要它,写入不能被中断,因此串行中断将在之前或之后发生,无论

关于 system_???_exec_????_overrides 的澄清 #445
贡献者

@langwadt: 是的,可能吧,但它在那里并没有什么坏处。主要是防御性编程。无论哪种方式,由于 sei() 和 cli() 被编译成单个汇编指令,删除它不会超过几个字节的闪存和几个周期。

作为旁注,我确实找到了一种方法来通过更改默认设置的复制方式来释放大约 100 字节左右的闪存。不多,但如果你真的需要额外的空间,最好还是选择 Mega2560 版本。

关于 system_???_exec_????_overrides 的澄清 #445
作者
危机 评论了 2018 年 5 月 21 日 通过电子邮件
关于 system_???_exec_????_overrides 的澄清 #445

@chamnit我很好奇,所以我尝试更改仅写入的四个功能,它节省了 30 个字节

关于 system_???_exec_????_overrides 的澄清 #445
贡献者

@langwadt: 谢谢。30 个字节并不多。有趣的是,我不认为我以前有大部分额外的 SREG 代码,但是有人在这里发帖强烈坚持我把它放进去。没有他们这是错误的。不确定谁是对的,但无论如何,没有证据表明它在做任何坏事。如果将其删除,则需要进行大量测试以确保它不会产生任何新问题。

关于 system_???_exec_????_overrides 的澄清 #445
作者
危机 评论了 2018 年 5 月 22 日 通过电子邮件
关于 system_???_exec_????_overrides 的澄清 #445
贡献者

再次感谢,幸好这段代码只用在我的开发流程中。这可能应该完全删除。

喜欢 (0)