Kaynağa Gözat

故障代码上传测试完成,开始进行故障解码。

CHENJIE-PC\QiXiang_CHENJIE 3 yıl önce
ebeveyn
işleme
a8b205fb45
6 değiştirilmiş dosya ile 79 ekleme ve 18 silme
  1. 3 3
      inc/Signal.h
  2. 14 1
      src/CANTask.c
  3. 2 2
      src/Signal.c
  4. 10 8
      src/TcpTask.c
  5. 14 4
      src/UartTask.c
  6. 36 0
      src/hal_module_adapter.c

+ 3 - 3
inc/Signal.h

@@ -1,5 +1,5 @@
 #include "commontypedef.h"
-
+#include "cmsis_os2.h"
 extern	UINT16	COMOutTable[28];
 //declear the UINT8 vars
 extern	UINT8	battCellTemp[8];
@@ -49,8 +49,8 @@ extern	UINT32	nbSwVersion;
 extern	UINT32	battBalanceoInfo;
 
 
-extern UINT16 ErrorNum;//故障代码
+extern UINT16   ErrorNum[5];//故障代码
 extern UINT8 	TcpSendLen;
 
-
+extern osMutexId_t Error_Mutex;
 

+ 14 - 1
src/CANTask.c

@@ -88,7 +88,20 @@ static void Can_Receive()
 				{
 					PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_SLEEP);
 				}
-				
+				UINT16 ErrorNumTemp;
+				UINT8 ret;
+				ErrorNumTemp = 0x00FF;
+				if(osOK==osMutexAcquire(Error_Mutex, 100))
+				{   
+					ret = PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+				}
+				else
+				{
+					#ifdef USING_PRINTF
+						printf("get Muxtex error\n");
+					#endif
+				}
+				osMutexRelease(Error_Mutex);
 				if(HAL_Can_Receive(CanRxMsg)>0)					
 				{						
 					for(i=0; i<2; i++)

+ 2 - 2
src/Signal.c

@@ -80,7 +80,7 @@ UINT32	battBalanceoInfo = 0xFFFFFFFF;
 //Tcp
 UINT8 	TcpSendLen = 0;
 
-UINT16 ErrorNum = 0x00;
-
+UINT16 ErrorNum[5];
 
+osMutexId_t Error_Mutex = NULL;
 

+ 10 - 8
src/TcpTask.c

@@ -34,7 +34,6 @@
 //全局变量输出区
 UINT32 TcpService = 0;
 UINT8 WorkFlag=0;
-QueueHandle_t Error_Handle = NULL;
 //全局变量输入区
 extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag;
@@ -86,10 +85,10 @@ static void TcpTask(void* arg)
 	{
 		TcpRecvHandle = osMessageQueueNew(1,sizeof(TcpipConnectionRecvDataInd*), NULL);
 	}
-    if(Error_Handle == NULL)
-	{
-		Error_Handle = osMessageQueueNew(5,sizeof(UINT16), NULL);
-	}
+    if(Error_Mutex == NULL)
+    {
+        Error_Mutex = osMutexNew(NULL);
+    }
     while (true)
     {
         osDelay(100);
@@ -357,9 +356,11 @@ static void TcpDataInfoAssembleSend()
         BattToTcpInfo.battInfo.msgCollectionTimeUTC[4] = UTC8TimeTcp.minute & 0xFF;					    //mins
         BattToTcpInfo.battInfo.msgCollectionTimeUTC[5] = UTC8TimeTcp.second & 0xFF;							//sec
         BattToTcpInfo.battInfo.signalStrength = csq ;
-        //故障等级故障代码未定义
-        if(osMessageQueueGet(Error_Handle, &ErrorTemp, 0, 0)==osOK)
-        {
+        //故障等级故障代码上传
+        if(osOK==osMutexAcquire(Error_Mutex, 100))
+        {   
+            UINT16 ErrorTemp=0x00;
+            ErrorTemp = GetErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum));
             #ifdef USING_PRINTF
                 printf("Temp-Error:%d\n",ErrorTemp);
             #endif
@@ -376,6 +377,7 @@ static void TcpDataInfoAssembleSend()
             BattToTcpInfo.battInfo.errCode[0] = 0x00;
             BattToTcpInfo.battInfo.errCode[1] = 0x00;
         }
+        osMutexRelease(Error_Mutex);
 		BattToTcpInfo.battInfo.battI[0] = battI>>8;
 		BattToTcpInfo.battInfo.battI[1] = battI & 0xFF;
 		

+ 14 - 4
src/UartTask.c

@@ -38,7 +38,6 @@ extern UINT32 Timer_count;
 extern volatile BOOL Sleep_flag; 
 extern AppNVMDataType AppNVMData;
 extern AppDataBody AppDataInfo;
-extern QueueHandle_t Error_Handle ;
 //全局变量输出区
 BOOL UartBattInfoRecvFlag  = false;
 QueueHandle_t UartWriteCmdHandle = NULL;
@@ -360,9 +359,20 @@ static BOOL uartBattInfoDecode(UINT8* dataPtr)
 	}
 	nbSwVersion = APPSWVERSION;
 	nbHwVersion = HWVERSION;
-	ErrorNum = 0xFF00;
-	osMessageQueuePut(Error_Handle,&ErrorNum,0,0);
-	
+	UINT16 ErrorNumTemp;
+	UINT8 ret;
+	ErrorNumTemp = 0xFF00;
+	if(osOK==osMutexAcquire(Error_Mutex, 100))
+	{   
+		ret = PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
+	}
+	else
+	{
+		#ifdef USING_PRINTF
+			printf("get Muxtex error\n");
+		#endif
+	}
+    osMutexRelease(Error_Mutex);
     return true;
 }
 

+ 36 - 0
src/hal_module_adapter.c

@@ -2623,4 +2623,40 @@ UINT8 LookUpRTtable(UINT32 R_value)
 			}
 		}
 	}//R-2
+}
+
+UINT16 GetErrorNum(UINT16 *ErrorArray,UINT8 Errorlen)
+{
+	UINT16 OutNum;
+	OutNum = *(ErrorArray);
+	for(int i=0;i<Errorlen-1;i++)
+	{
+		*(ErrorArray+i) = *(ErrorArray+i+1);
+		if(*(ErrorArray+i+1)==0)
+			break;
+	}
+	return OutNum;
+}
+UINT8 PutErrorNum(UINT16 *ErrorArray,UINT8 Errorlen,UINT16 ErrorNum)
+{
+	for(int i=0;i<Errorlen;i++)
+	{
+		if(*(ErrorArray+i)==0)
+		{
+			*(ErrorArray+i) = ErrorNum;
+			return 0;
+		}
+		else
+		{
+			if(*(ErrorArray+i)==ErrorNum)
+			{
+				return 1;
+			}
+			else
+			{
+				continue;
+			}
+		}
+	}
+	return 2;
 }