diff --git a/source/Application/APP/Data_Fuel/Data_Fuel_User.c b/source/Application/APP/Data_Fuel/Data_Fuel_User.c
index 526b72a9b9a2b5ab0a40666645a033757c386635..dd596947a036bb767a0a60cf772a01e8a1b34d79 100644
--- a/source/Application/APP/Data_Fuel/Data_Fuel_User.c
+++ b/source/Application/APP/Data_Fuel/Data_Fuel_User.c
@@ -1,13 +1,23 @@
+#include <stddef.h>
 #include "Data_Fuel_User.h"
 #include "FuelConfig.h"
 #include "Common_Interface.h"
 #include "RTE_ADC.h"
 #include "GPIO.h"
 #include "Services_ODO_User.h"
+#include "TYW_stdint.h"
 
 static uint16_t Fuel_CurSeg;
 static uint16_t Fuel_CyrStep;
 
+
+#pragma ghs section bss=".myNonInitArea"
+uint8_t FuelSaveData[1024]          ;// =  {0};
+uint16_t FuelSaveLen                ;// = 0;
+uint8_t DrivingRangeSaveData[1024]  ;// =  {0};
+uint16_t DrivingRangeSaveLen        ;// = 0;
+#pragma ghs section bss=default
+
 /*-------------------------------------------------------------------------
  * Function Name  : Fuel_User_KL30_Init
  * Description    :
@@ -20,9 +30,9 @@ void Fuel_User_KL30_Init(void)
 {
     Fuel_CurSeg = 0u;
     Fuel_CyrStep = 0u;
-
     FuelStruct FuelInitPara;
     AFC_INIT AFCInit;
+
     uint32_t ODO_Value = 0u;
 
     ODO_Value = Data_ODO_Read();
@@ -53,6 +63,8 @@ void Fuel_User_KL30_Init(void)
     AFCInit.CurODO = ODO_Value * 100; /*总共里数100倍*/
     AFCInit.MaxDRMileage = 69900;     /*续航里程最大值*/
 
+    SetFuelSaveData(FuelSaveData, FuelSaveLen);/*新增 ----20220503----*/
+
     InitFuelParamter(&FuelInitPara);
     InitAFC(&AFCInit);
 
@@ -64,6 +76,8 @@ void Fuel_User_KL30_Init(void)
     SetFuelSensorRecoverGroupCnt(10);
     SetFuelSensorOpenCircuitGroupCnt(120);
     SetFuelSensorShortCircuitGroupCnt(120);
+
+    SetDrivingRangeSaveData(DrivingRangeSaveData, DrivingRangeSaveLen);
 }
 void Fuel_User_KL15_ON_Init(void)
 {
@@ -74,9 +88,41 @@ void Fuel_User_KL15_OFF_Init(void)
 }
 void Fuel_User_Wakeup_Init(void)
 {
+    /*每次唤醒都要调用 ----20220503----*/
+    SetFuelSaveData(FuelSaveData, FuelSaveLen);
+    SetDrivingRangeSaveData(DrivingRangeSaveData, DrivingRangeSaveLen);
+}
+
+void *memcpy_new(void *to, void *from, size_t size)
+{
+    char *tempFrom = NULL;
+    char *tempTo   = NULL;
+    //assert( to && from );
+    /*先转型为字符指针,字符为一个字节*/
+    tempFrom = (char*)from;
+    tempTo   = (char*)to;
+    while (size-- > 0)
+    {
+        *tempTo++ = *tempFrom++;
+    }
+    return to;
 }
+
 void Fuel_User_Sleep_Init(void)
 {
+    uint8_t *p;
+    p = GetFuelSaveData(&FuelSaveLen);
+
+    if (FuelSaveLen < 1024)
+    {
+        memcpy_new(FuelSaveData, p, FuelSaveLen);
+    }
+    p = GetDrivingRangeSaveData(&DrivingRangeSaveLen);
+
+    if (DrivingRangeSaveLen < 1024)
+    {
+        memcpy_new(DrivingRangeSaveData, p, DrivingRangeSaveLen);
+    }
 }
 /*-------------------------------------------------------------------------
  * Function Name  : Fuel_User_KL15_ON_Processing_Service
diff --git a/source/Application/APP/Data_Fuel/FuelConfig.h b/source/Application/APP/Data_Fuel/FuelConfig.h
index 2eb5a7b22cbb9c9d52b68f3601289999d620192d..ec65f05437285fa80420c425d6cb48b304bf606d 100644
--- a/source/Application/APP/Data_Fuel/FuelConfig.h
+++ b/source/Application/APP/Data_Fuel/FuelConfig.h
@@ -42,7 +42,9 @@
 #define FUEL_R_MIN_VAL 40u   /* 10 X ohm */
 #define FUEL_R_MAX_VAL 3000u /* 10 X ohm */
 
-// Fuel Config
+
+
+//Fuel Config
 typedef struct _FuelStruct
 {
     uint16_t FuelShortCircuitR;
@@ -52,21 +54,23 @@ typedef struct _FuelStruct
 } FuelStruct;
 
 extern void InitFuelParamter(FuelStruct *para);
-extern uint8_t *GetFuelLibVersion(void);
+extern uint8_t *GetFuelSaveData(uint16_t *len);
+extern void SetFuelSaveData(uint8_t *data, uint16_t len);
+extern uint8_t* GetFuelLibVersion(void);
 
-extern void FuelFSM(uint16_t FuelResistance); // unit:ohm,accuracy:0.1
+extern void FuelFSM(uint16_t FuelResistance);     //unit:ohm,accuracy:0.1
 
-extern void SetMaxFuelBlockNum(uint8_t n); // call after InitFuelParamter(),default 12,max 20
+extern void SetMaxFuelBlockNum(uint8_t n); //call after InitFuelParamter(),default 12,max 20
 
-extern void SetFuelSensorRecoverGroupCnt(uint16_t n);      // 1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
-extern void SetFuelSensorOpenCircuitGroupCnt(uint16_t n);  // 1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
-extern void SetFuelSensorShortCircuitGroupCnt(uint16_t n); // 1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
+extern void SetFuelSensorRecoverGroupCnt(uint16_t n);       //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
+extern void SetFuelSensorOpenCircuitGroupCnt(uint16_t n);   //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
+extern void SetFuelSensorShortCircuitGroupCnt(uint16_t n);  //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
 
 extern void SetPowerSt(uint8_t n);
-extern uint8_t GetFuelSeg(void);  // Segment, range:0~8
-extern uint8_t GetFuelStep(void); // Pointer or Mono TFT stepless,range:0,10~((MaxFuelBlockNum + 1) * 10)  0,10:E,   ((MaxFuelBlockNum + 1) * 10):F
+extern uint8_t GetFuelSeg(void); //Segment, range:0~8
+extern uint8_t GetFuelStep(void); //Pointer or Mono TFT stepless,range:0,10~((MaxFuelBlockNum + 1) * 10)  0,10:E,   ((MaxFuelBlockNum + 1) * 10):F
 
-extern uint16_t GetFuelCapacityVal(void); // unit:L,accuracy:0.1
+extern uint16_t GetFuelCapacityVal(void); //unit:L,accuracy:0.1
 
 enum
 {
@@ -79,29 +83,32 @@ extern uint8_t GetFuelSensorState(void);
 
 enum
 {
-    FUEL_ST_IGN_ON_PROCESS = 1, // 1
-    FUEL_ST_POWER_ON_ADD_FUEL,  // 2
-    FUEL_ST_VEHICLE_RUN,        // 3
-    FUEL_ST_IGN_OFF_PROCESS,    // 4
-    FUEL_ST_IGN_OFF,            // 5
+    FUEL_ST_IGN_ON_PROCESS = 1,     //1
+    FUEL_ST_POWER_ON_ADD_FUEL,  //2
+    FUEL_ST_VEHICLE_RUN,        //3
+    FUEL_ST_IGN_OFF_PROCESS,    //4
+    FUEL_ST_IGN_OFF,            //5
 };
 extern uint8_t GetFuelFSM_St(void);
-extern uint16_t GetFuelResistance(void); // unit:ohm,accuracy:0.1
+extern uint16_t GetFuelResistance(void); //unit:ohm,accuracy:0.1
+
+extern void SetPowerDnStep(uint8_t step);   //call every ign on  (after InitFuelParamter())
+extern uint8_t GetPowerDnStep(void);    //every 10km or ign off or refuel(FUEL_ST_POWER_ON_ADD_FUEL->FUEL_ST_VEHICLE_RUN) record
 
-extern void SetPowerDnStep(uint8_t step); // call every ign on  (after InitFuelParamter())
-extern uint8_t GetPowerDnStep(void);      // every 10km or ign off or refuel(FUEL_ST_POWER_ON_ADD_FUEL->FUEL_ST_VEHICLE_RUN) record
 
 // AFC & DrivingRange
 typedef struct _AFC_INIT
 {
-    uint8_t CalcAFCMaxNum;  // max 100km,default 50
-    uint16_t AFCMin;        // unit:L,accuracy:0.1
-    uint16_t AFCMax;        // unit:L,accuracy:0.1
-    uint16_t AFCPreinstall; // unit:L,accuracy:0.1
-    uint32_t CurODO;        // unit:m,accuracy:1
-    uint32_t MaxDRMileage;  // unit:km,accuracy:0.01
+    uint8_t CalcAFCMaxNum;    //max 100km,default 50
+    uint16_t AFCMin;  //unit:L,accuracy:0.1
+    uint16_t AFCMax;  //unit:L,accuracy:0.1
+    uint16_t AFCPreinstall;   //unit:L,accuracy:0.1
+    uint32_t CurODO;      // unit:m,accuracy:1
+    uint32_t MaxDRMileage;    //unit:km,accuracy:0.01
 } AFC_INIT;
 extern void InitAFC(AFC_INIT *data);
+extern uint8_t *GetDrivingRangeSaveData(uint16_t *len);
+extern void SetDrivingRangeSaveData(uint8_t *data, uint16_t len);
 extern void ResetAFC(AFC_INIT *data);
 
 typedef struct _AFC_PARA
@@ -115,29 +122,36 @@ extern void SetAFCPara(AFC_PARA *data);
 
 typedef struct _DAFC_PARA
 {
-    uint32_t DAFC_FuelConsumeSum; // unit:ul    (ul:m->ml:km->L:1000km)
-    uint32_t DAFC_ODO;            // unit:m
+    uint32_t DAFC_FuelConsumeSum;  //unit:ul    (ul:m->ml:km->L:1000km)
+    uint32_t DAFC_ODO;             //unit:m
 } DAFC_PARA;
-extern void DAFC_GetPowerDownPara(DAFC_PARA *data); // call every 10km or ign off or reset afc
-extern void DAFC_SetPowerDownPara(DAFC_PARA *data); // call every KL30 OFF -> KL30 ON (after InitAFC())
+extern void DAFC_GetPowerDownPara(DAFC_PARA *data);   //call every 10km or ign off or reset afc
+extern void DAFC_SetPowerDownPara(DAFC_PARA *data);   //call every KL30 OFF -> KL30 ON (after InitAFC())
 
 typedef struct _DR_PARA
 {
-    uint32_t DR_FuelConsumeSum; // unit:ul    (ul:m->ml:km->L:1000km)
-    uint32_t DR_Mileage;        // unit:km,accuracy:0.01
+    uint32_t DR_FuelConsumeSum;     //unit:ul    (ul:m->ml:km->L:1000km)
+    uint32_t DR_Mileage;            //unit:km,accuracy:0.01
 } DR_PARA;
-extern void DR_GetPowerDownPara(DR_PARA *data); // call every 10km or ign off
-extern void DR_SetPowerDownPara(DR_PARA *data); // call every KL30 OFF -> KL30 ON (after InitAFC())
+extern void DR_GetPowerDownPara(DR_PARA *data);      //call every 10km or ign off
+extern void DR_SetPowerDownPara(DR_PARA *data);      //call every KL30 OFF -> KL30 ON (after InitAFC())
+
+extern void AFCTimerCall(void); //must per 10ms interrupt
+extern uint16_t GetDRMileage(void);  //unit:km,accuracy:1
+extern uint16_t GetCurAFC(void); //unit:L,accuracy:0.1
 
-extern void AFCTimerCall(void);   // must per 10ms interrupt
-extern uint16_t GetDRMileage(void); // unit:km,accuracy:1
-extern uint16_t GetCurAFC(void);    // unit:L,accuracy:0.1
 
-// display afc
+//display afc
 extern void DAFC_Reset(AFC_INIT *data);
-extern uint16_t DAFC_GetAFC(void); // unit:L,accuracy:0.1
-// display afc end
+extern uint16_t DAFC_GetAFC(void);  //unit:L,accuracy:0.1
+//display afc end
 
 extern void SetIgnOffRefuelThreshold(uint8_t data);
 
 #endif
+
+
+
+
+
+
diff --git a/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.4.a b/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.4.a
deleted file mode 100644
index 481c2290efc227c6614e89187a06adedde9d5bcb..0000000000000000000000000000000000000000
Binary files a/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.4.a and /dev/null differ
diff --git a/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.5.a b/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.5.a
new file mode 100644
index 0000000000000000000000000000000000000000..d57ffa6242fe3ead68e913a74243dd7add6f6e16
Binary files /dev/null and b/source/Application/APP/Data_Fuel/TruckFuel_RH850_V1.5.a differ