f1946的片子,想写个结构体到eeprom中,但是
eeprom_write(unsigned char addr, unsigned char value);
只能写8位无符号数据,而我要操作的结构体却是有各种
数据的,例如long。
我不想用循环什么的一个字节一个字节读出来再
拼起来,或者把内存中的结构体打撒成为一个
字节一个字节的数据再写进去,感觉很繁琐,
有没有什么更好的办法?
别告诉我可以不使用eeprom_write等等函数,
直接用PC指针对EEPROM进行操作,那就太方便了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
前一段正好写过类似的,就说一说
我用avr32,它是4字节对齐的,比如有一个struct
typedef struct eepData_t{
U32 a;
U16 b;
U8 c;
U8 d;
U8 e;
}eepData_t;
用sizeof(eepData_t),结果是12,就是说最后一个U8 eee实际占用了4 bytes。
内存中是这样的
a3,a2,a1,a0,b1,b0,c,d,X,X,X,e
X,X,X是被浪费的3字节,直接存大量这样的数据到eeprom,这种浪费是不能忍受的,改之
typedef struct eepData_t{
U32 a;
U16 b;
U8 c;
U8 d;
U8 e;
U8 x1;//无效数据 3 字节
U8 x2;
U8 x3;
}eepData_t;
eepData_t dataInRam;
dataInRam.a=0x12345678;
......
dataInRam.e=0x0e;
数据准备好了,写入的时候,直接强制类型转换
int writeData(U32 address, U8 *ptrData);
int wirteByte(U32 address, U8 byteData);
int writeData(U32 addr, U8 *data)
{
// 自己是知道一共要写9个字节的
for(int i=0;i<9;i++)
{
wirteByte(addr,*data);
data++;
addr++;
}
}
写入时用强制类型转换
writeData((U8 *)&dataInRam);
-----------------over-------------------
都是很基础的C,如果不明白,建议是找本国外的经典C教材,仔细看,最好直接看英文版,谭大师的就算了,虽然我也是用谭大师的书入门的,但是后来有重新学
修改:错别字
一周热门 更多>