zoukankan      html  css  js  c++  java
  • 用文件模拟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 
    ", 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 }
  • 相关阅读:
    NOIP2012 借教室
    bzoj1816 扑克牌
    TYVJ1359 收入计划
    NOIP2015 跳石头
    易错点
    散列表
    数学模板
    12. 17 哈理工网络赛
    哈理工 网络赛
    三角形
  • 原文地址:https://www.cnblogs.com/jiangjh/p/3307626.html
Copyright © 2011-2022 走看看