用文件模拟CMOS保存数据

时间:2023-03-09 00:19:12
用文件模拟CMOS保存数据

Hi3520D 芯片的内置CMOS最多只有5个字节可以用,但是我需要保存的数据有很多。

其中一个解决办法是:可以把其他需要保存的数据放到一个配置文件中。每次写的时候写到配置文件,用的时候再从配置文件读出数据即可。

用文件写:

 static INT CmosExtWrite(U16 RegOffset, U8 *Buffer, U32 Size)
{
int i;
FILE *fp;
int ret = ;
fp = fopen(CMOS_FILE, "rb+");
if(fp == NULL)
{
PrintInformaton("%s not exist , will create it \n", CMOS_FILE);
return -;
} if(Cmos_Flag == )
{
ret = fread(file_context, sizeof(file_context), , fp);
Cmos_Flag = ; //已读
} memcpy(file_context + RegOffset, Buffer, Size); fseek(fp, ,SEEK_SET);
fwrite(file_context, sizeof(file_context), , fp);
fflush(fp); fclose(fp); #if 0
printf("CmosExtWrite success!!! RegOffset:0x%x\n", RegOffset); for(i = ; i < Size; i++)
{
printf("Buffer[%d]: 0x%x\n", i, *(Buffer + i));
}
#endif return ; }

用文件读:

 static INT CmosExtRead(U16 RegOffset, U8 *Buffer, U32 Size)
{
int i;
FILE *fp;
fp = fopen(CMOS_FILE, "ab+"); if(fp == NULL)
{
PrintInformaton("%s not exist , will create it \n", CMOS_FILE);
return -;
} if(Cmos_Flag == )
{
fread(file_context, sizeof(file_context), , fp); Cmos_Flag = ; //已读
} if(RegOffset > )
{
return -;
} memcpy(Buffer, file_context + RegOffset, Size); fclose(fp); #if 0
printf("CmosExtRead success!!! RegOffset:0x%x\n", RegOffset); for(i = ; i < Size; i++)
{
printf("Buffer [%d]: 0x%x \n", i, *(Buffer + i));
}
#endif return ;
}