开源改变世界

编译 Grbl #43

推推 grbl 2年前 (2023-01-21) 199次浏览

关闭
TheExtraPiece 打开了这个问题 2011 年 12 月 4 日 · 9条评论
关闭

编译 Grbl#43

TheExtraPiece 打开了这个问题 2011 年 12 月 4 日 · 9条评论

注释

编译 Grbl #43

我正在尝试编译 grbl(使用 avr-gcc 4.5.3 和 avr-libc 1.7.1)但是当我尝试从存储库制作文件时,我总是会收到此错误。它发生在每个版本的 grbl 上。

avr-gcc -Wall -Os -DF_CPU=16000000 -mmcu=atmega328p -I. -ffunction-sections -c motion_control.c -o motion_control.o
在 motion_control.c:26:0 包含的文件中:
/usr/lib/gcc/avr/4.5.3 /../../../avr/ include/util/delay.h:在函数“mc_dwell”中:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:153:28:错误:__builtin_avr_delay_cycles 需要一个整数常量。
make: *** [motion_control.o] 错误 1

有什么建议么?

编译 Grbl #43

编辑包含文件 motion_control.c

void mc_dwell(uint32_t 毫秒)
{
st_synchronize();
delay_ms(毫秒);
}

/* 长延迟函数 */
void delay_ms(uint32_t ms) {
while ( ms )
{
_delay_ms(1);
小姐 – ;
}
}

我想,探测:-/

编译 Grbl #43
成员

看看我的 grbl 叉子。我有效地拿起了火炬,因为 Simen 一直在忙于其他事情。许多挥之不去的错误已得到修复,并且对 v0.7 进行了改进,现在是大师状态。

仅供参考,带有运行时命令(减速进给、恢复、重置、慢跑(待定))的新 v0.8 版本将于今晚晚些时候发布。这是一个 alpha 版本。

编译 Grbl #43

我刚刚检查了你的叉子,但它似乎有同样的问题。我仔细研究了一下,似乎是由于 avr-libc 发生了变化。从 v1.7.1 开始,无法将变量与延迟函数一起使用。显然你不应该在以前的版本中这样做,但现在由于延迟实现方式的变化而被强制执行。
您可能使用的是旧版本的库,因此您不会收到此错误。修复起来真的很简单,我只是向 nuts_bolts 添加了几个内联函数来模仿 _delay_ms() 和 _delay_us() 的旧功能。Identy 上面建议的功能可以解决问题,它似乎是大多数人都在使用的功能。

编译 Grbl #43
成员

很高兴知道!我没有遇到这个问题,因为我几乎只使用 Arduino 软件附带的 avrdude 编译器。听起来它仍然支持延迟中的变量。当我有时间时,我会尝试修复。

编译 Grbl #43

我在 Master 和 Edge 的最新版本中遇到了完全相同的问题。

avr-gcc -Wall -Os -DF_CPU=16000000 -mmcu=atmega328p -I. -ffunction-sections -c motion_control.c -o motion_control.o
avr-gcc -Wall -Os -DF_CPU=16000000 -mmcu=atmega328p -I. -ffunction-sections -c limits.c -o limits.o
在 limits.c:21:0:
/usr/lib/gcc/avr/4.5.3/../../../avr/包含的文件中include/util/delay.h: 在函数’homing_cycle’中:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:230:28:错误:__builtin_avr_delay_cycles 需要一个整数常量。
/usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:230:28: 错误:__builtin_avr_delay_cycles 需要一个整数常量。
make: *** [limits.o] 错误 1

编译 Grbl #43
成员

谢谢!看起来我在为 _delay_ms() 修复它时错过了 _delay_us() 调用。我将在今天晚些时候发布修复程序。如果您想立即修复它,请查看 nut_bolts.c 并重复与 _delay_ms() 相同的过程。

编译 Grbl #43

谢谢,修好了。为了完整起见,我在 limits.c 中将其更改为:
delay_us(settings.pulse_microseconds);
STEPPING_PORT ^= out_bits & STEP_MASK;
delay_us(step_delay);

我将这个函数添加到 nuts_bolts.h 中:
void delay_us(uint16_t us)
{
while (us–) { _delay_us(1);}
}

编译 Grbl #43
成员

很高兴听到。抱歉,我在陈述时没有发布修复程序。我一直在为其他事情分心。当我最终推出下一个优势时,我将确保使用此修复程序更新主分支。

喜欢 (0)