Arduino AVR内联程序集Fsin操作数约束

Arduino AVR内联程序集Fsin操作数约束,arduino,constraints,avr,inline-assembly,Arduino,Constraints,Avr,Inline Assembly,我用arduino编码,但我也在c代码之间使用汇编代码。我想计算一个值的sin。到目前为止,我有以下代码: void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: Serial.begin(9600); float answer; float angle = 2; int a = 2;

我用arduino编码,但我也在c代码之间使用汇编代码。我想计算一个值的sin。到目前为止,我有以下代码:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.begin(9600);
  float answer;
  float angle = 2;
  int a = 2;
  int b = 3;
  asm("ADD %0,%1" : "+r"(a) : "r"(b)); 
  asm("fsin" : "=t" (answer) : "0" (angle));
  Serial.print(answer);
}
我得到的错误是:“asm”中的操作数约束不一致 有趣的是,当我删除最后一行(Serial.print(answer))时,我没有得到这个错误


我还发现这段代码用于8086汇编程序,而不是avr,在8086中,“=t”专门用于浮点数,但我找不到任何类似于avr的代码。

无论您使用的是什么8位avr,几乎肯定都没有
fsin
指令。由于8086和AVR是两种不同的体系结构,它们将有不同的指令,同样名称的指令也可能有不同的含义。您不能期望将汇编代码从一个体系结构复制到另一个体系结构。8位AVR根本不支持浮点数;由编译器添加到软件中


您需要的是avr libc提供的
sin
功能。这只是一个普通的C函数,您可以通过首先将
#include
添加到程序顶部,然后编写类似
answer=sin(angle)的内容来调用它

在AVR上没有像
fsin
这样的汇编命令。这是一个C函数调用,需要这样处理(
call
)。