Преглед изворни кода

V3.0.0.4 - 状态转换仍旧不对

CHENJIE-PC\QiXiang_CHENJIE пре 3 година
родитељ
комит
1d9d42d7e5
6 измењених фајлова са 57 додато и 30 уклоњено
  1. 4 3
      inc/AppConfig.h
  2. 20 10
      src/AppFunc.c
  3. 21 5
      src/AppTaskMain.c
  4. 2 2
      src/AppTaskTcp.c
  5. 8 8
      src/AppTaskUart.c
  6. 2 2
      src/bsp_custom.c

+ 4 - 3
inc/AppConfig.h

@@ -11,9 +11,9 @@
 #define BMS_MANUFACTURE             (2)                 //BMS制造商表示1-超力源,2-美顺
 #define BMS_INFO                    (1)                 //1-1表示超力源4830,1-2表示超力源6060,2-1表示美顺6455
 #define DATA_MODULE_TYPE            (1)                 //1表示NB模块,2表示4G cat1
-#define EOLSTATE                    (1)                 //1表示下线检测跳过,使用默认值,0表示使用下线检测
+#define EOLSTATE                    (0)                 //1表示下线检测跳过,使用默认值,0表示使用下线检测
 #define DEFAULT_SN                  "RLTEST00000000002" //默认上传的SN编码
-#define	APPSWVERSION		        0x03000001          //数据模块软件版本号
+#define	APPSWVERSION		        0x03000004          //数据模块软件版本号
 
 #define TCP_ADD                     "iotp.fast-fun.cn"  //数据上传的地址
 #define TCP_PORT					8712                //数据上传的端口
@@ -27,7 +27,8 @@
 #define APP_DATAINFO_FILE_NAME              "qxappDataInfo3.nvm"
 #define BATT_SN_LEN                17
 #define BMS_OTHER_TEMP              2
-
+#define WORK_TIME               5
+#define SLEEP_TIME              60
 
 #define BATT_IDLE_SYM           0x00    //静置
 #define BATT_CHARGE_SYM 		0x02    //充电

+ 20 - 10
src/AppFunc.c

@@ -30,10 +30,10 @@ void BattWorkDelayFunc(UINT8 battWorkCurrentState)
 			BattWorkStateDelay = battWorkCurrentState;
 		}
 	}
-	else if(battWorkCurrentState==BATT_DISCHARGE_SYM)//从 充电或者静置 转放电 3s延时
+	else if(battWorkCurrentState==BATT_DISCHARGE_SYM)//从 充电或者静置 转放电 1s延时
 	{
 		workDelayCounter++;
-		if(workDelayCounter>=3)
+		if(workDelayCounter>=1)
 		{
 			workDelayCounter==0;
 			BattWorkStateDelay = battWorkCurrentState;
@@ -1265,18 +1265,23 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                 memset(Fota_S.Fota_Recv_Data,0x00,100);
                 memcpy(Fota_S.Fota_Recv_Data,(DataPtr+42),*(DataPtr+41));
                 Fota_S.Fota_CRC = Fota_crc_chk(Fota_S.Fota_Recv_Data,Fota_S.Fota_Recv_Data_Len);
-                Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len+1);
+                Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
                 if(Fota_S.Fota_CRC == *(DataPtr+Fota_S.Fota_Recv_Data_Len+42)||Data_Read_Buffer!=PNULL)
                 {
+					UINT8 Fota_Recv_Data_Len_4 = 0;
                     if(Fota_S.Fota_Recv_Data_Len%4!=0)
                     {
-                    Fota_S.Fota_Recv_Data_Len = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
+                    	Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
                     }
-                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+					else
+					{
+						Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
+					}
+                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     memset(Data_Read_Buffer,0x00,Fota_S.Fota_Recv_Data_Len);
                     BSP_QSPI_Read_Safe(Data_Read_Buffer,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
                     Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer,Fota_S.Fota_Recv_Data_Len);
-                    #ifdef USING_PRINTF
+                    #ifdef USING_PRINTF1
                         printf("Data_Read_Buffer:\n");
                         for(int i=0;i<Fota_S.Fota_Recv_Data_Len;i++)
                         {
@@ -1291,7 +1296,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
-                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     }
                 }
                 else//数据校验失败
@@ -1392,11 +1397,16 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                 Data_Read_Buffer = malloc(Fota_S.Fota_Recv_Data_Len);
                 if(Fota_S.Fota_CRC == *(DataPtr+Fota_S.Fota_Recv_Data_Len+42)||Data_Read_Buffer!=PNULL)
                 {
+					UINT8 Fota_Recv_Data_Len_4 = 0;
                     if(Fota_S.Fota_Recv_Data_Len%4!=0)
                     {
-                    Fota_S.Fota_Recv_Data_Len = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
+                    	Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len + 4-(Fota_S.Fota_Recv_Data_Len%4);
                     }
-                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+					else
+					{
+						Fota_Recv_Data_Len_4 = Fota_S.Fota_Recv_Data_Len;
+					}
+                    BSP_QSPI_Write_Safe(Fota_S.Fota_Recv_Data,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     
                     BSP_QSPI_Read_Safe(Data_Read_Buffer,Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
                     Data_Read_Crc = Fota_crc_chk(Data_Read_Buffer,Fota_S.Fota_Recv_Data_Len);
@@ -1416,7 +1426,7 @@ void Fota_Func(UINT8 *DataPtr,INT32 connectId)
                     else
                     {
                         Fota_Answer[3] = 0x02;
-                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_S.Fota_Recv_Data_Len);
+                        BSP_QSPI_Erase_Safe(Fota_S.Fota_Flash_Addres+Fota_S.Fota_Current_Addres,Fota_Recv_Data_Len_4);
                     }
                 }
                 else//数据校验失败

+ 21 - 5
src/AppTaskMain.c

@@ -35,8 +35,8 @@ static void MainTask(void* arg)
     TimerHandle_t work_timer = NULL;
     TimerHandle_t sleep_timer = NULL;
     monitor_timer = xTimerCreate("monitor_timer", 100 / portTICK_RATE_MS, pdTRUE, NULL, monitor_timer_callback);
-    work_timer    = xTimerCreate("work_timer", 5*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, work_timer_callback);
-    sleep_timer   = xTimerCreate("sleep_timer", 60*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, sleep_timer_callback);
+    work_timer    = xTimerCreate("work_timer", WORK_TIME*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, work_timer_callback);
+    sleep_timer   = xTimerCreate("sleep_timer", SLEEP_TIME*60*1000 / portTICK_RATE_MS, pdTRUE, NULL, sleep_timer_callback);
     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
     slpManSetPmuSleepMode(true,SLP_HIB_STATE,false);
     slpManApplyPlatVoteHandle("MainSlp",&MainSlpHandler);
@@ -63,6 +63,7 @@ static void MainTask(void* arg)
         AppDataInfo.SysReStartCount = AppDataInfo.SysReStartCount + 1;
     }
     xTimerStart(monitor_timer, 0);
+    UINT8 Temp = 0;
     while(true)
     {
         switch(gProcess_Main_Task)
@@ -88,13 +89,19 @@ static void MainTask(void* arg)
                         printf("[%d]%x - %x - %x - %x - %x\n",__LINE__,WorkTimerEnd,BMS_Fota_update_flag,TCPWorkState,BattWorkStateDelay,PadInterrupt);
                     #endif
                 }
-                if((WorkTimerEnd==TRUE)&&(BMS_Fota_update_flag==FALSE)&&(TCPWorkState==0x00)&&(BattWorkStateDelay==BATT_IDLE_SYM)&&(PadInterrupt==0x00))//从工作转换为监听的条件
+                if(WorkTimerEnd==TRUE)//从工作转换为监听的条件,定时器结束
                 {
                     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_LISTEN);
                     xTimerStop(work_timer,0);
                     xTimerStart(sleep_timer, 0);
                     WorkTimerEnd = FALSE;
                     NVIC_EnableIRQ(PadWakeup1_IRQn);
+                    PadInterrupt = 0x00;
+                    break;
+                }
+                if((BMS_Fota_update_flag!=FALSE)||(TCPWorkState!=0x00)||(BattWorkStateDelay!=BATT_IDLE_SYM)||(PadInterrupt!=0x00))
+                {
+                    xTimerReset(work_timer,0);
                 }
                 if(TcpErrorcount>=10 &&PadInterrupt==0x00)
                 {
@@ -125,12 +132,17 @@ static void MainTask(void* arg)
             case PROCESS_STATE_LISTEN:
             {
                 PROC_APP_STATE_SWITCH(LISTEN);
-                osDelay(100);
                 if(PadInterrupt!=0x00)
                 {
+                    osDelay(10);
                     PadInterrupt_clrCounter++;
+                    Temp = PadInterrupt;
                     PadInterrupt = 0x00;
                 }
+                else
+                {
+                    osDelay(100);
+                }
                 if(AppDataInfo.appDataModify)
                 {
                     SaveAppData();
@@ -142,8 +154,12 @@ static void MainTask(void* arg)
                 #ifdef USING_PRINTF1
                     printf("[%d]%x - %x - %x - %x\n",__LINE__,SleepTimerEnd,BMS_Fota_update_flag,TCPWorkState,PadInterrupt);
                 #endif
-                if((SleepTimerEnd)||(TCPWorkState==1)||(PadInterrupt_clrCounter>=3))//从监听转换为工作的条件
+                if((SleepTimerEnd)||(TCPWorkState==1)||(PadInterrupt_clrCounter>=2))//从监听转换为工作的条件
                 {
+                    #ifdef USING_PRINTF
+                        printf("[%d]-%x",__LINE__,battWorkState);
+                        printf("[%d]%x - %x - %x - %x - %x-%d\n",__LINE__,WorkTimerEnd,BMS_Fota_update_flag,TCPWorkState,BattWorkStateDelay,Temp,PadInterrupt_clrCounter);
+                    #endif
                     PROC_MAIN_STATE_SWITCH(PROCESS_STATE_IDLE);
                     xTimerStop(sleep_timer,0);
                     SleepTimerEnd = FALSE;

+ 2 - 2
src/AppTaskTcp.c

@@ -547,7 +547,7 @@ static void TcpDataInfoAssembleSend()
         DebugMsgtoTcpType DebugMsgInfo;
         UINT16 BufferLen = 0;
         UINT8 rbuf[100];
-		sprintf((char *)rbuf,"%2x",ErrFlg);
+		sprintf((char *)rbuf,"%02x,%02x",ErrFlg,BattWorkStateDelay);
 		BufferLen = strlen(rbuf);
         SendBuffer = malloc(BufferLen+sizeof(DebugMsgInfo));
         memcpy(SendBuffer+sizeof(DebugMsgInfo)-1, rbuf,BufferLen);
@@ -601,7 +601,7 @@ static void TcpDataInfoAssembleSend()
         slpManWakeSrc_e Wakeup_source;
         Wakeup_source =  slpManGetWakeupSrc();//获取唤醒源
         #ifdef DEBUGLOG
-            Debug_printf("[%d,%d,%d]\n",Wakeup_source,AppDataInfo.SysReStartCount,AppDataInfo.AccMileage);
+            Debug_printf("[%d,%d]\n",Wakeup_source,AppDataInfo.SysReStartCount);
         #endif
         BufferLen = Debug_GetSize();
         if(BufferLen==0)

+ 8 - 8
src/AppTaskUart.c

@@ -79,6 +79,9 @@ static void UartTask(void* arg)
 				Uart_Cmd_Control(UartWriteCmdHandle,UartWriteData,UartAnswerData);//电池锁定,继电器锁定,加热控制
                 if(TimeCounter%10==0 && gProcess_app==WORK)
                 {
+					#ifdef USING_PRINTF
+						printf("Uart work begin:%02x\n",PadInterrupt);
+					#endif
                     if(osMessageQueueGet(UartWriteCmdHandle,&UartWriteData,0,0)==osOK&&UartRecvFlag==1)
                     {
                         PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_WRITE);
@@ -121,10 +124,10 @@ static void UartTask(void* arg)
 				Uart_Read_Msg.CRC_L = CRC_chk_buffer;
 				Uart_Read_Msg.CRC_H = CRC_chk_buffer>>8;
 				Uart_Recv_LEN = Uart_DataRecv_func(Uart_Read_Msg,(UINT8*)(UartAnswerData.Header));
-                #ifdef USING_PRINTF
+                #ifdef USING_PRINTF1
 					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
                 #endif
-				#ifdef USING_PRINTF
+				#ifdef USING_PRINTF1
 					printf("[%d]Uart_Recv_buffer-%d: ",__LINE__,Uart_Recv_LEN);
 					for(int i=0;i<Uart_Recv_LEN-5;i++)
 					{
@@ -137,7 +140,6 @@ static void UartTask(void* arg)
                     UartRecvFlag = 1;
                     UartAnswerData.len = Uart_Recv_LEN;
                     uartBattInfoDecode(UartAnswerData.data);
-					clrbit(PadInterrupt,1);
 					PROC_UART_STATE_SWITCH(PROCESS_UART_STATE_IDLE);
 					break;
                 }
@@ -145,13 +147,11 @@ static void UartTask(void* arg)
                 {
 					osDelay(100);
                     UartRecvFlagCounter++;
-					clrbit(PadInterrupt,1);
                 }
 				else//没有接收到数据
 				{
 					osDelay(100);
                     UartRecvFlagCounter++;
-					clrbit(PadInterrupt,1);
 				}
 				if(UartRecvFlagCounter>=3)
 				{
@@ -275,7 +275,7 @@ static UINT8 Uart_WriteCmd_func(UartWriteData_S UartWriteData)
         }
     }
     USARTdrv->Send((UINT8 *)&Uart_Write_Msg,sizeof(Uart_Write_Msg));
-    #ifdef USING_PRINTF
+    #ifdef USING_PRINTF1
         printf("Uart_Send_buffer:  ");
         for(int i=0;i<sizeof(Uart_Write_Msg);i++)
         {
@@ -297,7 +297,7 @@ static UINT8 Uart_WriteCmd_func(UartWriteData_S UartWriteData)
     }
     if (isRecvComplete == true)
     {
-        #ifdef USING_PRINTF
+        #ifdef USING_PRINTF1
             printf("Uart_Rece_buffer: ");
             for(int i=0;i<8;i++)
             {
@@ -1770,7 +1770,7 @@ updateBMSStatus MS_BMS_Update_Service() //美顺BMS升级服务
 					}
 					else
 					{
-						tempLen = (updateDataTotalByteLen+4) - i*64;
+						tempLen = (updateDataTotalByteLen) - i*64;
 						BSP_QSPI_Read_Safe(ReadNVMTemp,FLASH_BMS_FOTA_START_ADDR+headerLen+i*64,tempLen);
 					}
 

+ 2 - 2
src/bsp_custom.c

@@ -223,8 +223,8 @@ void BSP_CustomInit(void)
 	NVIC_EnableIRQ(PadWakeup0_IRQn);//can
 	NVIC_DisableIRQ(PadWakeup1_IRQn);//rx
 	NVIC_EnableIRQ(PadWakeup2_IRQn);//lock
-	NVIC_DisableIRQ(PadWakeup3_IRQn);//gsensor
-	NVIC_DisableIRQ(PadWakeup4_IRQn);//gsensor
+	NVIC_EnableIRQ(PadWakeup3_IRQn);//gsensor
+	NVIC_EnableIRQ(PadWakeup4_IRQn);//gsensor
 	NVIC_EnableIRQ(PadWakeup5_IRQn);//wakeup2
 	CheckLockOutState();
 	slpManStartWaitATTimer();