用文件模拟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 }

 

你可能感兴趣的:(OS)