我尝试在没有FPU的CPU上实现对double
和float
的支持以及相应的基本算法。
我知道所有AVR ATmega controllers
都有可能。 ATmega也没有FPU。所以这里有一个问题:它是如何工作的?如果有任何文献建议或与解释和例子的链接?
在最好的情况下,我会为这样的代码提供支持:
double twice ( double x )
{
return x*x;
}
非常感谢, 亚历
答案 0 :(得分:3)
以下是与AVR相关的链接以及实现soft double的解释和示例:
答案 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()
)可以正常工作。