|
@@ -181,30 +181,8 @@ static void Main_Task(void* arg)
|
|
|
{
|
|
|
case PROCESS_STATE_IDLE:
|
|
|
{
|
|
|
- osDelay(10/portTICK_PERIOD_MS);
|
|
|
- Uart_index++;
|
|
|
- if (Uart_index >10)//Uart 1s 调用一次
|
|
|
- {
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("Uart_check \n");
|
|
|
- #endif
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_CHECK);
|
|
|
- Uart_index = 0;
|
|
|
- }
|
|
|
- if(true)//电流为0满足
|
|
|
- {
|
|
|
- sleep_index++;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- sleep_index=0;
|
|
|
- PROC_MAIN_STATE_SWITCH(PROCESS_STATE_WORK);
|
|
|
- }
|
|
|
- if(sleep_index>=500)
|
|
|
- {
|
|
|
- sleep_index=0;
|
|
|
- PROC_MAIN_STATE_SWITCH(PROCESS_STATE_SLEEP);
|
|
|
- }
|
|
|
+ // 暂时不区分唤醒
|
|
|
+ PROC_MAIN_STATE_SWITCH(PROCESS_STATE_WORK);
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_STATE_WORK:
|
|
@@ -343,6 +321,14 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
|
|
|
Uart_Send_buffer[7] = CRC_chk_buffer>>8;
|
|
|
uint32_t timeout = 0x00000000;
|
|
|
USARTdrv->Send(Uart_Send_buffer,8);
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("Uart_Send_buffer: ");
|
|
|
+ for(int i=0;i<8;i++)
|
|
|
+ {
|
|
|
+ printf("%x ",Uart_Send_buffer[i]);
|
|
|
+ }
|
|
|
+ printf("\n");
|
|
|
+ #endif
|
|
|
USARTdrv->Receive(Uart_Rece_buffer,Data_Len);
|
|
|
while((isRecvTimeout == false) && (isRecvComplete == false))
|
|
|
{
|
|
@@ -356,16 +342,13 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
|
|
|
}
|
|
|
if (isRecvComplete == true)
|
|
|
{
|
|
|
+ #ifdef USING_PRINTF
|
|
|
+ printf("isRecvComplete true\n");
|
|
|
+ #endif
|
|
|
isRecvComplete = false;
|
|
|
CRC_Rece_buffer =*(Uart_Rece_buffer+Data_Len-1)<<8|*(Uart_Rece_buffer+Data_Len-2);
|
|
|
CRC_chk_buffer = crc_chk(Uart_Rece_buffer,Data_Len-2);
|
|
|
#ifdef USING_PRINTF
|
|
|
- printf("Uart_Send_buffer: ");
|
|
|
- for(int i=0;i<8;i++)
|
|
|
- {
|
|
|
- printf("%x ",Uart_Send_buffer[i]);
|
|
|
- }
|
|
|
- printf("\n");
|
|
|
printf("Uart_Rece_buffer: ");
|
|
|
for(int i=0;i<Data_Len;i++)
|
|
|
{
|
|
@@ -375,12 +358,12 @@ uint8_t* Uart_Receive_func(Uart_Receive_Type Uart_Receive_Msg,uint8_t* Uart_Rece
|
|
|
#endif
|
|
|
if (CRC_Rece_buffer == CRC_chk_buffer)//满足校验
|
|
|
{
|
|
|
- return Uart_Rece_buffer+3;
|
|
|
+ return Uart_Rece_buffer;//此处指针移位出现重启问题
|
|
|
}
|
|
|
else //接收数据的校验不过屏蔽
|
|
|
{
|
|
|
memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
- return Uart_Rece_buffer+3;
|
|
|
+ return Uart_Rece_buffer;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
@@ -415,7 +398,6 @@ static void Uart_Task(void* arg)
|
|
|
Uart_Receive_Msg.Bms_Read_Funcode = 0x03;
|
|
|
uint8_t *Uart_Rece_buffer = NULL;
|
|
|
Batt_Cell_Num_2 = Batt_Cell_Num<<1;
|
|
|
- Uart_Rece_buffer = (uint8_t *)malloc(Uart_Rece_LEN);
|
|
|
while (true)
|
|
|
{
|
|
|
switch (gProcess_Uart_Task)
|
|
@@ -445,48 +427,52 @@ static void Uart_Task(void* arg)
|
|
|
case PROCESS_UART_STATE_WORK:
|
|
|
{
|
|
|
NetSocDisplay(LED_SOC_1,LED_TURN_ON);
|
|
|
- switch (Rece_index)
|
|
|
+ bool Uart_task = false;
|
|
|
+ Uart_Rece_buffer = (uint8_t *)malloc(Uart_Rece_LEN);
|
|
|
+ while(!Uart_task)
|
|
|
{
|
|
|
- case 0:
|
|
|
+ switch (Rece_index)
|
|
|
{
|
|
|
- Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
- Uart_Receive_Msg.Reg_Begin_L= 0x02+Batt_Cell_Num;
|
|
|
- Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
- Uart_Receive_Msg.Reg_Num_L = 0x01;
|
|
|
- Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
- memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
- Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
- Uart_Rece_BattI = *(Uart_Rece_buffer+0)<<8 |*(Uart_Rece_buffer+1);
|
|
|
- break;
|
|
|
- }
|
|
|
- case 1:
|
|
|
- {
|
|
|
- Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
- Uart_Receive_Msg.Reg_Begin_L = 0x02;
|
|
|
- Uart_Receive_Msg.Reg_Num_H = Batt_Cell_Num>>8;
|
|
|
- Uart_Receive_Msg.Reg_Num_L = Batt_Cell_Num;
|
|
|
- Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
- memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
- Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
- battbuffer[30] = Batt_Cell_Num;
|
|
|
- memcpy(&battbuffer[31],Uart_Rece_buffer,Batt_Cell_Num_2);
|
|
|
- break;
|
|
|
- }
|
|
|
- default:
|
|
|
- {
|
|
|
- PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
|
- break;
|
|
|
+ case 0:
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L= 0x02+Batt_Cell_Num;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = 0x01;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ Uart_Rece_BattI = *(Uart_Rece_buffer+3+0)<<8 |*(Uart_Rece_buffer+3+1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ case 1:
|
|
|
+ {
|
|
|
+ Uart_Receive_Msg.Reg_Begin_H = 0x00;
|
|
|
+ Uart_Receive_Msg.Reg_Begin_L = 0x02;
|
|
|
+ Uart_Receive_Msg.Reg_Num_H = Batt_Cell_Num>>8;
|
|
|
+ Uart_Receive_Msg.Reg_Num_L = Batt_Cell_Num;
|
|
|
+ Data_Len = Uart_Receive_Msg.Reg_Num_L*2+5;
|
|
|
+ Uart_Rece_buffer = (uint8_t *)malloc(Data_Len);
|
|
|
+ memset(Uart_Rece_buffer,0xff,Data_Len);
|
|
|
+ Uart_Rece_buffer = Uart_Receive_func(Uart_Receive_Msg,Uart_Rece_buffer,Data_Len);
|
|
|
+ battbuffer[30] = Batt_Cell_Num;
|
|
|
+ memcpy(&battbuffer[31],Uart_Rece_buffer+3,Batt_Cell_Num_2);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ default:
|
|
|
+ {
|
|
|
+ PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
|
|
|
+ Uart_task = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ Rece_index++;
|
|
|
}
|
|
|
- #ifdef USING_PRINTF
|
|
|
- printf("Rece:%d\n",Rece_index);
|
|
|
- #endif
|
|
|
- Rece_index++;
|
|
|
+ free(Uart_Rece_buffer);
|
|
|
break;
|
|
|
}
|
|
|
case PROCESS_UART_STATE_SLEEP:
|
|
|
{
|
|
|
- free(Uart_Rece_buffer);
|
|
|
slpManPlatVoteEnableSleep(UartSlpHandler, SLP_SLP2_STATE);
|
|
|
while(true)
|
|
|
{
|