【问题标题】:Clang + AVR Compilation error: '=w' in asmClang + AVR 编译错误:asm 中的“=w”
【发布时间】:2013-11-28 11:15:40
【问题描述】:

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

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.

【问题讨论】:

  • This answer 有点相关。
  • 命令的哪一部分为 AVR 编译它?
  • clang 的主线版本(或者更确切地说,它的后端 LLVM)不支持为 Arduino 上使用的 AVR 微控制器编译。您是否尝试过使用avr-gcc 代替?该版本作为 Arduino IDE 的一部分提供。
  • 他正在使用'-fsyntax-only',所以这显然是一些自动完成工具。
  • 貌似和clangs内部汇编有关,How to switch off LLVM's integrated assembler?有帮助吗?

标签: arduino clang llvm avr


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2014-01-12
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多