AVR内联汇编Fsin操作数约束

时间:2017-01-23 12:19:46

标签: arduino constraints avr inline-assembly

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

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。

1 个答案:

答案 0 :(得分:1)

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

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