用文件模拟CMOS保存数据

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 \n", 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\n", RegOffset);
30 
31     for(i = 0; i < Size; i++)
32     {
33         printf("Buffer[%d]: 0x%x\n", 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 \n", 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\n", RegOffset);
34     
35     for(i = 0; i < Size; i++)
36     {
37         printf("Buffer [%d]: 0x%x \n", i, *(Buffer + i));
38     }
39 #endif
40 
41     return 0;
42 }

 

posted @ 2013-09-07 17:52  爱无限  阅读(479)  评论(0编辑  收藏  举报