今天有一个同事问我一个问题“怎样向E2PROOM中存入一个数组”。其实这不应该是个问题。因为他已经在网上找到了这244AA16的一个驱动。别人已经提供怎样写入一个和读取一个字节的函数。只需将这两个函数包装一下即可轻松实现该功能。之所以感觉没法实现,只能说他的C语言基础比较薄弱。不明白结构体在内存中存储方式。或者指针式是“地址”的真正含义。 因为单位做单片机的人不多,我来介绍一下我的通常做法,大家一起讨论一下。这对高手来说那都不是事。 typedef struct SYS_INF { unsigned int watch; unsigned int gate; unsigned int state; unsigned int ID; } SYS_INF;
/* 功能:保存一个到E2PPROM 参数:ADD 存储数据地址 SData 存储数据的值 返回:无 */ void Writ_Byte(unsigned int ADD, unsigned char SData) { //具体功能代码 略 }
/*
功能:读取E2PROM中一个字节
参数:ADD 存储数据地址
返回:ADD地址的数据的值
*/
unsigned char Read_Byte(unsigned int ADD) { unsigned char dat;
//略......
return dat;
}
以上两个代码是已经实现过的,可以读、写 E2PRROM . 下面我们编写两个函数,可以实现SYS_INF整个结构体数据的读、写。 /* 功能:读取E2PROM中 参数:ADD,数据存储地址 pDest,数据读取后存储的文件 len,数据长度,单位字节 返回:无 */ void read_inf(unsigned int ADD, void *pDest, unsigned char len) { unsigned char *pUnchar; unsigned char i;
pUnchar = pDest;
for(i=0;i < len;i++) { *pUnchar = Read_Byte(ADD +i); pUnchar++; }
} /* 功能:将数据存储到E2PROM中 参数:ADD,数据存储地址 pDest,数据读取后存储的文件 len,数据长度,单位字节 返回:无 */
void write_inf(unsigned int ADD, void *pDest, unsigned char len) { unsigned char *pUnchar; unsigned char i;
pUnchar = pDest;
for(i=0;i < len;i++) { Writ_Byte( ADD+i,*pUnchar); pUnchar++; } }
调用例子
void main( ) { SYS_INF sysInf;
/* sysInf初始化 */
//保存例子 write_inf(0x2000, &sysInf, sizeof(SYS_INF));
//读取例子 read_inf(0x2000, &sysInf, sizeof(SYS_INF));
}
以上代码可以在需要存储结构体方便使用。只是利用了指正的功能即可实现
|