我正在使用微芯片 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 时发生编译器不匹配错误。我如何消除该错误?
最佳答案
最简洁的方法是*(char*)(fptr+
i) = eepromread(
i);
。您需要将初始指针的偏移量转换为指向字符的指针,并取消引用。
此外,至少我的编译器(gcc)对第一个赋值犹豫不决。您需要类似于 fptr = (char*)(&f);
的内容,以便指向 float 的指针与赋值兼容。
不过,请仔细检查,以确保 eepromread()
按您期望的顺序提供字节。它们应该如此,因为 IEEE754 独立于字节排序,但隐藏在嵌入式 C 库中的“巧妙增强”的数量可以写满一本相当大的书。
关于c - 读回 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605366/