在单片机开发时常常要将一些非char类型的数据存储在外部存储器中,而常用的就是EEPROM(24cxx)
24cxx在存储的过程中是以字节为单位进行读写操作的,当我们要保存一些非char类型的时候就很尴尬了,那么当遇到这种情况时该怎么办呢?
首先我们要将一些复杂的数据类型转换成字节形式,比如将float类型转换为4个char类型,那么怎么转换及简单又高效呢?
union 联合体
union cov
{
float a;
u8 b[4];
}D;
比如我要讲一个float类型的数据写入24cxx中用到函数:
void AT24CXX_Write_Float(u16 WriteAddr,float *pBuffer)
{
u8 i = 0;
union FB
{
float a;
u8 b[4];
}fb;
fb.a = *pBuffer;
for(i = 0; i < 4; i++)
{
AT24CXX_WriteOneByte(WriteAddr,fb.b[i]);
WriteAddr++;
}
}
我要读出一个float类型的数据的时候用到的函数:
void AT24CXX_Read_Float(u16 ReadAddr,float *pBuffer,u16 NumToRead)
{
u8 i = 0;
union FB
{
float a;
u8 b[4];
}fb;
for(i = 0; i < 4; i++)
{
fb.b[i]=AT24CXX_ReadOneByte(ReadAddr);
ReadAddr++;
}
*pBuffer = fb.a;
}
如有不对的地方,望指正。