|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|