Clang + AVR 编译错误:asm 中的“=w”

Raf*_*cha 5 avr arduino llvm clang

我在下面收到此错误,但找不到解决方案。有谁知道如何解决这个错误?

rafael@ubuntu:~/avr/projeto$ clang -fsyntax-only -Os -I /usr/lib/avr/include -D__AVR_ATmega328P__ -DARDUINO=100 -Wno-ignored-attributes -Wno-attributes serial_tree.c
In file included from serial_tree.c:3:
In file included from /usr/lib/avr/include/util/delay.h:43:
/usr/lib/avr/include/util/delay_basic.h:108:5: error: invalid output
constraint
      '=w' in asm
                : "=w" (__count)
                  ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

ema*_*uts 0

util/delay.h是 avr-libc 的标头,您正在使用的功能(一些延迟内容)正在使用内联 asm 来实现它。avr-libc 被编写为与 avr-gcc 一起使用,并使用 avr-gcc 的功能,例如内联 asm 中的机器相关约束。llvm 无法识别约束“w”,因此您必须使用不同的方法,例如使用 avr-gcc 或将该代码移植到 llvm。

avr-gcc还实现了内置函数__builtin_avr_delay_cycles来实现浪费指定数量的时钟周期。如果 llvm 正确模仿 avr-gcc,那么您可以使用该函数作为起点。