MicroBlaze:以十六进制打印浮动值

描述

我在启用了浮点的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
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 20:25:55 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它