将float类型数据写入寄存器中

在FreeBSD中针对寄存器在特殊情况下可能需要写入float类型的值,具体实现步骤如下:

//变量

typedef struct{
float   under_limit;        
float   over_limit; 
}VFEPIO_SetRawLimit_t;

typedef struct{
VFEPIO_ReqHeader_t  header;
union{
VFEPIO_SetRawLimit_t    raw_limit;
}param;
}VFEPIO_Request_t;

VFEPIO_Request_t  VFEPIO_Request;
VFEPIO_SetRawLimit_t raw_limit;
float  under_limit;        
float  over_limit; 
uint32_t *piTemp1;
uint32_t *piTemp2;

//代码的实现
raw_limit = VFEPIO_Request->param.raw_limit;
under_limit = raw_limit.under_limit ;        
over_limit = raw_limit.over_limit; 
piTemp1 = (uint32_t *)(&under_limit);
piTemp2 = (uint32_t *)(&over_limit);

pci_write_bar1(sc, UNDERFLOW_LIMIT_ADDR, *piTemp1);
pci_write_bar1(sc, OVERFLOW_LIMIT_ADDR, *piTemp2);



◆在C语言中也是可以证明这点的,具体实现如下

#include <stdio.h>
#include <stdlib.h> 


int main()
{
float a = 1.23;
float b = 0.00;
float *d = 0;
int c = 0x00;

int *ptr ;

ptr = (int *)&a;

c = *ptr;

// printf("c = %x!\r\n", c);
d = (float *)&c;
b = *d;
printf("b = %0.2f!\r\n", b);
return 0;

}

结果如下:



猜你喜欢

转载自blog.csdn.net/qq_31094099/article/details/80291289