描述
我在启用了浮点的MicroBlaze处理器上运行以下代码片段:
float test2 = 22.29f;
int main(void)
{float test = 22.0f;
xil_printf(“test = 0x%08x \ r \ n”,test);
xil_printf(“test2 = 0x%08x \ r \ n”,test2);
float data = 0;
xil_printf(“data1%08x \ n \ r”,数据);
数据= 5.0 / 4.0;
xil_printf(“data2%08x \ n \ r”,数据);
数据= 101.0000;
xil_printf(“data2%08x \ n \ r”,数据);
但结果如下:
test = 0x00000000
test2 = 0x80000000
data1 00000000
data2 00000000
data2 00000000
这是什么原因?
解
上面的代码中有两个错误:
1.函数xil_printf()不支持打印浮点数。您将需要使用printf语句来打印浮点数。
请参阅操作系统和库集合文档的第6页:
http://www.xilinx.com/support/documentation/sw_manuals/xilinx2015_3/oslib_rm.pdf
2.%x说明符仅将整数转换为十六进制。它不适用于浮点数。
要解决此问题,请获取float的地址,将指针强制转换为整数指针(这对数据的位模式没有影响),然后取消引用它,以便将数据解释为整数但不更改位模式。
因此,上述代码应修改如下:
#include <stdio.h>
#include“platform.h”
void print(char * str);
float test2 = 22.29f;
int main()
{
init_platform();
float test = 22.0f;
printf(“test = 0x%8x \ r \ n”,*(int *)&test);
printf(“test2 = 0x%8x \ r \ n”,*(int *)&test2);
float data = 0;
printf(“data1 0x%8x \ n \ r”,*(int *)&data);
数据= 5.0 / 4.0;
printf(“data2 0x%8x \ n \ r”,*(int *)&data);
数据= 101.0000;
printf(“data2 0x%8x \ n \ r”,*(int *)&data);
返回0;
}
结果如下:
test = 0x41b00000
test2 = 0x41b251ec
data1 0x 0
data2 0x3fa00000
data2 0x42ca0000
没有回复内容