Jelajahi Sumber

版本号:2.1.0.15,新增看门狗设置,修改了Can消息存在仍然网络失败重启的Bug

CHENJIE-PC\QiXiang_CHENJIE 3 tahun lalu
induk
melakukan
8280831e3f
6 mengubah file dengan 43 tambahan dan 15 penghapusan
  1. 8 1
      ARMCC/Makefile
  2. 1 1
      inc/Signal.h
  3. 3 1
      src/CANTask.c
  4. 2 4
      src/MainTask.c
  5. 1 1
      src/Signal.c
  6. 28 7
      src/bsp_custom.c

+ 8 - 1
ARMCC/Makefile

@@ -10,7 +10,7 @@ THIRDPARTY_WAKAAMA_ENABLE   = n
 THIRDPARTY_ERCOAP_ENABLE    = y
 THIRDPARTY_TINYDTLS_ENABLE  = y
 THIRDPARTY_MBEDTLS_ENABLE   = y
-
+FLASH_MONITOR_ENABLE = y
 CFLAGS_INC        +=  -I ../inc
 
 
@@ -30,3 +30,10 @@ obj-y             += PLAT/project/$(TARGET)/apps/qx_app/src/app.o \
 					PLAT/project/$(TARGET)/apps/qx_app/src/sensor.o
 
 include $(TOP)/PLAT/tools/scripts/Makefile.rules
+
+ifeq ($(FLASH_MONITOR_ENABLE), y)
+#enable wdt
+CFLAGS += -DWDT_FEATURE_ENABLE=1  -DFS_FILE_OPERATION_STATISTIC
+else
+CFLAGS += -DWDT_FEATURE_ENABLE=1
+endif

+ 1 - 1
inc/Signal.h

@@ -28,7 +28,7 @@ extern	UINT8	reservedSignal5;
 extern	UINT8	reservedSignal6;
 extern	UINT8	reservedSignal7;
 extern	UINT8	reservedSignal8;
-
+extern  UINT8	CanMsgFlag;
 
 
 

+ 3 - 1
src/CANTask.c

@@ -90,6 +90,7 @@ static void Can_Receive()
 				}
 				if(HAL_Can_Receive(CanRxMsg)>0)					
 				{
+					CanMsgFlag  = 1;
 					delayconuter=0;						
 					for(i=0; i<2; i++)
 					{								
@@ -138,8 +139,9 @@ static void Can_Receive()
 						delayconuter=0;
 					}
 				}
-				if(delayconuter>100)
+				if(delayconuter>100 && msgFlag==0)
 				{
+					CanMsgFlag = 0;
 					delayconuter=0;
 					PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_IDLE);
 				}

+ 2 - 4
src/MainTask.c

@@ -47,7 +47,6 @@ AppNVMDataType AppNVMData;
 AppDataHeader AppDataHr;
 AppDataBody AppDataInfo;
 
-BOOL Can_Msg_Enble = false;
 
 //主线程堆栈声明区
 static StaticTask_t           gProcess_Main_Task_t;
@@ -185,7 +184,7 @@ static void MainTask(void* arg)
             case PROCESS_STATE_WORK:
             {
 
-                if(Error_count>=5)
+                if(Error_count>=5 && CanMsgFlag==0)
                 {
                     AppDataInfo.appDataModify = true;
                     AppDataInfo.SysReStart = AppDataInfo.SysReStart +1;
@@ -245,10 +244,9 @@ static void MainTask(void* arg)
                 #ifdef USING_PRINTF1
                     printf("TcpService:%d,UDSSwitch:%d,BMS_Fota_update_flag:%d,battWorkState:%d,Can_Msg_Enble:%d\r\n",TcpService,UDSSwitch,BMS_Fota_update_flag,battWorkState,Can_Msg_Enble);
                 #endif	
-                if(TcpService!=0x00||UDSSwitch==1||BMS_Fota_update_flag||battWorkState!=0||Can_Msg_Enble==true)
+                if(TcpService!=0x00||UDSSwitch==1||BMS_Fota_update_flag||battWorkState!=0||CanMsgFlag==1)
                 {
                     xTimerReset(work_timer,0);
-                    Can_Msg_Enble = false;
                 }
                 if(BattChrgEndFlag)
                 {

+ 1 - 1
src/Signal.c

@@ -68,7 +68,7 @@ UINT16	maxCellVol = 0xFFFF;
 UINT16	battPackVol = 0xFFFF;
 UINT16	battI = 0xFFFF;
 UINT16	nbHwVersion = 0xFFFF;
-
+UINT8	CanMsgFlag = 0x00;
 
 UINT8 Lockstatus = 0;
 UINT8 Error_count=0;

+ 28 - 7
src/bsp_custom.c

@@ -13,12 +13,14 @@
 #include "slpman_ec616.h"
 #include "plat_config.h"
 #include "debug_log.h"
-
+#if (WDT_FEATURE_ENABLE==1)
+#include "wdt_ec616.h"
+#define WDT_TIMEOUT_VALUE     (20)            // in unit of second, shall be less than 256s
+#endif
 #ifdef BL_FILE_LOG
 extern uint8_t lockoutState;
 #endif
 extern UINT8 Lockstatus;
-extern BOOL Can_Msg_Enble;
 void GPR_SetUartClk(void)
 {
     GPR_ClockDisable(GPR_UART0FuncClk);
@@ -133,7 +135,24 @@ static void PMU_WakeupPadInit(void)
 
     slpManSetWakeupPad(cfg);
 }
+#if (WDT_FEATURE_ENABLE == 1)
 
+/*
+ *  WDT Initialize, wdt timeout value is 20s
+ *  Parameter:   none
+ */
+void BSP_WdtInit(void)
+{
+    // Config WDT clock, source from 32.768KHz and divide by WDT_TIMEOUT_VALUE
+    GPR_SetClockSrc(GPR_WDGFuncClk, GPR_WDGClkSel_32K);
+    GPR_SetClockDiv(GPR_WDGFuncClk, WDT_TIMEOUT_VALUE);
+
+    wdt_config_t wdtConfig;
+    wdtConfig.mode = WDT_InterruptResetMode;
+    wdtConfig.timeoutValue = 32768U;
+    WDT_Init(&wdtConfig);
+}
+#endif
 /*
  *  custom board related init
  *  Parameter:   none
@@ -168,7 +187,13 @@ void BSP_CustomInit(void)
     }
 #endif
 #endif
-
+#if (WDT_FEATURE_ENABLE == 1)
+    if(BSP_GetPlatConfigItemValue(PLAT_CONFIG_ITEM_START_WDT))
+    {
+        BSP_WdtInit();
+        WDT_Start();
+    }
+#endif
 	slpManGetPMUSettings();				
 
 	PMU_WakeupPadInit();
@@ -206,10 +231,6 @@ void Pad0_WakeupIntHandler(void)
     {
         return;
     }
-    else
-    {
-        Can_Msg_Enble = true;
-    }
 #ifdef USING_PRINTF1
 	printf("[%d]PadWakeup0_IRQn\r\n",__LINE__);
 // #else