|
@@ -43,8 +43,8 @@ extern UINT8 UDSSwitch;
|
|
|
BOOL UartBattInfoRecvFlag = false;
|
|
|
QueueHandle_t UartWriteCmdHandle = NULL;
|
|
|
UINT8 BattChrgEndFlag;
|
|
|
-
|
|
|
-
|
|
|
+UINT8 Ringtimes = 0;
|
|
|
+UINT8 ret = 0x00;
|
|
|
|
|
|
//
|
|
|
|
|
@@ -90,6 +90,8 @@ UINT8 SP_BMS_Update_Query(UINT8* pSend,UINT32 sendLen, UINT8* pRead, UINT32 read
|
|
|
updateBMSStatus MS_BMS_Update_Service();
|
|
|
UINT16 MS_BMS_Update_CRC16(UINT8* pSendData,UINT16 len);
|
|
|
UINT8 MS_BMS_Update_Query(UINT8* pSend,UINT32 sendLen, UINT8* pRead, UINT32 readLen, UINT32 timeout);
|
|
|
+static osThreadId_t ControlTaskId = NULL;
|
|
|
+void controlTask(void *arg);
|
|
|
//Uart线程任务区
|
|
|
static void UartTask(void* arg)
|
|
|
{
|
|
@@ -102,7 +104,6 @@ static void UartTask(void* arg)
|
|
|
ARM_USART_FLOW_CONTROL_NONE, 9600);
|
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_ENCRYPT);
|
|
|
UINT16 Reg_Num = 0;
|
|
|
- UINT32 currentTimerCount=0;
|
|
|
Uart_Read_Msg_Type Uart_Read_Msg;
|
|
|
memset(&(Uart_Read_Msg),0x00,sizeof(Uart_Read_Msg_Type));
|
|
|
Uart_Write_Data_Type UartWriteData; //Uart控制命令
|
|
@@ -112,10 +113,18 @@ static void UartTask(void* arg)
|
|
|
{
|
|
|
UartWriteCmdHandle = osMessageQueueNew(1,sizeof(Uart_Write_Data_Type), NULL);
|
|
|
}
|
|
|
+ if(ControlTaskId == NULL)
|
|
|
+ {
|
|
|
+ xTaskCreate(controlTask,
|
|
|
+ "ControlTaskName",
|
|
|
+ 256,( void * ) NULL,
|
|
|
+ osPriorityNormal6,
|
|
|
+ &ControlTaskId);
|
|
|
+ }
|
|
|
//上电起始控制区域
|
|
|
- UINT8 ret = 0x00,Ringtimes = 0;
|
|
|
UINT8 HeatSwitch = 0;
|
|
|
UINT8 heatErrorCounter = 0;
|
|
|
+ UINT8 UartErrorCounter = 0;
|
|
|
while (1)
|
|
|
{
|
|
|
switch (gProcess_Uart_Task)
|
|
@@ -174,59 +183,6 @@ static void UartTask(void* arg)
|
|
|
AppNVMData.isBattLocked = TRUE;
|
|
|
}
|
|
|
}
|
|
|
- if(Timer_count-currentTimerCount >= 1)
|
|
|
- {
|
|
|
- if(AppNVMData.isBattLocked != 0)
|
|
|
- {
|
|
|
- battLockStateDisplay(TRUE);
|
|
|
- }
|
|
|
- else if(UartBattInfoRecvFlag)
|
|
|
- {
|
|
|
- battSOCDisplay();
|
|
|
- battErrorStateDisplay();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- battWarningStateDisplay();
|
|
|
- }
|
|
|
- if(AppNVMData.isBattLocked==FALSE && ret==0x01)
|
|
|
- {
|
|
|
- relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
- Ringtimes++;
|
|
|
- if(Ringtimes>=15)
|
|
|
- {
|
|
|
- relayControl(FALSE);
|
|
|
- ret = 0;
|
|
|
- Ringtimes = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
|
|
|
- {
|
|
|
- relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
- Ringtimes++;
|
|
|
- if(Ringtimes>=10)
|
|
|
- {
|
|
|
- relayControl(FALSE);
|
|
|
- ret = 0;
|
|
|
- Ringtimes = 0;
|
|
|
- }
|
|
|
- }
|
|
|
- else if(CanMsgFlag==1 && Ringtimes<=50)
|
|
|
- {
|
|
|
- relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
- Ringtimes++;
|
|
|
- if(Ringtimes>=50)
|
|
|
- {
|
|
|
- Ringtimes = 51;
|
|
|
- relayControl(FALSE);
|
|
|
- }
|
|
|
- }
|
|
|
- else if(BuzzerControl==TRUE)
|
|
|
- {
|
|
|
- relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
- }
|
|
|
- }
|
|
|
- currentTimerCount = Timer_count;
|
|
|
if(BMS_Fota_update_flag)
|
|
|
{
|
|
|
if(BattWorkStateDelay==0x00)
|
|
@@ -327,12 +283,24 @@ static void UartTask(void* arg)
|
|
|
Uart_Recv_LEN = Uart_DataRecv_func(Uart_Read_Msg,(UINT8 *)&UartReadMsg);
|
|
|
if(Uart_Recv_LEN>0)
|
|
|
{
|
|
|
+ UartErrorCounter = 0;
|
|
|
UartBattInfoRecvFlag = TRUE;
|
|
|
uartBattInfoDecode(UartReadMsg.data);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
UartBattInfoRecvFlag = FALSE;
|
|
|
+ UartErrorCounter++;
|
|
|
+ }
|
|
|
+ if(UartErrorCounter>=5)
|
|
|
+ {
|
|
|
+ if(osOK==osMutexAcquire(Error_Mutex, 100))
|
|
|
+ {
|
|
|
+ UINT8 ErrorNumTemp = 33;
|
|
|
+ PutErrorNum((UINT16 *)ErrorNum,sizeof(ErrorNum),ErrorNumTemp);
|
|
|
+ }
|
|
|
+ osMutexRelease(Error_Mutex);
|
|
|
+ UartErrorCounter = 5;
|
|
|
}
|
|
|
PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
|
#ifdef USING_PRINTF1
|
|
@@ -370,6 +338,7 @@ static void UartTask(void* arg)
|
|
|
case PROCESS_UART_STATE_SLEEP:
|
|
|
{
|
|
|
USARTdrv->PowerControl(ARM_POWER_LOW);
|
|
|
+ vTaskDelete(ControlTaskId);
|
|
|
while(TRUE)
|
|
|
{
|
|
|
osDelay(60000/portTICK_PERIOD_MS);
|
|
@@ -1158,18 +1127,27 @@ void battWarningStateDisplay()
|
|
|
if(warningLightTimer<(UINT8)(warningLEDFlashPeriod*warningDutyRatio))
|
|
|
{
|
|
|
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);
|
|
|
FaultDisplay(LED_TURN_ON);
|
|
|
|
|
|
}
|
|
|
else if(warningLightTimer>=(UINT8)(warningLEDFlashPeriod*warningDutyRatio) && warningLightTimer<warningLEDFlashPeriod)
|
|
|
{
|
|
|
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);
|
|
|
warningLightTimer = 0;
|
|
|
}
|
|
@@ -1348,7 +1326,61 @@ UINT8 Uart_Encrypt_Send()
|
|
|
return 0x03;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+void controlTask(void *arg)
|
|
|
+{
|
|
|
+ while (TRUE)
|
|
|
+ { osDelay(100);
|
|
|
+ if(AppNVMData.isBattLocked != 0)
|
|
|
+ {
|
|
|
+ battLockStateDisplay(TRUE);
|
|
|
+ }
|
|
|
+ else if(UartBattInfoRecvFlag)
|
|
|
+ {
|
|
|
+ battSOCDisplay();
|
|
|
+ battErrorStateDisplay();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ battWarningStateDisplay();
|
|
|
+ }
|
|
|
+ if(AppNVMData.isBattLocked==FALSE && ret==0x01)
|
|
|
+ {
|
|
|
+ relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
+ Ringtimes++;
|
|
|
+ if(Ringtimes>=15)
|
|
|
+ {
|
|
|
+ relayControl(FALSE);
|
|
|
+ ret = 0;
|
|
|
+ Ringtimes = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if (AppNVMData.isBattLocked==TRUE && ret==0x01)
|
|
|
+ {
|
|
|
+ relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
+ Ringtimes++;
|
|
|
+ if(Ringtimes>=10)
|
|
|
+ {
|
|
|
+ relayControl(FALSE);
|
|
|
+ ret = 0;
|
|
|
+ Ringtimes = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(CanMsgFlag==1 && Ringtimes<=50)
|
|
|
+ {
|
|
|
+ relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
+ Ringtimes++;
|
|
|
+ if(Ringtimes>=50)
|
|
|
+ {
|
|
|
+ Ringtimes = 51;
|
|
|
+ relayControl(FALSE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(BuzzerControl==TRUE)
|
|
|
+ {
|
|
|
+ relayControlFunc(0.6,5);//表示1s响2次,占比80%
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
|
|
|
|