0

我正在使用微芯片 c18,我有这个功能,它将浮点数分成 4 个相应的字节。C18 遵循小字节序

a[0]=*(fptr);        address 0
a[1]=*(fptr+1);              1  
a[2]=*(fptr+2);              2    
a[3]=*(fptr+3);              3 

并写入串行eeprom。

如果我想读回浮点变量。

float read_float(void)
{   float f;
    unsigned char *fptr;
    fptr=&f;

    *(fptr)=eepromread(0);
    *(fptr+1)=eepromread(1);
    *(fptr+2)=eepromread(2);
    *(fptr+3)=eepromread(3);      

    return(f);       
}

这个函数会返回浮点变量吗?我现在没有任何硬件和模拟工具。

我相信我的问题很清楚。编辑:

这样做的同时。将 char 分配给 float 时发生编译器不匹配错误。我该如何消除该错误?

4

1 回答 1

1

最干净的方法是*(char*)(fptr+i ) = eepromread(i );。您想要从初始指针的偏移量,转换为指向字符的指针,取消引用。

此外,至少我的编译器 (gcc) 对第一次分配犹豫不决。您需要更多类似的东西fptr = (char*)(&f);,以便指向浮点数的指针与赋值兼容。

但是,请仔细检查以确保eepromread()以您期望的顺序为您提供字节。他们应该这样做,因为 IEEE754 独立于字节排序,但是隐藏在嵌入式 C 库中的“巧妙增强”的数量可能会填满一本很大的书。

于 2014-03-24T12:14:57.157 回答