Browse Source

【V3.0.0.2】 金茂科易CAN接收优化

CHENJIE-PC\QiXiang_CHENJIE 3 years ago
parent
commit
f21e59b6ba
2 changed files with 36 additions and 26 deletions
  1. 1 1
      inc/AppConfig.h
  2. 35 25
      src/AppTaskCan.c

+ 1 - 1
inc/AppConfig.h

@@ -13,7 +13,7 @@
 #define DATA_MODULE_TYPE (1)           //1表示NB模块,2表示4G cat1
 #define EOLSTATE (0)                   //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN "JMTEST00000000001" //默认上传的SN编码
-#define APPSWVERSION 0x03000001        //数据模块软件版本号
+#define APPSWVERSION 0x03000002        //数据模块软件版本号
 
 #define TCP_ADD "iotp.fast-fun.cn" //数据上传的地址
 #define TCP_PORT 8712              //数据上传的端口

+ 35 - 25
src/AppTaskCan.c

@@ -14,7 +14,9 @@ static StaticTask_t gProcess_Can_Rx_Task_t;
 static UINT8 gProcess_Can_Rx_TaskStack[PROC_CAN_RX_TASK_STACK_SIZE];
 static process_CAN gProcess_CAN_Task = PROCESS_CAN_STATE_IDLE;
 #define PROC_CAN_STATE_SWITCH(a) (gProcess_CAN_Task = a)
-
+static void CanDecodeTask(void *arg);
+QueueHandle_t CanRecvHandle = NULL;
+static osThreadId_t CanDecodeTaskId = NULL;
 void AppTaskCanInit(void *arg)
 {
 	osThreadAttr_t task_rx_attr;
@@ -38,9 +40,20 @@ static void CanTask()
 	UINT16 delayconuter = 0;
 	CAN_Msg_Type CanRxMsg[2];
 	UINT8 ConvertCounter = 0;
-
+	if (CanRecvHandle == NULL)
+	{
+		CanRecvHandle = osMessageQueueNew(50, sizeof(CAN_Msg_Type), NULL);
+	}
 	PROC_CAN_STATE_SWITCH(PROCESS_CAN_STATE_INIT);
-
+	if (CanDecodeTaskId == NULL)
+	{
+		xTaskCreate(CanDecodeTask,
+					"ControlTaskName",
+					2048, (void *)NULL,
+					osPriorityNormal,
+					&CanDecodeTaskId);
+	}
+	//UINT32 CanMsgCounter = 0;
 	while (TRUE)
 	{
 		memset(CanRxMsg, 0, sizeof(CanRxMsg));
@@ -102,24 +115,11 @@ static void CanTask()
 								}
 							}
 						}
-						else if (CanRxMsg[i].Id == 0x7A1)
-						{
-							UINT8 nvmTemp[100];
-							memset(nvmTemp, 0, 100);
-							for (int ii = 0; ii < 200; ii++)
-							{
-								BSP_QSPI_Read_Safe(nvmTemp, FLASH_FOTA_REGION_START + ii * 100, 100);
-								for (int jj = 0; jj < 100; jj++)
-								{
-									printf("%02X ", nvmTemp[jj]);
-								}
-								printf("\n");
-							}
-						}
 						else
 						{
-							DecodeFunction(CanRxMsg[i].Id, CanRxMsg[i].Data);
-							//canRxFlag[canCOMInTableIndexFind(CanRxMsg[i].Id)] = 1;
+							osStatus_t ret = osMessageQueuePut(CanRecvHandle, &(CanRxMsg[i]), 0, 0);
+							//CanMsgCounter++;
+							//printf("can receive ret=\t%d,ID=\t%d,CanMsgCounter=%d\n", ret, CanRxMsg[i].Id, CanMsgCounter);
 						}
 					}
 					else
@@ -127,10 +127,6 @@ static void CanTask()
 						continue;
 					}
 				}
-
-				for (i = 0; i < 2; i++)
-				{
-				}
 				if (udsFlag == 1)
 				{
 					UDS_Service(CanRxMsg);
@@ -140,9 +136,9 @@ static void CanTask()
 			else
 			{
 				delayconuter++;
-				osDelay(2);
+				osDelay(1);
 			}
-			if (delayconuter >= 1000)
+			if (delayconuter >= 5000)
 			{
 				delayconuter = 0;
 				clrbit(PadInterrupt, 0);
@@ -167,3 +163,17 @@ static void CanTask()
 		}
 	}
 }
+static void CanDecodeTask(void *arg)
+{
+	CAN_Msg_Type CanRxMsg;
+	while (TRUE)
+	{
+		memset(&CanRxMsg, 0x00, sizeof(CanRxMsg));
+		osStatus_t ret = osMessageQueueGet(CanRecvHandle, &(CanRxMsg), 0, 100);
+		if (ret == 0)
+		{
+			DecodeFunction(CanRxMsg.Id, CanRxMsg.Data);
+			//printf("can decode ret=\t%d,ID=\t%d\n", ret, CanRxMsg.Id);
+		}
+	}
+}