Browse Source

平峰项目测试-V0.0.0.8-测试,仍存在问题,malloc申请的指针会变为0,导致错误

LAPTOP-KB7QFH2U\ChenJie-PC 2 years ago
parent
commit
a9cdebc22c
3 changed files with 28 additions and 21 deletions
  1. 1 1
      src/AppGlobalVar.h
  2. 8 20
      src/AppTaskUart1.c
  3. 19 0
      src/hal_adapter.c

+ 1 - 1
src/AppGlobalVar.h

@@ -25,7 +25,7 @@
 #define BATT_SN_LEN 17
 #define HWVERSION 0x0001
 #define BLSWVERSION 0x00000002
-#define DRVSWVERSION 0x00000003
+#define DRVSWVERSION 0x00000004
 #define APPSWVERSION 0x00000008
 #define BMS_MANUFACTURE 0xFF
 #define BMS_INFO 0xFF

+ 8 - 20
src/AppTaskUart1.c

@@ -1203,7 +1203,7 @@ static void TcpDataInfoRecvHandle(uint8 *DataRecv, uint16 DataRecvLen)
                     memcpy(&TcpCmdAnswer[24], (Ptr + 24), 6);
                     TcpCmdAnswer[30] = bcc_chk(TcpCmdAnswer, 30);
 					tcpipConnectionSend(SocketId, TcpCmdAnswer, 31);
-					vTaskDelay(pdMS_TO_TICKS(1000));
+					vTaskDelay(pdMS_TO_TICKS(5000));
 					Fota_Ftp(Ptr + 32);
 				}
                 else if (*(Ptr + 30) == 0x80) //Ô¶³ÌËø¶¨ÃüÁî
@@ -1539,11 +1539,6 @@ void Fota_Ftp(uint8 *dataPtrIn)
 	        uint8 *UartData = NULL;
 	        uint8 *FlashData = NULL;
 	        uint8 *fileDataPtr = NULL;
-	        UartData = pvPortMalloc(512);
-	        FlashData = pvPortMalloc(512);
-#if SEGGER_PRINTF==1
-    	SEGGER_RTT_printf("[%d]UartData1=%X\r\n",__LINE__,UartData);
-#endif
 	        memset(ATSendDataBuffer,0x00,sizeof(ATSendDataBuffer));
 			sprintf(ATSendDataBuffer, "AT+CFTRANTX=\"c:/%s\"\r\n",keyFilename);
 			UART_Query_Data(UART_LPUART1, UART_LPUART1, ATSendDataBuffer, mstrlen(ATSendDataBuffer), UartRecvBuffer, &ReadLen, pdMS_TO_TICKS(5000));
@@ -1560,14 +1555,15 @@ void Fota_Ftp(uint8 *dataPtrIn)
 	                Hal_SetAppInfo(fileLen, appReceviedCRC, CONTROLLER_SELF);
 					while(readLenAsk!=0)
 					{
-#if SEGGER_PRINTF==1
-    	SEGGER_RTT_printf("[%d]UartData2=%X,FlashData=%X,err=%d\r\n",__LINE__,UartData,FlashData,getDataLenErrCount);
-#endif
+					    UartData = pvPortMalloc(512);
+					    FlashData = pvPortMalloc(512);
 						memset(UartData,0x00,512);
 						memset(FlashData,0x00,512);
-						UART_Reset(UART_LPUART1);
 						memset(ATSendDataBuffer,0x00,sizeof(ATSendDataBuffer));
 						sprintf(ATSendDataBuffer, "AT+CFTRANTX=\"c:/%s\",%d,%d\r\n", filenamePtr,currentAddr, readLenAsk);
+#if SEGGER_PRINTF==1
+	SEGGER_RTT_printf("[%d]UartData=%X,FlashData=%X,UartData-1=%X-%X,UartData=%X-%X,UartData+1=%X-%X\r\n",__LINE__,UartData,FlashData,(&UartData)-1,*((&UartData)-1),(&UartData),*((&UartData)),(&UartData)+1,*((&UartData)+1));
+#endif
 						UART_Query_Data(UART_LPUART1, UART_LPUART1, ATSendDataBuffer, mstrlen(ATSendDataBuffer), UartData, &ReadLen, pdMS_TO_TICKS(5000));
 						sprintf(findDataBuffer, "+CFTRANTX: DATA,%d", readLenAsk);
 						if (ReadLen == (readLenAsk+strlen(findDataBuffer)+26))
@@ -1590,13 +1586,6 @@ void Fota_Ftp(uint8 *dataPtrIn)
 								}
 								else
 								{
-#if SEGGER_PRINTF==1
-    	for(uint16 i=0;i<FotaRecvDataLen_8;i++)
-    	{
-    		SEGGER_RTT_printf("%02X-%02X ",*(fileDataPtr+i),*(FlashData+i));
-    	}
-    	SEGGER_RTT_printf("\r\n[%d]flashcrc=%X,uartcrc=%X,currentAddr = %d,fileDataPtr=%X,retptr=%X\r\n",__LINE__,uartcrc,flashcrc,currentAddr,fileDataPtr,retptr);
-#endif
 									uint32 secflash = (FlashAddStart + currentAddr) & 0xFFFFF000;
 									if(secflash>0)
 									{
@@ -1620,12 +1609,13 @@ void Fota_Ftp(uint8 *dataPtrIn)
 						{
 							getDataLenErrCount++;
 						}
+						vPortFree(UartData);
+						vPortFree(FlashData);
 						if(getDataLenErrCount>=100)
 						{
 							break;
 						}
 					}
-
 	                if(getDataLenErrCount<50&&Hal_FlsCheckIsTransferSucceed()==TRUE)
 	                {
 	                	ftp_process++;
@@ -1640,8 +1630,6 @@ void Fota_Ftp(uint8 *dataPtrIn)
 			{
 				ftp_EndFlg = 1;
 			}
-			vPortFree(UartData);
-			vPortFree(FlashData);
 			break;
 		}
 		case 7://delete the bin and zl files

+ 19 - 0
src/hal_adapter.c

@@ -173,7 +173,26 @@ Std_ReturnType UART_Query_Data(uint8 transChannel, uint8 recvChannel, uint8 *txB
 		{
 			*rxlen = UartRecvMsg.DataLen;
 	//		read_ringBuffer(rxBuffer, queueRecvSize, &uartRingBuffer[recvChannel]);
+#if SEGGER_PRINTF==1
+	SEGGER_RTT_printf("[%d]rxBuffer=%X,dataAddr=%X,Len=%d,addr=%X,\r\n",__LINE__,rxBuffer,(uint8 *)(UartRecvMsg.dataAddr),UartRecvMsg.DataLen,uartRingBuffer[2]);
+#endif
+#if SEGGER_PRINTF==1
+	SEGGER_RTT_printf("dataAddr= ");
+	for(uint16 i=0;i<UartRecvMsg.DataLen;i++)
+	{
+		SEGGER_RTT_printf("%02X ",*((uint8 *)(UartRecvMsg.dataAddr)+i));
+	}
+	SEGGER_RTT_printf("\r\n");
+#endif
 			memcpy(rxBuffer,(uint8 *)(UartRecvMsg.dataAddr),UartRecvMsg.DataLen);
+#if SEGGER_PRINTF==1
+	SEGGER_RTT_printf("rxBuffer= ");
+	for(uint16 i=0;i<UartRecvMsg.DataLen;i++)
+	{
+		SEGGER_RTT_printf("%02X ",*((uint8 *)(UartRecvMsg.dataAddr)+i));
+	}
+	SEGGER_RTT_printf("\r\n");
+#endif
 			retVal = E_OK;
 		}
 		else