/******************************************************************************
文 件 名：main.h
功能描述：主程序文件
          负责系统初始化、任务调试及电源管理
作    者：张暄
版    本：V1.0
日    期：2016.11.1
******************************************************************************/
//20210422 修改完友达屏时序
//20210621 修改软硬件版本号
//20220115 变更TFT背光频率(61194芯片换成9967芯片)

#include "main.h"
#include "fuelconfig.h"

#include "CAN_Communication_Matrix.h"
//#include "NM_includes.h" //2018-04-10     

extern uint8_t sleepFl1g, sleepFlg;
uint8_t                       ScheduleCtrlCnt ;
volatile ScheduleUpdateUnion  ScheduleUpdate;
TaskGroupStruct               TaskGroup;
uint8_t ODOtime;
//OSEK_NM_INIT   OSEK_NM_INI;  //2018-04-10
FuelStruct     	    FuelInitPara;
AFC_PARA            AFCPara;
AFC_INIT            AFC_Init;
INT16U              FuelResistanceV;
INT32U              Sum_FuelConsumption ;
uint8_t AverageFuel_LL ;
uint8_t AverageFuel_LH ;
uint8_t AverageFuel_HL ;
uint8_t AverageFuel_HH ;
uint16_t TankLevel_temp;
uint8_t RESET_ODO_count;

/******************************************************************************
函数名：main
功  能：主函数
参  数：无
返回值：无
******************************************************************************/
void main(void)
{
  Power_Management_Init();
 if((NVM_CONFIG_FUELBOX==1)||(NVM_CONFIG_FUELBOX==2))
  { 
  FuelInitPara.FuelShortCircuitR = 5;
  FuelInitPara.FuelOpenCircuitR = 2900;           //1900必须小于2000     
  
  FuelInitPara.DisplayZoneBoundary[0] = 1101;
  FuelInitPara.DisplayZoneBoundary[1] = 1101;
  FuelInitPara.DisplayZoneBoundary[2] = 921;      //补植
  FuelInitPara.DisplayZoneBoundary[3] = 621;
  FuelInitPara.DisplayZoneBoundary[4] = 471;      //补植
  FuelInitPara.DisplayZoneBoundary[5] = 321;
  FuelInitPara.DisplayZoneBoundary[6] = 258;      //补植
  FuelInitPara.DisplayZoneBoundary[7] = 172;
  FuelInitPara.DisplayZoneBoundary[8] =  96;      //补植
  FuelInitPara.DisplayZoneBoundary[9] =  30;
  FuelInitPara.DisplayZoneBoundary[10] = 10;
  
  FuelInitPara.FuelCapacityBoundary[0]=0;
  FuelInitPara.FuelCapacityBoundary[1]=0;  //60;
  FuelInitPara.FuelCapacityBoundary[2]=105;  //110; //130
  FuelInitPara.FuelCapacityBoundary[3]=444;
  FuelInitPara.FuelCapacityBoundary[4]=675; //250;
  FuelInitPara.FuelCapacityBoundary[5]=907; //310;
  FuelInitPara.FuelCapacityBoundary[6]=1139; //370;
  FuelInitPara.FuelCapacityBoundary[7]=1369; //440;
  FuelInitPara.FuelCapacityBoundary[8]=1595; //480;
  FuelInitPara.FuelCapacityBoundary[9]=1743; //540->580
  FuelInitPara.FuelCapacityBoundary[10]=1743; 
  }
  else if(NVM_CONFIG_FUELBOX==3)
  {
  FuelInitPara.FuelShortCircuitR = 5;
  FuelInitPara.FuelOpenCircuitR = 2900;           //1900必须小于2000     
  
  FuelInitPara.DisplayZoneBoundary[0] = 1102;
  FuelInitPara.DisplayZoneBoundary[1] = 1102;
  FuelInitPara.DisplayZoneBoundary[2] = 922;      //补植
  FuelInitPara.DisplayZoneBoundary[3] = 620;
  FuelInitPara.DisplayZoneBoundary[4] = 470;      //补植
  FuelInitPara.DisplayZoneBoundary[5] = 320;
  FuelInitPara.DisplayZoneBoundary[6] = 247;      //补植
  FuelInitPara.DisplayZoneBoundary[7] = 169;
  FuelInitPara.DisplayZoneBoundary[8] =  97;      //补植
  FuelInitPara.DisplayZoneBoundary[9] =  31;
  FuelInitPara.DisplayZoneBoundary[10] = 10;
  
  FuelInitPara.FuelCapacityBoundary[0]=0;
  FuelInitPara.FuelCapacityBoundary[1]=0;  //60;
  FuelInitPara.FuelCapacityBoundary[2]=70;  //110; //130    
  FuelInitPara.FuelCapacityBoundary[3]=213;
  FuelInitPara.FuelCapacityBoundary[4]=358; //250;
  FuelInitPara.FuelCapacityBoundary[5]=505; //310;
  FuelInitPara.FuelCapacityBoundary[6]=652; //370;
  FuelInitPara.FuelCapacityBoundary[7]=797; //440;
  FuelInitPara.FuelCapacityBoundary[8]=940; //480;
  FuelInitPara.FuelCapacityBoundary[9]=1041; //540->580
  FuelInitPara.FuelCapacityBoundary[10]=1041; 
  }
  AFC_Init.CalcAFCMaxNum = 100;                   //50公里或者100公里一更新
  AFC_Init.AFCMin        = 30;                    //油耗最小值十倍
  AFC_Init.AFCMax        = 300;                   //油耗最大值
  AFC_Init.AFCPreinstall = 150;                    //初始值 8        20200310
  AFC_Init.CurODO        = NVMODO.Sig.Value * 100;//总公里数100倍
  AFC_Init.MaxDRMileage  = 999900;                 //续航里程最大值

	InitFuelParamter((FuelStruct*)&FuelInitPara);
	InitAFC((AFC_INIT *)&AFC_Init);

  SetFuelSensorRecoverGroupCnt(24);               //检测
  SetFuelSensorOpenCircuitGroupCnt(24);           //开路
  SetFuelSensorShortCircuitGroupCnt(24);          //短路
 
  Read_CZSYBKPILSFR_FLASH();                                                //调表指针角度
//  OSEK_NM_INI.NmIdBase=0X500;     //2018-04-10
 // OSEK_NM_INI.NmIdBottom=0X5FF;
 // OSEK_NM_INI.NmIdOwn=0X03;//
 // OSEK_NM_INI.NmRxLimit=4;
 // OSEK_NM_INI.NmTxLimit=8;
 // OSEK_NM_INI.NmTimeType=100;
  //OSEK_NM_INI.NmTimeMax=260;
  //OSEK_NM_INI.NmTimeError=1000;
  //OSEK_NM_INI.NmTimeWaitBusSleep=1500;
  //OSEK_NM_INI.NmTimeRequestSleepInd=5000;
  //OSEK_NM_INI.NmTimeRequestLimpSleepInd=4;
  
 // InitNM(&OSEK_NM_INI);
  Task_Scheduler_Init();
  Stepper_Motor_Reset();
  for(;;)
  {
    wdt_reset();                                                            //
  //  if(SYS_OPR_STAT_IGN_ON)  ///  //2018-04-10
//         NmPara.NmIGNState=1;
 //   else  if(SYS_OPR_STAT_IGN_OFF)
 //      NmPara.NmIGNState=0;  ////
    Power_Management_Service();   

    Task_Scheduling_Service();
    DoCAN_Communication_Service();
    UDS_Server_Application_Service();                                     //诊断
    EEPROM_RW_Service();
    TFT_LCD_General_Table_Write_Service();
    if(SYS_IGN_OFF_DISP_MODE)
    { 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
        TFT_LCD_General_Table_Write_Service(); 
    }    
    Stepper_Motor_Speed_Control_Service();
    
    APIBGNMEnable = 0;
    TSzhen_mode();                                                          //表针调试模式

    TASK_1ms_ALL       CoCAN_Signal_Update_Service();
    TASK_2ms_GROUP_0    {
                         Randomcnt();
                         Analog_Signal_Conversion_Service();                //AD信号采集
                      	 //DoCAN_Get_Multi_frame_Recv();                    //广播帧接收服务--hyq
                        }
    TASK_2ms_GROUP_1    {
                         TFT_LCD_Display_Update_Service();                  //tft
                         CanLoseDetected ();
                        //DTCAgingCount();      
                        }
    TASK_10ms_GROUP_0   NVM_Data_Update_Service();                          //eep
    TASK_10ms_GROUP_1   EEPROM_Access_Service();                            //写eep
   // TASK_10ms_GROUP_2   Telltales_Left_Right_Management_Service();          //转向
    TASK_10ms_GROUP_4   Sound_Play_Service();                               //声音播放
    TASK_10ms_GROUP_5 {
                             Data_Engine_Speed_Processing_Service();             //转速
                      }
    TASK_10ms_GROUP_6   Fuel_Process();                                     //燃油         
    //TASK_10ms_GROUP_7   Radar_R3_Receiving_Service();                     //雷达   
    TASK_10ms_GROUP_9   Startup_Animation_Play_Service();                   //开机动画
    
    TASK_20ms_GROUP_0   Sys_Status_Update_Service();                        //电源状态
    TASK_20ms_GROUP_1 {   
                        MSCAN0_Bus_Off_Monitoring_Service();                //MSCAN0 Bus-off状态监控服务
                        BL_Management_Service();                            //背光控制
                      }
    TASK_20ms_GROUP_2 {
                        Line_In_Debounce_Service();                         //硬线
                        //Menu_Processing_Service();                        //菜单按键处理
                        Key_Status_Detect_Service();                        //按键服务器
                      }
    TASK_20ms_GROUP_3  IO_Management_Service();                             //界面管理
    TASK_20ms_GROUP_4  Gauges_Management_Service();                         //车转水油显示
    TASK_20ms_GROUP_5  {
                          Data_Vehicle_Speed_Processing_Service() ;            //车速  
                        }
    TASK_20ms_GROUP_6  {
                        Data_Coolant_ADblue_Processing_Service();            //天蓝液  LCD 
                        }
    TASK_20ms_GROUP_7  {
                        Data_Coolant_Temp_Processing_Service();             //水温
                       }
    TASK_20ms_GROUP_8  { 
                        Data_Coolant_Oil_Processing_Service();              //机油 
                       }
    TASK_20ms_GROUP_9	 {

                       }
    TASK_50ms_GROUP_0   Flash_Sync_Signal_Generation_Service();             //闪烁
    TASK_50ms_GROUP_1   Telltales_Management();                             //指示灯
    TASK_50ms_GROUP_2   Sound_Scheduling_Service();                         //声音 
    TASK_50ms_GROUP_3  {
                         Data_AirO_Level_Processing_Service();               //气压1
                        }
    TASK_50ms_GROUP_4   {
                        Data_AirT_Level_Processing_Service();               //气压2        
                        }
    TASK_100ms_GROUP_0  CAN_NORMAL_TIME_PRG();
    TASK_100ms_GROUP_1  Popups_Management_Service();                        //报警逻辑 显示
    TASK_100ms_GROUP_2  
                        {
                        Drive_Info_Display_Update_Service();                //显示
                        
                        }
   TASK_100ms_GROUP_3
                        {
                                /* if(NVM_ODO_VALUE <29980)
                          {
                          
                            NVM_ODO_VALUE= 29980;
                            NVM_Data_Update(NVM_ODO_DATA);
                         }*/ 
                            if( CLEAR_ODO_STAR==1) 
                            {
                                if(NVM_ODO_VALUE <20000)
                                {
                                     if(KeyEnterinStatus==1) 
                                     {
                                           if(RESET_ODO_count<220) 
                                            RESET_ODO_count++;
                                           else
                                           RESET_ODO_count=100;
                                           if(RESET_ODO_count>=100)
                                           {
                                                 CLEAR_ODO_STAR=0;
                                                 RESET_ODO_count=0;
                                                 Data_Clear_TripA();
                                                NVM_ODO_VALUE= 0;
                                                NVM_Data_Update(NVM_ODO_DATA);
                                                NVM_RESET_ODO_FLAG=1;
                                                NVM_Data_Update(NVM_RESET_ODO);
                                           }
                                     }
                                     else
                                          CLEAR_ODO_STAR=0;
                               }
                               else
                                    CLEAR_ODO_STAR=0;
                            }
                        }

    TASK_100ms_GROUP_4
                        {
                          RTI_Timing_Service();                             //时间定时器
                          Data_IGN_Off_Timing_Service();                    //IGN_IGOFF计时
                          Drive_Info_Import_Export_Service();               //车速输出 报文外发
                        }
    TASK_100ms_GROUP_5  
                        {
                              Data_Drive_Info_Group1_Processing_Service();        //ODO/TRIP
                              Data_Drive_Info_Group2_Processing_Service();       //瞬时油耗
                        }
    TASK_100ms_GROUP_6
                        {
                           Popup_Scheduling_Service();                      //报警调度 
                        }
    TASK_100ms_GROUP_7  SaveDTCsToEEPROM();
   // TASK_100ms_GROUP_8  Warning_Processing_Service();                       //报警逻辑 状态     
    TASK_100ms_GROUP_9
                       {
                          Factory_ClearOdoM();                              //生产清理大G                     
                       }
  }
}
/******************************************************************************
函数名：Fuel_Process
功  能：
参  数：无
返回值：无
******************************************************************************/
uint8_t   Fuel_Seg, FuelStatus;
uint16_t  AVYOUHAO;
uint16_t  DataDTE;
uint16_t  FuelConsumeSum;
uint16_t  DataAvgFuelConsByLF;               //平均油耗

void Fuel_Process(void)                      //清平均油耗的同时续航也会清零
{
  
  uint16_t  DataAvgFuel;               //平均油耗
  wdt_reset();
 if (NVM_CONFIG_POWER==1)
  {  
      if((IO_DISPLAY_MODE != IO_DISP_MODE_IGN_OFF)&&(ANALOG_KL15_VOLTAGE>=18000))
      {
      SetPowerSt(1);
      AFCTimerCall();
     FuelConsumeSum = (FuelConsumptionRateH<<8)|(FuelConsumptionRateL );
     FuelConsumeSum = (FuelConsumeSum *5/9)>>2;
      AFCPara.FuleConsume = (uint16_t)FuelConsumeSum; //unit ul    
         
      FuelConsumeSum = 0;                   
    
      AFCPara.CurODO =  NVMODO.Sig.Value*100;        //大G   
     	       
    	AFCPara.RPM = DataESpeedActual;               //转速  
    	AFCPara.Speed = DataVSpeedActual/10;          //车速
     
    	SetAFCPara((AFC_PARA *)&AFCPara);
    
    	if (AnalogFuelSensorRes < 10) 
    	{
    	  AnalogFuelSensorRes = 10;  
    	}
    	
    	//if (AnalogFuelSensorRes<30)
    	//  AnalogFuelSensorRes = 30;
    	
      SaveSampleVal(AnalogFuelSensorRes);
      FuelFSM();
      
      FuelResistanceV = GetFuelResistance(); //燃油电阻获取
      
      FuelStatus = GetFuelSensorState();  //燃油状态获取
     
      /* if(FuelStatus==FuelSensorNormal)
    	DataDTE=GetDRMileage();  //unit:km,accuracy:1续航里程
     else
      DataDTE = 0;*/
     if(FuelStatus==FuelSensorNormal) 
     { 
          if(DataFuelVolRemaining==0) 
          {
            DataDTE=0;
          } 
          else
          {                                                                 
          DataDTE=GetDRMileage();  //unit:km,accuracy:1续航里程      //更改续航里程为0 2021.1.19
          }
     }
     else
      DataDTE = 0;
      
     	DataAvgFuelConsByLF=GetCurAFC();  //平均油耗
     	DataAvgFuel = DataAvgFuelConsByLF/10;
    	AverageFuel_LL =  (DataAvgFuel<<1)&0xFF;       //系数0.5
    	AverageFuel_LH =  (DataAvgFuel>>7)&0xFF ;
    	AverageFuel_HL =  (DataAvgFuel>>15)&0xFF ;
    	AverageFuel_HH =  (DataAvgFuel>>23)&0xFF  ;
      if (FuelResistanceV) 
      {
        Fuel_Seg = GetFuelStep();
      }
      
      if(FuelStatus==FuelSensorOpenCircuit)                   //2021.2.8  取消短路
       Fuel_Seg = 0;
      /* if((Fuel_Seg>=20)&&(Fuel_Seg<40))              //系数1
         TankLevel_temp=1;
       else if((Fuel_Seg>=40)&&(Fuel_Seg<60))
         TankLevel_temp=2;
       else if((Fuel_Seg>=60)&&(Fuel_Seg<80))
          TankLevel_temp=3;
       else if(Fuel_Seg>=80)
         TankLevel_temp=4;
      // else if(Fuel_Seg>90)
      //    TankLevel=5;
       else
          TankLevel_temp=0;  
       */
      DataFuelVolRemaining = GetFuelCapacityVal();  //剩余油量
      TankLevel_temp=DataFuelVolRemaining;
      if((NVM_CONFIG_FUELBOX==1)||(NVM_CONFIG_FUELBOX==2))
       {
         TankLevel_temp=TankLevel_temp/8;        //  TankLevel_temp=DataFuelVolRemaining/2000*100/0.4;
       }
       else 
       {
         TankLevel_temp=TankLevel_temp*5/24;    //  TankLevel_temp=DataFuelVolRemaining/1200*100/0.4;
       }
      }
  }
  else
  {
      if((IO_DISPLAY_MODE != IO_DISP_MODE_IGN_OFF)&&(ANALOG_KL15_VOLTAGE>=8000))
      {
      SetPowerSt(1);
      AFCTimerCall();
     FuelConsumeSum = (FuelConsumptionRateH<<8)|(FuelConsumptionRateL );
     FuelConsumeSum = (FuelConsumeSum *5/9)>>2;
      AFCPara.FuleConsume = (uint16_t)FuelConsumeSum; //unit ul    
         
      FuelConsumeSum = 0;                  
           
      //FuelConsumeSum = FuelConsumeSumData/10;     
      //FuelConsumeSumData = 0;    
    
      AFCPara.CurODO =  NVMODO.Sig.Value*100;        //大G
     	       
    	AFCPara.RPM = DataESpeedActual;               //转速
    	AFCPara.Speed = DataVSpeedActual/10;          //车速
     
    	SetAFCPara((AFC_PARA *)&AFCPara);
    
    	if (AnalogFuelSensorRes < 10) 
    	{
    	  AnalogFuelSensorRes = 10;  
    	}
    	
    	//if (AnalogFuelSensorRes<30)
    	//  AnalogFuelSensorRes = 30;
    	
      SaveSampleVal(AnalogFuelSensorRes);
      FuelFSM();
      
      FuelResistanceV = GetFuelResistance(); //燃油电阻获取
      
      FuelStatus = GetFuelSensorState();  //燃油状态获取
     
      /* if(FuelStatus==FuelSensorNormal)
    	DataDTE=GetDRMileage();  //unit:km,accuracy:1续航里程
     else
      DataDTE = 0;*/
     if(FuelStatus==FuelSensorNormal) 
     { 
          if(DataFuelVolRemaining==0) 
          {
            DataDTE=0;
          } 
          else
          {                                                                 
          DataDTE=GetDRMileage();  //unit:km,accuracy:1续航里程      //更改续航里程为0 2021.1.19
          }
     }
     else
      DataDTE = 0;
      
     	DataAvgFuelConsByLF=GetCurAFC();  //平均油耗    	
    	DataAvgFuel = DataAvgFuelConsByLF/10;
    	AverageFuel_LL =  (DataAvgFuel<<1)&0xFF;       //系数0.5
    	AverageFuel_LH =  (DataAvgFuel>>7)&0xFF ;
    	AverageFuel_HL =  (DataAvgFuel>>15)&0xFF ;
    	AverageFuel_HH =  (DataAvgFuel>>23)&0xFF  ;
    	
      if (FuelResistanceV) 
      {
        Fuel_Seg = GetFuelStep();
      }
      
      if(FuelStatus==FuelSensorOpenCircuit)      //2021.2.8
       Fuel_Seg = 0;
      /* if((Fuel_Seg>=20)&&(Fuel_Seg<40))              //系数1
         TankLevel_temp=1;
       else if((Fuel_Seg>=40)&&(Fuel_Seg<60))
         TankLevel_temp=2;
       else if((Fuel_Seg>=60)&&(Fuel_Seg<80))
          TankLevel_temp=3;
       else if(Fuel_Seg>=80)
         TankLevel_temp=4;
      // else if(Fuel_Seg>90)
      //    TankLevel=5;
       else
          TankLevel_temp=0;
       */
      DataFuelVolRemaining = GetFuelCapacityVal();  //剩余油量
      TankLevel_temp=DataFuelVolRemaining;
      if((NVM_CONFIG_FUELBOX==1)||(NVM_CONFIG_FUELBOX==2))
       {
         TankLevel_temp=TankLevel_temp/8;
       }
       else 
       {
         TankLevel_temp=TankLevel_temp*5/24;
       }
      }
  
  }
}
/******************************************************************************
函数名：Task_Scheduler_Init
功  能：任务调度器初始化
参  数：无
返回值：无
******************************************************************************/
void Task_Scheduler_Init(void)
{
  uint8_t i;
  uint8_t *p;
  ScheduleCtrlCnt            = 0;
  ScheduleUpdate.TaskFlagAll = 0;
  p = (uint8_t *)(&TaskGroup);
  for (i = 0; i < sizeof(TaskGroup); i++)
    *(p + i) = 0xFF;
}
/******************************************************************************
函数名：Task_Scheduling_Service
功  能：任务调度服务函数
参  数：无
返回值：无
*******************************************************************************
注  意：该服务函数必须被实时调用
******************************************************************************/
void Task_Scheduling_Service(void)
{
  ScheduleUpdate.TaskFlagAll = 0;         //清任务更新标志
  if (API_1ms_Timer_Update())
  {
    ScheduleUpdate.TaskFlagAll = TaskScheduleTable[ScheduleCtrlCnt];

    if (ScheduleUpdate.Task.Flag2ms)      //更新当前2ms任务组编号
    {
      if (TaskGroup.ID2ms)
        TaskGroup.ID2ms = 0;
      else 
        TaskGroup.ID2ms = 1;
    }
    if (ScheduleUpdate.Task.Flag10ms)     //更新当前10ms任务组编号
    {
      if (TaskGroup.ID10ms >= 9)
        TaskGroup.ID10ms = 0;
      else
        TaskGroup.ID10ms++;
    }
    if (ScheduleUpdate.Task.Flag20ms)     //更新当前20ms任务组编号
    {
      if (TaskGroup.ID20ms >= 9)
        TaskGroup.ID20ms = 0;
      else
        TaskGroup.ID20ms++;
    }
    if (ScheduleUpdate.Task.Flag50ms)     //更新当前50ms任务组编号
    {
      if (TaskGroup.ID50ms >= 9)
        TaskGroup.ID50ms = 0;
      else
        TaskGroup.ID50ms++;
    }
    if (ScheduleUpdate.Task.Flag100ms)    //更新当前100ms任务组编号
    {
      if (TaskGroup.ID100ms >= 9)
        TaskGroup.ID100ms = 0;
      else
        TaskGroup.ID100ms++;
    }
    if (ScheduleCtrlCnt >= 9)             //更新调度计数器
      ScheduleCtrlCnt = 0;
    else
      ScheduleCtrlCnt++;
  }
}

/********************生产清理大计***************************/
void Factory_ClearOdoM(void)
{
  uint16_t   Checksum;
  if((DataVSpeedDisp >= 1550 ) && (DataESpeedDisp >= 4850))
  {
      if (IO_CAN_KEY_ENTER == IO_KEY_PRESS)
      {
        IO_CAN_KEY_ENTER = IO_KEY_IDLE;

        Data_Clear_TripA();
        NVM_ODO_VALUE = 0;
        NVM_Data_Update( NVM_ODO_DATA );
        Data_ODO_Update_Disable();
        
        if (NVM_USER_SETTINGS_FLASH_CHK_CNT)
        {
          if (NVM_USER_SETTINGS_FLASH_CHK_CNT > 3)
            NVM_USER_SETTINGS_FLASH_CHK_CNT = 0;
          else
          {
            NVM_USER_SETTINGS_FLASH_CHK_CNT -= 1;
            
            wdt_reset();
            Checksum = YGV642_Calc_Pattern_Memory_CheckSum(ROMDATA_STARTADDR, ROMDATA_ENDADDR);
            //if (Checksum != ROMDATA_CHECKSUM)  //YVC_LYR_NUM_CPU
            //  TFT_LCD_Display_Sprite(YVC_LYR_NUM_CPU-1,SN_R_bmp, 0, 0, 64);  //光标  
          }
         // NVM_Data_Update(NVM_USER_SETTINGS);
        }
    }
  }
}

