我有一个' c'针对MicroBlaze CPU的代码 当我在Eclipse + GCC或Visual Studio中将代码调试为c程序时,我得到了我想要的结果 然而,当我跑到目标上时,结果是不同的。
仅在浮点运算(乘法和除法)上发生。
如何使其以完全浮点精度工作?
是否有特殊的GCC标志?
P.S。
MicroBlaze的配置与所有启用浮点运算的硬件配合使用。
答案 0 :(得分:1)
我对MicroBlaze不是很有经验,但the Wikipedia page表示:
此外,可以选择性地添加/删除很少使用但在硬件中实现更昂贵的关键处理器指令(即乘法,除法和浮点运算。)
强调我的。
因此,请确保您的特定MicroBlaze实际上支持浮点运算,否则我认为您的结果将非常随机。
还要确保您的编译器工具链生成正确的指令,有时是嵌入式开发支持软件模拟浮点的工具链。通过反汇编最终代码并了解如何实现浮点运算,这应该是微不足道的。
答案 1 :(得分:1)
MicroBlaze硬件浮点支持IEEE754,MicroBlaze参考指南中列出了一些例外情况。
浮点在所有计算机上并非100%相同。 它取决于执行操作时的实际精度(硬件在执行单精度操作时可以使用扩展精度),它还取决于舍入模式的配置(IEEE定义了四种不同的舍入模式)。
MicroBlaze不支持非规范化浮点(它们将被视为零)。 然而,正常编码应避免非规范化值,因为它们的精度会降低。
你看到了什么样的差异?
GöranBilski