1.用联合,很容易搞定,存取的时候就用数组,使用的时候就用结构
typedef __packed struct
{
u32 TimerList[48];
u8 InfoGuts[256];
} Info;
typedef __packed union
{
Info info;
u8 IOArray[512];
}IOdata;
2.如果不想定义联合,直接这样写应该可以吧:
结构体数组
typedef struct
{
unsigned char No;
unsigned char date[6];
unsigned int sign;
}Fault_records_TypeDef;
Fault_records_TypeDef Fault_records[5];
I2C_24CXX_Write(EEPROM_ADDRESS, WriteAddr, &Fault_records[0].No, sizeof(Fault_records))
一次性保存整个数组到EEPROM。
另外写EEPROM的函数
void I2C_24CXX_Write(u8 EEPROM_ADDRESS,u8 WriteAddr,u8* pBuffer,u8 NumByteToWrite);
定义成
void I2C_24CXX_Write(u8 EEPROM_ADDRESS,u8 WriteAddr,const u8* pBuffer,u8 NumByteToWrite)
{
u8 Num[12];//设备号
u8 PASSWORD[12]; //密码
}SettingStruct;
volatile typedef __packed union
{
SettingStruct ini;
u8 SaveDataStyle[24];
}SaveSettingTyp;
volatile SaveSettingTyp Settings;
//-----------------------------------------
/* 结构体+共用体 参数信息保存EEROM
使用参数时用如下形式:
Settings.ini.Num
Settings.ini.PASSWORD
保存参数时用如下形式:
Settings.SaveDataStyle
//-----------------------------------------
memset((u8*)&Settings, 0, sizeof(Settings)); //清空结构体
strcpy((char*)Settings.ini.Num,(char*)"123456789");//赋值
I2C_EE_BufferWrite((u8*)&Settings.SaveDataStyle[0], EEPROM_Addr, sizeof(Settings)); //写入
I2C_EE_BufferRead((u8*)&Settings.SaveDataStyle[0], EEPROM_Addr, sizeof(Settings)); //读出
typedef __packed struct
{
u32 TimerList[48];
u8 InfoGuts[256];
} Info;
typedef __packed union
{
Info info;
u8 IOArray[512];
}IOdata;
2.如果不想定义联合,直接这样写应该可以吧:
结构体数组
typedef struct
{
unsigned char No;
unsigned char date[6];
unsigned int sign;
}Fault_records_TypeDef;
Fault_records_TypeDef Fault_records[5];
I2C_24CXX_Write(EEPROM_ADDRESS, WriteAddr, &Fault_records[0].No, sizeof(Fault_records))
一次性保存整个数组到EEPROM。
另外写EEPROM的函数
void I2C_24CXX_Write(u8 EEPROM_ADDRESS,u8 WriteAddr,u8* pBuffer,u8 NumByteToWrite);
定义成
void I2C_24CXX_Write(u8 EEPROM_ADDRESS,u8 WriteAddr,const u8* pBuffer,u8 NumByteToWrite)
会更安全些
想要一次性清空结构体,查找资料如下:
缓冲区处理函数位于“string.h”中,其中包括拷贝比较移动等函数如:
memccpy memchr memcmp memcpy memmove memset
这样很方便地对缓冲区进行处理。
memest原型 (please type "man memset" in your shell)
void *memset(void *s, int c, size_t n);
memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。
项目应用:
volatile typedef __packed struct
{
u8 Num[12];//设备号
u8 PASSWORD[12]; //密码
}SettingStruct;
volatile typedef __packed union
{
SettingStruct ini;
u8 SaveDataStyle[24];
}SaveSettingTyp;
volatile SaveSettingTyp Settings;
//-----------------------------------------
/* 结构体+共用体 参数信息保存EEROM
使用参数时用如下形式:
Settings.ini.Num
Settings.ini.PASSWORD
保存参数时用如下形式:
Settings.SaveDataStyle
//-----------------------------------------
memset((u8*)&Settings, 0, sizeof(Settings)); //清空结构体
strcpy((char*)Settings.ini.Num,(char*)"123456789");//赋值
I2C_EE_BufferWrite((u8*)&Settings.SaveDataStyle[0], EEPROM_Addr, sizeof(Settings)); //写入
I2C_EE_BufferRead((u8*)&Settings.SaveDataStyle[0], EEPROM_Addr, sizeof(Settings)); //读出