将float型数据存储到EEPROM中或者flash中的方法
///方法一 flat a; unsigned char *p; p=(unsigned char *)&a;
//写入: for(int i=0;i<sizeof(float);i++) eeprom_write_byte(addr+i,p);
//读: for(int i=0;i<sizeof(float);i++) *p++=eeprom_read_byte(addr+i); ///方法二 //来个简单点的。 float data0,data1; u8 byte0,byte1,byte2,byte3;
data0=12345.1;
byte0=((u8 *)&data0)[0];//拆开 byte1=((u8 *)&data0)[1]; byte2=((u8 *)&data0)[2]; byte3=((u8 *)&data0)[3];
((u8 *)&data1)[0]=byte0;//合并 ((u8 *)&data1)[1]=byte1; ((u8 *)&data1)[2]=byte2; ((u8 *)&data1)[3]=byte3;
///方法三 union { uint32 Temp_Cn; uchar Cai[4]; }Ji_shu; /方法四 #define uchar unsigned char #define uint unsigned int void ftoc(void) { float a; uchar i,*px; uchar x[4]; void *pf; px=x; pf=&a; a=34.25; for(i=0;i<4;i++) *(px+i)=*((char *)pf+i); for(i=0;i<4;i++) printf("%x ",x); } 如果已将数存入eeprom,要将其取出合并,方法也是一样,可参考下面的程序。 void ctof(void) { float a; uchar i,*px; uchar x[4]={0xa0,0x1a,0xa,0x42}; void *pf; px=x; //px指针指向数组x pf=&a; for(i=0;i<4;i++) *((char *)pf+i)=*(px+i); printf("%f ",a); }
uchar x[4]={0xa0,0x1a,0xa,0x42};
追加:方法1明显有错误,只是当时马上下班,我没仔细看。相信各位访客看看自己改改就好了,我就不做修改了
