我正在使用微芯片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);
}
这个函数会返回float变量吗? 我现在没有任何硬件和模拟工具。
我相信我清楚我的问题。 编辑:
这样做。将char分配给float时发生编译器不匹配错误。如何删除错误?
答案 0 :(得分:1)
最干净的方式是*(char*)(fptr+
我) = eepromread(
我);
。您希望从初始指针偏移,转换为指向字符的指针,取消引用。
另外,至少我的编译器(gcc)在第一次分配时很糟糕。你需要更像fptr = (char*)(&f);
的东西,以便浮点指针与赋值兼容。
仔细检查,确保eepromread()
按照您期望的顺序为您提供字节。他们应该,因为IEEE754独立于字节排序,但隐藏在嵌入式C库中的“聪明的增强”的数量可能会填补一本相当大的书。