我使用微芯片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变量
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浮点..我怎么能消除错误?
最干净的方法是*(char*)(fptr+
i ) = eepromread(
i );
。您需要初始指针的偏移量,转换为指向字符的指针,解引用。
而且,至少我的编译器(gcc)在第一次赋值时犹豫不决。您需要更像fptr = (char*)(&f);
的东西,以便指向浮点数的指针与赋值兼容。
eepromread()
按照您期望的顺序提供字节。他们应该这样做,因为IEEE754是独立于字节排序的,但是隐藏在嵌入式C库中的"聪明的增强"的数量可以填满一本相当大的书。