AVR如何执行浮点运算

时间:2015-12-12 11:14:13

标签: c floating-point avr

我尝试在没有FPU的CPU上实现对doublefloat的支持以及相应的基本算法。

我知道所有AVR ATmega controllers都有可能。 ATmega也没有FPU。所以这里有一个问题:它是如何工作的?如果有任何文献建议或与解释和例子的链接?

在最好的情况下,我会为这样的代码提供支持:

double twice ( double x )
{
  return x*x;
}

非常感谢, 亚历

3 个答案:

答案 0 :(得分:3)

以下是与AVR相关的链接以及实现soft double的解释和示例:

  1. 您将找到一个双浮点库here
  2. 可以在上一条消息 here 中找到另一个消息。
  3. Double很慢,所以如果考虑速度,你可以选择定点数学。只需阅读 this thread
  4. 中的邮件即可

答案 1 :(得分:2)

这篇文章可能对你很有意思:Floating point calculations in a processor with no FPU

如上所述:

  

您的编译器可能会提供支持,或者您可能需要自己动手。   也有免费提供的实现。

如果是ATmega的话,你可能不必自己写任何东西。所有已经可用的库可能已经比你自己可以做的更进一步优化了。如果需要更高的性能,可以考虑将浮点数转换为固定点。无论如何你应该考虑这个。如果你能在固定点完成工作,你应该远离浮点。

答案 2 :(得分:2)

Avr使用AVR Libc,您可以下载并检查。

有一个数学库,但这不是你想要的。它包含math.h中定义的标准函数。

相反,你需要执行乘法的函数和类似的东西。这些也在Libc中,在fplib下,用汇编语言编写。但是用户并没有直接打电话给他们。相反,当编译器遇到涉及浮点数的乘法时,编译器将选择要插入的正确函数。

您可以浏览AVR fplib以了解要执行的操作,但您必须为处理器编写自己的程序集或位错误的代码。

您需要找出您的处理器和语言用于浮点的标准。 IEEE,也许?而且你还需要知道系统是小端还是大端。

我假设你的系统还没有C编译器。否则,所有浮点运算都已实现。那" twice()"函数(实际上square())可以正常工作。