⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.c

📁 RC522完整程序无需修改可放心使用
💻 C
📖 第 1 页 / 共 2 页
字号:
     Equip_CurStatus =SUCCESS;
     Do_DisLed_Flash(0x00,0x00,100);
     Dis_DataFull_Led(FALSE);
  }
  if(ii>1)
  {
	 Do_DisLed_Flash(0x00,0x00,100);
	 Equip_CurStatus = SUCCESS;
  }
  /************************************************************************/
  //mem will full --提前告警。(剩下的空间)
  if(Equip_CurStatus == MEM_FULL_ARALM)
    {
	 Equip_CurStatus = MEM_WILLFULL_WARNING;
     Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
     Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
	}
  else if((Equip_CurStatus == MEM_WILLFULL_WARNING))
    { 
	  if(myall_savedata.conwrite_page > myall_savedata.conread_page)
	    {
		   ii=((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
		}
	  else ii=myall_savedata.conread_page-myall_savedata.conwrite_page;
	
	  if(ii>MYALL_FORBYTE_FLAG)
	    {
		 Equip_CurStatus = 0;
	     Dis_DataFull_Led(FALSE);
	     Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
	     Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
	    }
	}

  return(SUCCESS);
}


BYTE  Renew_ConData_From_Memory(Con_Record  *con_record)
{
  int   ii,jj;
  WORD  save_page;
  if(!mymem_ok_flag)return(MEM_IC_ERR);

  if(myall_savedata.conread_page == myall_savedata.conwrite_page)
  {
   if(myall_savedata.conread_byte-sizeof(Con_Record) >= 0)
	 {
      myall_savedata.conread_byte -= sizeof(Con_Record);
      ii=Read_From_Buffer(con_record,sizeof(Con_Record),THE_BUFFER_TWO,myall_savedata.conread_byte);
	  return(ii);
	 }

   if(--myall_savedata.conread_page < CON_RECORD_START_PAGEADDR)
     {
      //SendStr("3",1);
	  //SendStr(&myall_savedata.cycle_flag,1);
	  if(myall_savedata.cycle_flag != MYALL_FORBYTE_FLAG)
	    {
	     myall_savedata.conread_page = CON_RECORD_START_PAGEADDR; //must!!

	     return(NO_CON_RECORD); //数据循环标志。(最大可恢复点)
		}
 	  myall_savedata.conread_page = (MAX_PAGES-1);
	 }
   /************************************************************
   理论上这里不会运行的,因为缓存区不只一两页!!
   if((myall_savedata.conread_page == myall_savedata.conwrite_page)
      && myall_savedata.conread_byte <=0)
     {
       myall_savedata.conread_page++;  //已达最大恢复点!
	   return(NO_CON_RECORD);
	 }
   /**************************************************************/
   jj = sizeof(Con_Record)-myall_savedata.conread_byte;
   if((ii=Read_From_Buffer(((BYTE*)con_record)+jj,myall_savedata.conread_byte,THE_BUFFER_TWO,0))!=SUCCESS)
     {
	   return(ii);//goto END;
	 }
   myall_savedata.conread_byte = (MEMPAGE_SIZE-1) - jj;
   ii=Memory_ArrayRead(con_record,jj,myall_savedata.conread_page,myall_savedata.conread_byte);

   return(ii);    //must!
  }

  //===============================================================
  if(myall_savedata.conread_byte-sizeof(Con_Record) >= 0)
    {
     myall_savedata.conread_byte -= sizeof(Con_Record);
     ii=Memory_ArrayRead(con_record,sizeof(Con_Record),myall_savedata.conread_page,myall_savedata.conread_byte);
	 return(ii);//goto END;
    }

  save_page = myall_savedata.conread_page;
  if(--myall_savedata.conread_page < CON_RECORD_START_PAGEADDR)
    {
	 if(myall_savedata.cycle_flag != MYALL_FORBYTE_FLAG)  //MUST!!!!!!!花了太多时间
	   {
	    myall_savedata.conread_page = save_page; //must!!
	    return(NO_CON_RECORD); //数据循环标志。(最大可恢复点)
	   }
 	 myall_savedata.conread_page = (MAX_PAGES-1);
	}
  if(myall_savedata.conread_page == myall_savedata.conwrite_page) //关键点!!
    {
      myall_savedata.conread_page = save_page;  //已达最大恢复点,数据满
      Equip_CurStatus = MEM_FULL_ARALM;
      return(MEM_FULL_ARALM);//如果不这样下面将可能只写入一半记录!!!
	}

  jj = sizeof(Con_Record)-myall_savedata.conread_byte;
  if((ii=Memory_ArrayRead(((BYTE*)con_record)+jj,myall_savedata.conread_byte,save_page,0))!=SUCCESS)
    {
     return(ii);//goto END;
    }
  myall_savedata.conread_byte = (MEMPAGE_SIZE-1) - jj;
  ii=Memory_ArrayRead(con_record,jj,myall_savedata.conread_page,myall_savedata.conread_byte);
  if(ii!=SUCCESS)return(ii);
  /************************************************************************
  //mem will full --提前告警。
  if(myall_savedata.conwrite_page > myall_savedata.conread_page)
    {
	   ii=((MAX_PAGES-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
	}
  else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;

  if(ii<MYALL_FORBYTE_FLAG)
  {
     Dis_DataFull_Led(TRUE);
     Equip_CurStatus=MEM_WILLFULL_WARNING;
     return(MEM_WILLFULL_WARNING);//goto END;
  }
  if(ii<2)
  {
     Equip_CurStatus = MEM_FULL_ARALM;
     return(MEM_FULL_ARALM);//如果不这样下面将可能只写入一半记录!!!
  }
  /************************************************************************/
  //mem will full --提前告警。
  if(myall_savedata.conwrite_page > myall_savedata.conread_page)
    {
	   ii= ((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
	}
  else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;

  if(ii<MYALL_FORBYTE_FLAG)
    {
     Equip_CurStatus=MEM_WILLFULL_WARNING;
     Stop_Timer(DISPLAY_DELAYEVENT_Tevent);//msut!!
     Set_TimerEvent(DISPLAY_DELAYEVENT_Tevent,DISPLAY_DELAYEVENT_TIME);
     //return(MEM_WILLFULL_WARNING);//goto END;
	 //注意:这样将很难完全恢复的。
    }

  return(SUCCESS);
}


BYTE  Saveparam_To_Mem(void)
{
  BYTE  ii,alllen,len;
#ifdef _DEBUG
	DebugString("Save param To Memory\r\n");
#endif
  if(!mymem_ok_flag)return(MEM_IC_ERR);

  ii=Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
  if(ii != SUCCESS)return(ii);

  alllen=PARA_START_BYTEADDR;
  len=sizeof(Equip_Addr);
  Write_To_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
  if(ii != SUCCESS)return(ii);
/*
  alllen += len;
  len=sizeof(Op_User_Info);
  ii=Write_To_Buffer(&op_user_info,len,THE_BUFFER_ONE,alllen);
  if(ii != SUCCESS)return(ii);

  alllen += len;
  len=sizeof(Con_param_Info);
  ii=Write_To_Buffer(&con_param_info,len,THE_BUFFER_ONE,alllen);
  if(ii != SUCCESS)return(ii);
*/
  alllen += len;
  len=sizeof(SeedCard_Info);
  ii=Write_To_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
  if(ii != SUCCESS)return(ii);

  ii=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
  if(ii != SUCCESS)return(ii);

  return(SUCCESS);
}


BYTE  Save_My_All_Data(void)
{
  BYTE  alllen,len,i;

#ifdef _DEBUG
	DebugString("Save my All To Memory\r\n");
#endif
  if(!mymem_ok_flag)return(MEM_IC_ERR);

  i=Buffer_To_Mem(THE_BUFFER_TWO,SAVE_BUFFER2_PAGEADDR);
  if(i != SUCCESS)return(i);

  alllen  = 0;
  len=sizeof(Myall_SaveData);
  Write_To_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);

  alllen += len;
  len=sizeof(Con_StatusInfo);
  Write_To_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);

  alllen += len;
  len=sizeof(sttOtherTableInfo);
  Write_To_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
/*
  alllen += len;
  len=sizeof(Dc_Peoples);
  Write_To_Buffer(&dc_peoples,len,THE_BUFFER_ONE,alllen);

  alllen += len;
  len = 6*sizeof(BYTE);
  Write_To_Buffer(cardstate_time,len,THE_BUFFER_ONE,alllen);
*/
  i=Buffer_To_Mem(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);

  return(i);
}


BYTE  ClearConParam_From_Mem(void)  //恢复到初始出厂状态。
{
  Memory_PageErase(PARAMETER_PAGE1ADDR,2);//FOR TEST.
  return(Memory_Check());
}


bit   mymem_ok_flag = FALSE;
BYTE  Memory_Check(void)    //注意:要保证缺省状态下都能消费!
{
//   Card_Class_Para  pdata card_class;
   BYTE  i,alllen,len;
   mymem_ok_flag = TRUE;
   //Memory_PageErase(MYTEST_START_PAGEADDR,MYTEST_END_PAGEADDR);//IS A TEST!
   //Memory_PageErase(PARAMETER_PAGE1ADDR,2);//FOR TEST.
   alllen=PARA_START_BYTEADDR; //for "else if"--cmp rev
   len=strlen(YsnOysFlag_Str);
   for(i=0;i<45;i++)
     {//防止电压不稳等!
	  Memory_ArrayRead(uartSbuf,alllen,PARAMETER_PAGE1ADDR,0);
	  if(!memcmp(uartSbuf+YSN_FLAG_BYTEADDR,YsnOysFlag_Str,len))break;
	  delay_ms(25);
	 }
   if(i==45)
     {
#ifdef _DEBUG
	  DebugString("Init Memory all parameter\r\n");
#endif
	  //SendStr("t0",2);
  	  //len=strlen(YsnOysFlag_Str);
	  Write_To_Buffer(YsnOysFlag_Str,len,THE_BUFFER_ONE,YSN_FLAG_BYTEADDR);
      //-------------------------------------------------------------------
      Read_From_Buffer(uartSbuf,len,THE_BUFFER_ONE,YSN_FLAG_BYTEADDR);
	  if(memcmp(uartSbuf+YSN_FLAG_BYTEADDR,YsnOysFlag_Str,len))
	    {
 	     mymem_ok_flag  = FALSE;
		 Equip_CurStatus= MEM_IC_ERR;
		 //SendStr(uartSbuf,len);--for test.
		 //SendStr("t1",2);
	     return(MEM_IC_ERR);//for time!
		}
	  //-------------------------------------------------------------------
      //Memory_PageErase(PARAMETER_PAGE1ADDR,2);
	  Memory_PageErase(SAVE_BUFFER1_PAGEADDR,50);

      alllen=YSN_FLAG_BYTEADDR;
	  len=strlen(YsnOysFlag_Str);
	  Write_To_Buffer(YsnOysFlag_Str,len,THE_BUFFER_ONE,alllen);

      alllen=YSN_REV_BYTEADDR;
  	  len=strlen(MyReVision_Str);
	  Write_To_Buffer(MyReVision_Str,len,THE_BUFFER_ONE,alllen);

  	  alllen=PARA_START_BYTEADDR;
	  len=sizeof(Equip_Addr);
	  memset(&equip_addr,0,len);
	  equip_addr.ntype=5;
	  equip_addr.number_addr=5000;
      //memcpy(uartSbuf,&equip_addr,len);
	  i=Write_To_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
	  if(i != SUCCESS)return(i);
/*
	  alllen += len;
	  len=sizeof(Op_User_Info);
	  //memset(&op_user_info,0,len);
	  memcpy(op_user_info.op_cardcode,Default_Pwd,3);
	  memcpy(op_user_info.op_password,Default_Pwd,3);
	  i=Write_To_Buffer(&op_user_info,len,THE_BUFFER_ONE,alllen);
	  if(i != SUCCESS)return(i);

   	  alllen += len;
	  len=sizeof(Con_param_Info);
	  memset(&con_param_info,0,len);
	  con_param_info.con_mode =JC_MODE;//5
	  con_param_info.max_money=9999900L;
	  for(i=0;i<MAX_PERIOD_S;i++)
	   {
	    con_param_info.dz_money[i]=100*(i+1);
	    con_param_info.Js_money[i]=100*(i+1);
	   }
	  con_param_info.Js_timer[0]=0x01;
	  con_param_info.end_times[0][0]=0x24;
      //memcpy(uartSbuf,&con_param_info,len);
      i=Write_To_Buffer(&con_param_info,len,THE_BUFFER_ONE,alllen);
	  if(i != SUCCESS)return(i);
*/
	  alllen += len;
	  len=sizeof(SeedCard_Info);
	  memset(&seedcard_info,0,len);
	  memset(seedcard_info.unit_code,0x01,3);
	  i=Write_To_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
	  if(i != SUCCESS)return(i);

	  i=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
	  if(i != SUCCESS)return(i);

	  //alllen += len;
      //SendStr(&alllen,1);  //for test
	  /*********************************************************/
/*      alllen = 0;
 	  len=sizeof(Card_Class_Para);
      memset(&card_class,0,len);
	  card_class.daymax_money   = 9999900;
	  card_class.oncemax_money  = 9999900;
	  card_class.password_money = 9999900;
  	  card_class.Kq_time[0][1]  = 0x24;
	  for(i=0;i<MAX_PERIOD_S;i++)
	   {
	    card_class.discount[i] = 100;
		card_class.times[i]    = 100;
	   }
	  for(i=0;i<8;i++,alllen += len)
	   {
	  	card_class.card_class=i+1;
        Write_To_Buffer(&card_class,len,THE_BUFFER_ONE,alllen);
	   }
*/
      i=Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE2ADDR);
	  /*********************************************************/
      //i=Memory_PageErase(PARAMETER_PAGE2ADDR,1);
  	  if(i != SUCCESS)return(i);
      //========================================================
	  i=Memory_PageErase(SAVE_BUFFER2_PAGEADDR,1);
	  if(i != SUCCESS)return(i);

	  alllen = 0;
	  len=sizeof(Myall_SaveData);
	  memset(&myall_savedata,0,len); //cycle_flag = 0;
      myall_savedata.conwrite_page= CON_RECORD_START_PAGEADDR;
      myall_savedata.conread_page = CON_RECORD_START_PAGEADDR;
      myall_savedata.lread_page   = CON_RECORD_START_PAGEADDR;
	  myall_savedata.cycle_flag   = 0;//理论上不必要!
	  Write_To_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);

	  alllen += len;
	  len=sizeof(Con_StatusInfo);
	  memset(&con_statusinfo,0,len);
	  Write_To_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);

	  alllen += len;
	  len=sizeof(sttOtherTableInfo);
	  memset(&stOtherTableInfo,0,len);
	  Write_To_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
	  i=Buffer_To_Mem(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);
	  //SendStr("t1",2);
	  if(i != SUCCESS)return(i);
  	 }
   else if(memcmp(uartSbuf+YSN_REV_BYTEADDR,MyReVision_Str,strlen(MyReVision_Str)))
     {
      Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);//must!!
	  len=strlen(MyReVision_Str);
	  Write_To_Buffer(MyReVision_Str,len,THE_BUFFER_ONE,YSN_REV_BYTEADDR);
  	  Buffer_To_Mem(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
	 }
   i=Restore_My_All_Data();
   //SendStr("t4",2);
   return(i);
}


BYTE  Restore_My_All_Data(void)
{
   BYTE  alllen,len,i,ii;

#ifdef _DEBUG
	DebugString("Restore my all data\r\n");
#endif
   if(!mymem_ok_flag)return(MEM_IC_ERR);

   i=Mem_To_Buffer(THE_BUFFER_TWO,SAVE_BUFFER2_PAGEADDR);
   if(i != SUCCESS)return(i);

   //DoTest_ArrayRead_Memory(MyALL_SAVEDATA_PAGEADDR);//for test.
   Mem_To_Buffer(THE_BUFFER_ONE,MyALL_SAVEDATA_PAGEADDR);

   alllen = 0;
   len=sizeof(Myall_SaveData);
   Read_From_Buffer(&myall_savedata,len,THE_BUFFER_ONE,alllen);
   //memcpy(uartSbuf,&myall_savedata,len);
   //SendStr(uartSbuf,len);

   alllen += len;
   len=sizeof(Con_StatusInfo);
   Read_From_Buffer(&con_statusinfo,len,THE_BUFFER_ONE,alllen);
   con_statusinfo.con_bootmoney  =0L; //本次开机后的消费的总金额;
   con_statusinfo.con_bootrecords=0;  //本次开机后消费记录数;

   alllen += len;
   len=sizeof(sttOtherTableInfo);
   Read_From_Buffer(&stOtherTableInfo,len,THE_BUFFER_ONE,alllen);
#ifdef _DEBUG
	DebugString("stOtherTableInfo data\r\n");
	DebugData(len,len,(unsigned char *)&stOtherTableInfo);
#endif

   //===========================================================
   //DoTest_ArrayRead_Memory(PARAMETER_PAGE1ADDR);//for test.
   i=Mem_To_Buffer(THE_BUFFER_ONE,PARAMETER_PAGE1ADDR);
   if(i != SUCCESS)return(i);

   alllen=PARA_START_BYTEADDR;
   len=sizeof(Equip_Addr);
   Read_From_Buffer(&equip_addr,len,THE_BUFFER_ONE,alllen);
   alllen += len;
   len=sizeof(SeedCard_Info);
   i=Read_From_Buffer(&seedcard_info,len,THE_BUFFER_ONE,alllen);
  /************************************************************************/
  if(myall_savedata.conwrite_page > myall_savedata.conread_page)
    {
	   ii=((CON_RECORD_END_PAGEADDR-1)-myall_savedata.conwrite_page)+(myall_savedata.conread_page-CON_RECORD_START_PAGEADDR);
	}
  else ii= myall_savedata.conread_page-myall_savedata.conwrite_page;

  if(ii==0)return(i);
  else if(ii==1)
  {
     Equip_CurStatus = MEM_FULL_ARALM;
     Dis_DataFull_Led(TRUE);
     return(MEM_FULL_ARALM);
  }
  else if(ii<MYALL_FORBYTE_FLAG)
  {
     Equip_CurStatus=MEM_WILLFULL_WARNING;
     return(MEM_WILLFULL_WARNING);
  }

  return(i);
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -