Hi3520D 芯片的内置CMOS最多只有5个字节可以用,但是我需要保存的数据有很多。
其中一个解决办法是:可以把其他需要保存的数据放到一个配置文件中。每次写的时候写到配置文件,用的时候再从配置文件读出数据即可。
用文件写:
1 static INT CmosExtWrite(U16 RegOffset, U8 *Buffer, U32 Size) 2 { 3 int i; 4 FILE *fp; 5 int ret = 0; 6 fp = fopen(CMOS_FILE, "rb+"); 7 if(fp == NULL) 8 { 9 PrintInformaton("%s not exist , will create it ", CMOS_FILE); 10 return -1; 11 } 12 13 if(Cmos_Flag == 0) 14 { 15 ret = fread(file_context, sizeof(file_context), 1, fp); 16 Cmos_Flag = 1; //已读 17 } 18 19 memcpy(file_context + RegOffset, Buffer, Size); 20 21 fseek(fp, 0 ,SEEK_SET); 22 fwrite(file_context, sizeof(file_context), 1, fp); 23 fflush(fp); 24 25 fclose(fp); 26 27 28 #if 0 29 printf("CmosExtWrite success!!! RegOffset:0x%x ", RegOffset); 30 31 for(i = 0; i < Size; i++) 32 { 33 printf("Buffer[%d]: 0x%x ", i, *(Buffer + i)); 34 } 35 #endif 36 37 return 0; 38 39 }
用文件读:
1 static INT CmosExtRead(U16 RegOffset, U8 *Buffer, U32 Size) 2 { 3 int i; 4 FILE *fp; 5 fp = fopen(CMOS_FILE, "ab+"); 6 7 if(fp == NULL) 8 { 9 PrintInformaton("%s not exist , will create it ", CMOS_FILE); 10 return -1; 11 } 12 13 if(Cmos_Flag == 0) 14 { 15 fread(file_context, sizeof(file_context), 1, fp); 16 17 Cmos_Flag = 1; //已读 18 } 19 20 21 if(RegOffset > 256) 22 { 23 return -1; 24 } 25 26 27 memcpy(Buffer, file_context + RegOffset, Size); 28 29 fclose(fp); 30 31 32 #if 0 33 printf("CmosExtRead success!!! RegOffset:0x%x ", RegOffset); 34 35 for(i = 0; i < Size; i++) 36 { 37 printf("Buffer [%d]: 0x%x ", i, *(Buffer + i)); 38 } 39 #endif 40 41 return 0; 42 }