Browse Source

加入LED闪烁线程,LED闪烁问题未解决

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
bf0de6836a
8 changed files with 544 additions and 15 deletions
  1. 2 0
      inc/AppFunc.h
  2. 1 1
      inc/AppTaskControl.h
  3. 1 1
      inc/hal_module_adapter.h
  4. 477 0
      src/AppFunc.c
  5. 45 3
      src/AppTaskControl.c
  6. 4 5
      src/AppTaskMain.c
  7. 10 4
      src/AppTaskUart.c
  8. 4 1
      src/hal_module_adapter.c

+ 2 - 0
inc/AppFunc.h

@@ -28,6 +28,8 @@ typedef struct _Fota_Type
 
 }Fota_Type;
 
+void battSOCDisplay();
+void LEDDisplay(void);
 BOOL uartBattInfoDecode(UINT8* dataPtr);
 static UINT8 BmsErrorDecode(UINT32 battWarningState);
 UINT16 GetErrorNum(UINT16 *ErrorArray,UINT8 Errorlen);

+ 1 - 1
inc/AppTaskControl.h

@@ -30,7 +30,7 @@
 #include "AppSignal.h"
 #include "AppConfig.h"
 #include "hal_module_adapter.h"
-#define PROC_CONTROL_TASK_STACK_SIZE           (256)
+#define PROC_CONTROL_TASK_STACK_SIZE           (1024)
 typedef enum
 {
     PROCESS_CONTROL_STATE_IDLE = 0,

+ 1 - 1
inc/hal_module_adapter.h

@@ -7,7 +7,7 @@ extern "C" {
 #include "commontypedef.h"
 #include "sensor.h"
 #include "can.h"
-
+#include "bsp.h"
 #define USING_PRINTF
 #define DEBUGLOG
 

+ 477 - 0
src/AppFunc.c

@@ -8,7 +8,484 @@
  ****************************************************************************/
 #include "AppFunc.h"
 #include "numeric.h"
+#include "hal_module_adapter.h"
 
+
+void battSOCDisplay()
+{
+	
+	static UINT8 lightTimer = 0;
+	UINT8 socLowLEDFlashPeriod = 10;//10*100 = 1000ms
+	UINT8 chargeLEDFlashPeriod = 6;//6*100 = 600ms
+	float dutyRatio = 0.4;
+
+	if(UartRecvFlag == true)
+	{ 
+		lightTimer++;
+		
+		if(battWorkState == 0||battWorkState == 1)  //静置或放电状态
+		{
+			if(battSOC<=10)
+			{
+				if(lightTimer<(UINT8)(socLowLEDFlashPeriod*dutyRatio))
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else if(lightTimer>=(UINT8)(socLowLEDFlashPeriod*dutyRatio) && lightTimer<socLowLEDFlashPeriod)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					lightTimer = 0;
+				}			
+			}	
+			else if(battSOC>10&&battSOC<=25)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				lightTimer = 0;
+			}
+			else if(battSOC>25&&battSOC<=50)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				lightTimer = 0;
+			}
+			else if(battSOC>50&&battSOC<=75)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				lightTimer = 0;
+			}
+			else if(battSOC>75&&battSOC<=100)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_3,LED_TURN_ON);
+				lightTimer = 0;
+			}
+		}
+		else if(battWorkState == 2)
+		{
+			if(battSOC<=25)
+			{
+				if(lightTimer<(UINT8)(chargeLEDFlashPeriod*dutyRatio))
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else if(lightTimer>=(UINT8)(chargeLEDFlashPeriod*dutyRatio) && lightTimer<chargeLEDFlashPeriod)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					lightTimer = 0;
+				}			
+			}	
+			else if(battSOC>25&&battSOC<=50)
+			{
+				if(lightTimer<(UINT8)(chargeLEDFlashPeriod*dutyRatio))
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else if(lightTimer>=(UINT8)(chargeLEDFlashPeriod*dutyRatio) && lightTimer<chargeLEDFlashPeriod)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+					lightTimer = 0;
+				}
+			}
+			else if(battSOC>50&&battSOC<=75)
+			{
+				if(lightTimer<(UINT8)(chargeLEDFlashPeriod*dutyRatio))
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else if(lightTimer>=(UINT8)(chargeLEDFlashPeriod*dutyRatio) && lightTimer<chargeLEDFlashPeriod)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+					lightTimer = 0;
+				}
+
+			}
+			else if(battSOC>75&&battSOC<=97)
+			{
+				if(lightTimer<(UINT8)(chargeLEDFlashPeriod*dutyRatio))
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
+				}
+				else if(lightTimer>=(UINT8)(chargeLEDFlashPeriod*dutyRatio) && lightTimer<chargeLEDFlashPeriod)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+				}
+				else
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					lightTimer = 0;
+				}
+			}
+			else if(battSOC>97&&battSOC<=100)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+				NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
+			}		
+		}
+	}
+	
+}
+/***********************************************************************************************************************
+ * LED控制函数
+ * 输入:运行状态
+ * 输出:LED控制
+ * 处理:根据不同状态进行LED显示
+***********************************************************************************************************************/
+void LEDDisplay(void)
+{
+	static UINT8  currentState = 0;
+	static UINT8  LightTimer = 0;
+	static UINT8  ErrorLightTimer = 0;
+	
+	UINT8  LEDFlashPeriod = 10;//1000ms
+	float  DutyRatio = 0.4;
+	LightTimer++;
+	ErrorLightTimer++;
+	#ifdef USING_PRINTF1
+		printf("[%d]-%d-%d-%d\n",__LINE__,LightTimer,ErrorLightTimer,battSOC);
+	#endif	
+	if(AppDataInfo.BattLock==TRUE)//电池整处于锁定状态
+	{
+		if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
+		{	
+			NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+			NetSocDisplay(LED_SOC_3,LED_TURN_ON);
+			FaultDisplay(LED_TURN_ON);
+			
+		}
+		else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+		{
+			NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+			FaultDisplay(LED_TURN_OFF);			
+		}
+		else
+		{
+			NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+			NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+			FaultDisplay(LED_TURN_OFF);
+			LightTimer = 0;			
+		}
+		return;
+	}
+	else						//电池未处于锁定状态
+	{
+		if(currentState!=AppDataInfo.BattLock)
+		{
+			currentState = AppDataInfo.BattLock;
+			LightTimer = 0;
+		}
+		else if(UartRecvFlag==0)	//电池未收到UART信息
+		{
+			if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
+			{			
+				NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+				FaultDisplay(LED_TURN_ON);
+			}
+			else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+				FaultDisplay(LED_TURN_OFF);
+				
+			}
+			else
+			{
+				NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+				FaultDisplay(LED_TURN_OFF);
+				LightTimer = 0;			
+			}
+			#ifdef USING_PRINTF
+				printf("[%d]",__LINE__);
+			#endif
+			return;
+		}
+		else if(UartRecvFlag==1)				//电池接收到UART信息,且正确运行
+		{
+			if(battWarningState != 0)
+			{
+				if(ErrorLightTimer<(UINT8)(LEDFlashPeriod*DutyRatio)) 
+				{	
+					
+					FaultDisplay(LED_TURN_ON);
+					
+				}
+				else if(ErrorLightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && ErrorLightTimer<LEDFlashPeriod)
+				{
+					
+					FaultDisplay(LED_TURN_OFF);
+					
+				}
+				else
+				{
+					
+					FaultDisplay(LED_TURN_OFF);
+					ErrorLightTimer = 0;			
+				}
+			}
+			else
+			{
+				FaultDisplay(LED_TURN_OFF);
+				ErrorLightTimer = 0;
+			}
+
+			if(battWorkState == 0||battWorkState == 1)  //静置或放电状态
+			{
+				if(battSOC<=10)
+				{
+					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+						LightTimer = 0;
+					}
+					#ifdef USING_PRINTF
+						printf("[%d]",__LINE__);
+					#endif				
+				}	
+				else if(battSOC>10&&battSOC<=25)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					LightTimer = 0;
+				}
+				else if(battSOC>25&&battSOC<=50)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					LightTimer = 0;
+				}
+				else if(battSOC>50&&battSOC<=75)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					LightTimer = 0;
+				}
+				else if(battSOC>75&&battSOC<=100)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_ON);
+					LightTimer = 0;
+				}
+			}
+			else if(battWorkState == 2)
+			{
+				if(battSOC<=25)
+				{
+					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+						LightTimer = 0;
+					}
+					#ifdef USING_PRINTF
+						printf("[%d]",__LINE__);
+					#endif			
+				}	
+				else if(battSOC>25&&battSOC<=50)
+				{
+					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+						LightTimer = 0;
+					}
+				}
+				else if(battSOC>50&&battSOC<=75)
+				{
+					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+						LightTimer = 0;
+					}
+
+				}
+				else if(battSOC>75&&battSOC<=97)
+				{
+					if(LightTimer<(UINT8)(LEDFlashPeriod*DutyRatio))
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
+					}
+					else if(LightTimer>=(UINT8)(LEDFlashPeriod*DutyRatio) && LightTimer<LEDFlashPeriod)
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+					}
+					else
+					{
+						NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+						NetSocDisplay(LED_SOC_3,LED_TURN_OFF);	
+						LightTimer = 0;
+					}
+				}
+				else if(battSOC>97&&battSOC<=100)
+				{
+					NetSocDisplay(LED_SOC_0,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_1,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_2,LED_TURN_ON);
+					NetSocDisplay(LED_SOC_3,LED_TURN_ON);	
+				}		
+			}
+		}
+	}
+}
 /***********************************************************************************************************************
  * Uart数据解码函数
  * 输入:数据指针

+ 45 - 3
src/AppTaskControl.c

@@ -16,10 +16,52 @@ static process_control 		        gProcess_Control_Task = PROCESS_CONTROL_STATE_I
 
 static void ControlTask(void* arg)
 {
-    osDelay(5000);
+    NetSocDisplay(LED_SOC_0,LED_TURN_OFF);
+	NetSocDisplay(LED_SOC_1,LED_TURN_OFF);
+	NetSocDisplay(LED_SOC_2,LED_TURN_OFF);
+	NetSocDisplay(LED_SOC_3,LED_TURN_OFF);
+	FaultDisplay(LED_TURN_OFF);
+    PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_IDLE);
+    UINT32 CurrentTime = 0;
     while (true)
     {
-        osDelay(100);
+        switch(gProcess_Control_Task)
+        {
+            case PROCESS_CONTROL_STATE_IDLE:
+            {
+                osDelay(100);
+                PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_WORK);
+                break;
+            }
+            case PROCESS_CONTROL_STATE_WORK:
+            {
+                osDelay(100);
+                if((CurrentTime!=TimeCounter))
+                {
+                    #ifdef USING_PRINTF1
+                        printf("[%d]TimeCounter=%d\n",__LINE__,TimeCounter);
+                    #endif
+                    //LEDDisplay();
+                    battSOCDisplay();
+                    CurrentTime = TimeCounter;
+                }
+                if(gProcess_app!=WORK)
+                {
+                    PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_SLEEP);
+                    break;
+                }
+                break;
+            }
+            case PROCESS_CONTROL_STATE_SLEEP:
+            {
+                osDelay(100);
+                if(gProcess_app==WORK)
+                {
+                    PROC_CONTROL_STATE_SWITCH(PROCESS_CONTROL_STATE_WORK);
+                }
+                break;
+            }
+        }
     }
 }
 void AppTaskControlInit(void *arg)
@@ -30,7 +72,7 @@ void AppTaskControlInit(void *arg)
     task_attr.name = "Control_Task";
     task_attr.stack_mem = gProcess_Control_TaskStack;
     task_attr.stack_size = PROC_CONTROL_TASK_STACK_SIZE;
-    task_attr.priority = osPriorityBelowNormal;
+    task_attr.priority = osPriorityBelowNormal7;
     task_attr.cb_mem = &gProcess_Control_Task_t;
     task_attr.cb_size = sizeof(StaticTask_t);
     ControlTaskId = osThreadNew(ControlTask, NULL, &task_attr);

+ 4 - 5
src/AppTaskMain.c

@@ -30,16 +30,15 @@ static void MainTask(void* arg)
     monitor_timer = xTimerCreate("monitor_timer", 100 / portTICK_RATE_MS, pdTRUE, NULL, monitor_timer_callback);
     work_timer    = xTimerCreate("work_timer", 1*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, work_timer_callback);
     sleep_timer   = xTimerCreate("sleep_timer", 2*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, sleep_timer_callback);
-    NetSocDisplay(LED_SOC_0,LED_TURN_ON);
-	NetSocDisplay(LED_SOC_1,LED_TURN_ON);
-	NetSocDisplay(LED_SOC_2,LED_TURN_ON);
-	NetSocDisplay(LED_SOC_3,LED_TURN_ON);
-	FaultDisplay(LED_TURN_ON);
     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
     slpManSetPmuSleepMode(true,SLP_HIB_STATE,false);
     slpManApplyPlatVoteHandle("MainSlp",&MainSlpHandler);
     slpManPlatVoteDisableSleep(MainSlpHandler, SLP_SLP2_STATE);//禁用SLEEP2休眠
     //配置文件及运行数据加载
+    if(Error_Mutex == NULL)
+    {
+        Error_Mutex = osMutexNew(NULL);
+    }
     LoadAppConfig();
     LoadAppData();
     //

+ 10 - 4
src/AppTaskUart.c

@@ -40,6 +40,7 @@ static void UartTask(void* arg)
     UINT16  Uart_Uds_LEN;
     UINT16  Reg_Num = 0;
     UINT16  Uart_Recv_LEN;
+    UINT8   UartRecvFlagCounter = 0;
     UartQueryType Uart_Read_Msg;//发送结构体初始化
     memset(&(Uart_Read_Msg),0x00,sizeof(Uart_Read_Msg));
     UartAnswerData_S UartAnswerData;//应答数据初始化
@@ -121,7 +122,7 @@ static void UartTask(void* arg)
 				Uart_Read_Msg.CRC_L = CRC_chk_buffer;
 				Uart_Read_Msg.CRC_H = CRC_chk_buffer>>8;
 				Uart_Recv_LEN = Uart_DataRecv_func(Uart_Read_Msg,(UINT8*)(UartAnswerData.Header));
-                #ifdef USING_PRINTF
+                #ifdef USING_PRINTF1
 					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
                 #endif
                 if(Uart_Recv_LEN>0)
@@ -132,11 +133,15 @@ static void UartTask(void* arg)
                 }
                 else
                 {
-                    UartRecvFlag = 0;
+                    UartRecvFlagCounter++;
+                    if(UartRecvFlagCounter>=3)
+                    {
+                        UartRecvFlag = 0;
+                        UartRecvFlagCounter = 0;
+                    }
                 }
-
                 PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
-                #ifdef USING_PRINTF
+                #ifdef USING_PRINTF1
 					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
 					for(int i=0;i<Uart_Recv_LEN;i++)
 					{
@@ -164,6 +169,7 @@ static void UartTask(void* arg)
                 #ifdef USING_PRINTF
                     printf("Uart silence begin\n");
                 #endif
+                UartRecvFlag = 0;
                 while (gProcess_app==LISTEN)
                 {
                     osDelay(1000);

+ 4 - 1
src/hal_module_adapter.c

@@ -526,7 +526,7 @@ void NetSocDisplay(ledInx_t  Inx , ledStaus_t level)
 
 	padConfig.mux = gLedCfg[Inx].padMutex;
 	PAD_SetPinConfig(gLedCfg[Inx].padInx, &padConfig);
-      PAD_SetPinPullConfig(gLedCfg[Inx].padInx, PAD_InternalPullDown);
+    PAD_SetPinPullConfig(gLedCfg[Inx].padInx, PAD_InternalPullDown);
 
 	GPIO_PinConfig(gLedCfg[Inx].pinPort, gLedCfg[Inx].pinInx, &nGpioCfg);
 	GPIO_PinWrite(gLedCfg[Inx].pinPort, 1<<gLedCfg[Inx].pinInx, level <<gLedCfg[Inx].pinInx);
@@ -540,6 +540,9 @@ void NetSocDisplay(ledInx_t  Inx , ledStaus_t level)
 */
 void FaultDisplay(ledStaus_t status)
 {
+	#ifdef USING_PRINTF
+		printf("[%d]-4-%d\n",__LINE__,status);
+	#endif
 	gpio_pin_config_t nGpioCfg={0};
 	nGpioCfg.pinDirection = GPIO_DirectionOutput;
 	nGpioCfg.misc.initOutput = 1;