Przeglądaj źródła

FFT程序优化

LAPTOP-KB7QFH2U\ChenJie-PC 2 lat temu
rodzic
commit
3d2d0b36ae

+ 7 - 6
.cproject

@@ -18,7 +18,7 @@
 						<toolChain id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.toolchain.debug.1669149124" name="NXP GCC 9.2 for Arm 32-bit Bare-Metal" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.toolchain.debug">
 							<option defaultValue="true" id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.addtools.printsize.1799663837" name="Print size" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.addtools.printsize" useByScannerDiscovery="false" valueType="boolean"/>
 							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.compiler.path.434372331" name="Path" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.compiler.path" useByScannerDiscovery="false" value="${S32DS_K1_ARM32_GNU_9_2_TOOLCHAIN_DIR}" valueType="string"/>
-							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries.933777928" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries.933777928" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.mcpu.912012235" name="Arm family" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.mcpu" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.mcpu.cortex-m4" valueType="enumerated"/>
 							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.instructionset.775672044" name="Instruction set" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.instructionset" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.instructionset.thumb" valueType="enumerated"/>
 							<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.endianness.823522198" name="Endianness" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.endianness" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.option.target.endianness.little" valueType="enumerated"/>
@@ -35,7 +35,7 @@
 								<option id="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.optimization.functionsections.1916093778" name="Function sections (-ffunction-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.optimization.functionsections" useByScannerDiscovery="true" value="false" valueType="boolean"/>
 								<option id="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.optimization.datasections.499071697" name="Data sections (-fdata-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.optimization.datasections" useByScannerDiscovery="true" value="false" valueType="boolean"/>
 								<option id="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.debugging.format.155687014" name="Debug format" superClass="com.freescale.s32ds.cross.gnu.tool.c.compiler.option.debugging.format" useByScannerDiscovery="true"/>
-								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries.334102120" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries.334102120" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.sysroot.2141010934" name="Sysroot" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.compiler.option.target.sysroot" useByScannerDiscovery="false" value="--sysroot=&quot;${S32DS_ARM32_NEWLIB_DIR}&quot;" valueType="string"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.c.compiler.option.include.paths.203066772" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/code}&quot;"/>
@@ -91,7 +91,7 @@
 								<option id="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.optimization.functionsections.685293854" name="Function sections (-ffunction-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
 								<option id="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.optimization.datasections.605720632" name="Data sections (-fdata-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.optimization.datasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
 								<option id="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.debugging.format.1630021352" name="Debug format" superClass="com.freescale.s32ds.cross.gnu.tool.cpp.compiler.option.debugging.format" useByScannerDiscovery="true"/>
-								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries.992408870" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries.992408870" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.sysroot.962316341" name="Sysroot" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.compiler.option.target.sysroot" useByScannerDiscovery="false" value="--sysroot=&quot;${S32DS_ARM32_NEWLIB_DIR}&quot;" valueType="string"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.cpp.compiler.option.include.paths.1429489325" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;${PLATFORMSDK_S32K1_2021_08_S32K146_M4F_1.0.0_PATH}/SW32K1_RTD_4_4_1_0_0_D2108/Base_TS_T40D2M10I0R0/header&quot;"/>
@@ -113,7 +113,7 @@
 							</tool>
 							<tool id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.c.linker.1997644081" name="Standard S32DS C Linker" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.c.linker">
 								<option id="com.freescale.s32ds.cross.gnu.tool.c.linker.option.gcsections.1484145597" name="Remove unused sections (-Xlinker --gc-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.c.linker.option.gcsections" useByScannerDiscovery="false" value="false" valueType="boolean"/>
-								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries.1478856746" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries.1478856746" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.sysroot.87857832" name="Sysroot" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.sysroot" useByScannerDiscovery="false" value="--sysroot=&quot;${S32DS_ARM32_NEWLIB_DIR}&quot;" valueType="string"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.mcpu.225477617" name="Arm family" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.mcpu" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.mcpu.cortex-m4" valueType="enumerated"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.freescale.s32ds.cross.gnu.tool.c.linker.option.scriptfile.1071620537" name="Script files (-T)" superClass="com.freescale.s32ds.cross.gnu.tool.c.linker.option.scriptfile" useByScannerDiscovery="false" valueType="stringList">
@@ -131,11 +131,12 @@
 									<listOptionValue builtIn="false" value="gcc"/>
 								</option>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.unalignedaccess.1492541325" name="Unaligned access" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.unalignedaccess" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.c.linker.option.target.unalignedaccess.default" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.c.linker.option.useprintffloat.1049543597" name="Support print float format for newlib_nano library (-u _printf_float)" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.c.linker.option.useprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
 								<inputType id="com.freescale.s32ds.cross.gnu.tool.c.linker.inputType.scriptfile.223205338" superClass="com.freescale.s32ds.cross.gnu.tool.c.linker.inputType.scriptfile"/>
 							</tool>
 							<tool id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.cpp.linker.2010049876" name="Standard S32DS C++ Linker" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.gnu.9.2.tool.cpp.linker">
 								<option id="com.freescale.s32ds.cross.gnu.tool.cpp.linker.option.gcsections.261623701" name="Remove unused sections (-Xlinker --gc-sections)" superClass="com.freescale.s32ds.cross.gnu.tool.cpp.linker.option.gcsections" value="true" valueType="boolean"/>
-								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries.2133622679" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries.2133622679" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.sysroot.1660798688" name="Sysroot" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.sysroot" value="--sysroot=&quot;${S32DS_ARM32_NEWLIB_DIR}&quot;" valueType="string"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.mcpu.1496913249" name="Arm family" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.mcpu" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.mcpu.cortex-m4" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.instructionset.1237595604" name="Instruction set" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.instructionset" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.cpp.linker.option.target.instructionset.thumb" valueType="enumerated"/>
@@ -148,7 +149,7 @@
 							<tool id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.339533218" name="Standard S32DS Assembler" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler">
 								<option id="com.freescale.s32ds.cross.gnu.tool.assembler.usepreprocessor.608521688" name="Use preprocessor" superClass="com.freescale.s32ds.cross.gnu.tool.assembler.usepreprocessor" useByScannerDiscovery="false" value="true" valueType="boolean"/>
 								<option defaultValue="gnu.c.debugging.level.max" id="com.freescale.s32ds.cross.gnu.tool.assembler.option.debugging.level.935781758" name="Debug Level" superClass="com.freescale.s32ds.cross.gnu.tool.assembler.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
-								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries.2115819142" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries.newlib_hosted" valueType="enumerated"/>
+								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries.2115819142" name="Libraries support" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries" useByScannerDiscovery="false" value="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.libraries.newlib_nano_noio" valueType="enumerated"/>
 								<option id="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.sysroot.1519150514" name="Sysroot" superClass="com.nxp.s32ds.cle.arm.mbs.arm32.bare.tool.assembler.option.target.sysroot" useByScannerDiscovery="false" value="--sysroot=&quot;${S32DS_ARM32_NEWLIB_DIR}&quot;" valueType="string"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="gnu.both.asm.option.include.paths.763521555" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
 									<listOptionValue builtIn="false" value="../FreeRTOS/Source/include"/>

+ 2 - 37
code/app/AppTaskCan.c

@@ -11,21 +11,11 @@
 #include "AppTaskCan.h"
 #include "AppFuncLib.h"
 #ifdef APP_CAN_ENABLE
-uint32 timerCounterGetdata = 0;
 static uint8 BattSendFlg = 0;
 static void UDSAnsFunc(uint8 *rawData);
 static void UdsAns(bool PosFlg, uint8 UdsService, uint8 UdsSubService, uint8 Idx, uint8 *AnsData, uint8 AnsDataLen);
 static void BattSendFunc(void);
-static void vCanRxCallback(TimerHandle_t pxTimer)
-{
-	uint32 ulTimerID;
-	ulTimerID = (uint32)pvTimerGetTimerID(pxTimer);
-	if (ulTimerID == 0)
-	{
-		Can_MainFunction_Read();
-		timerCounterGetdata++;
-	}
-}
+
 void CanTask(void *pvParameters)
 {
 	uint32 timerCANIdle = 0x00;
@@ -34,15 +24,8 @@ void CanTask(void *pvParameters)
 	CanIf_bRxFlag = false;
 	Can_Msg_Type_Data CanRxMsg;
 	CanRecvQueueHandle1 = xQueueCreate(100, sizeof(Can_Msg_Type_Data));
-	TimerHandle_t monitorTimer1ms;
-	monitorTimer1ms = xTimerCreate("monitor1ms", 1, pdTRUE, (void *)0, vCanRxCallback);
-	xTimerStart(monitorTimer1ms, 0);
 	BaseType_t ret = pdFALSE;
 	GsensorInit();
-	uint8 fftIdx = 0;
-	real_T S0[SIZE_FFT];
-	real_T S1[SIZE_FFT];
-	real_T S2[SIZE_FFT];
 	while (1)
 	{
 		do
@@ -64,10 +47,6 @@ void CanTask(void *pvParameters)
 					BcuDecodeFunction(CanRxMsg.id, CanRxMsg.data); // can协议解析
 				}
 			}
-			else
-			{
-				timerCANIdle++;
-			}
 			if (timerCANIdle > 20000)
 			{
 				timerCANIdle = 0;
@@ -76,24 +55,10 @@ void CanTask(void *pvParameters)
 		} while (ret == pdPASS);
 		if ((TimerCounter - timerCounterNow) >= 100)
 		{
+//			timerCANIdle = timerCANIdle + 100;
 			BcuRxDiagnose();
 			timerCounterNow = TimerCounter;
 		}
-//		if (timerCounterGetdata % 10 == 0)
-//		{
-//			SL_SC7A20_Read_XYZ_Data(xyzData);
-//			S0[fftIdx] = (real_T)xyzData[0];
-//			S1[fftIdx] = (real_T)xyzData[1];
-//			S2[fftIdx] = (real_T)xyzData[2];
-//			fftIdx++;
-//		}
-//		if (fftIdx >= SIZE_FFT)
-//		{
-//			fftIdx = 0;
-////			fft(S0, sizeof(S0) / sizeof(real_T), 100, returnFreq[0], returnP[0]); // 50 max
-////			fft(S1, sizeof(S1) / sizeof(real_T), 100, returnFreq[1], returnP[1]);
-////			fft(S2, sizeof(S2) / sizeof(real_T), 100, returnFreq[2], returnP[2]);
-//		}
 	}
 }
 // 注意解码超限问题

+ 33 - 2
code/app/AppTaskGps.c

@@ -13,21 +13,52 @@ void strdel(char *str, char c);
 uint32 location_handle(char *in1);
 void GpsDataDecode(uint8 *msg);
 uint8 GpsRecvPtr[1024];
+uint32 timerCounterGetdata = 0;
+static void vtimerCallback(TimerHandle_t pxTimer)
+{
+	uint32 ulTimerID;
+	ulTimerID = (uint32)pvTimerGetTimerID(pxTimer);
+	if (ulTimerID == 0)
+	{
+		timerCounterGetdata++;
+	}
+}
 void GpsTask(void *pvParameters)
 {
 	(void)pvParameters;
 	GpsDataQueueHandle = xQueueCreate(1, sizeof(GPSInfo));//长度为1才可以允许覆写
 	Dio_WriteChannel(DioConf_DioChannel_PTD1_GPIO_OUT_MCU_GPS_POW_EN, STD_ON);//GPS开机
 	uint16 pReadLen = 0;
+	TimerHandle_t monitorTimer1ms;
+	monitorTimer1ms = xTimerCreate("monitor1ms", 1, pdTRUE, (void *)0, vtimerCallback);
+	xTimerStart(monitorTimer1ms, 0);
+	real_T S0[SIZE_FFT];
+	real_T S1[SIZE_FFT];
+	real_T S2[SIZE_FFT];
+	uint8 fftIdx = 0;
 	while(1)
 	{
-		vTaskDelay(pdMS_TO_TICKS(100));
 		memset(GpsRecvPtr,0,sizeof(GpsRecvPtr));
-		UART_Receive_Data(UART_LPUART2,GpsRecvPtr,&pReadLen,1000);
+		UART_Receive_Data(UART_LPUART2,GpsRecvPtr,&pReadLen,1);
 		if(pReadLen>0)
 		{
 			GpsDataDecode(GpsRecvPtr);
 		}
+		if (timerCounterGetdata % 10 == 0)
+		{
+			SL_SC7A20_Read_XYZ_Data(xyzData);
+			S0[fftIdx] = (real_T)xyzData[0];
+			S1[fftIdx] = (real_T)xyzData[1];
+			S2[fftIdx] = (real_T)xyzData[2];
+			fftIdx++;
+		}
+		if (fftIdx >= SIZE_FFT)
+		{
+			fftIdx = 0;
+			fft(S0, sizeof(S0) / sizeof(real_T), 100, returnFreq[0], returnP[0]); // 50 max
+			fft(S1, sizeof(S1) / sizeof(real_T), 100, returnFreq[1], returnP[1]);
+			fft(S2, sizeof(S2) / sizeof(real_T), 100, returnFreq[2], returnP[2]);
+		}
 	}
 }
 void GpsDataDecode(uint8 *msg)

+ 6 - 2
code/app/AppTaskUart1.c

@@ -948,7 +948,7 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 	}
 	case DebugMsg:
 	{
-		uint8 rbuf[256];
+		char rbuf[512]={0};
 		DebugMsgtoTcpType DebugMsgInfo;
 		UINT16 DataLen = 0;
 		UINT16 BufferLen = 0;
@@ -968,6 +968,10 @@ void TcpDataEncode(uint32 *PtrSendAddr, uint16 *SendLen)
 				returnP[2][0], returnP[2][1], returnP[2][2], returnP[2][3], returnP[2][4]);
 
 		BufferLen = strlen((const char *)rbuf);
+#ifdef SEGGER_RTT_PRINTF
+			SEGGER_RTT_printf("[%d]BufferLen=%d\r\n",__LINE__,BufferLen);
+			SEGGER_RTT_printf("[%d]rbuf=%s\r\n",__LINE__,rbuf);
+#endif
 		*SendLen = BufferLen + sizeof(DebugMsgInfo);
 		SendBuffer = pvPortMalloc(*SendLen);
 		memcpy(SendBuffer + sizeof(DebugMsgInfo) - 1, rbuf, BufferLen);
@@ -1499,7 +1503,7 @@ void Fota_Ftp(uint8 *dataPtrIn)
 	while (p && index < 20)
 	{
 		databuffer[index] = p;
-		p = strtok(NULL, ","); // 报硬件错误
+		p = strtok(NULL, ",");
 		index++;
 	}
 	accountPtr = databuffer[0];

+ 44 - 40
code/app/lib/AppFuncLib.c

@@ -19,6 +19,10 @@
  */
 static uint8 bcc_chk_fota(uint8 *data, uint8 length);
 static uint8 Fota_crc_chk(uint8 *data, uint8 length);
+static int fft_cmp(const void*p1,const void*p2)
+{
+	return (*(struct _fft_Freq*)p2).amp>(*(struct _fft_Freq*)p1).amp ? 1 : -1;
+}
 uint16 GetErrorNum(uint16 *ErrorArray, uint8 Errorlen)
 {
     uint16 OutNum;
@@ -880,15 +884,17 @@ boolean_T JudgeTimeSystem(boolean_T Enable, boolean_T Input, uint16_T *N, uint16
     }
     return Flg;
 }
+
 void fft(real_T *S, uint16_T N, real_T freq, real_T *returnFreq, real_T *returnP) // N为偶数
 {
 
-    creal_T X[SIZE_FFT];
-    creal_T W[SIZE_FFT];
-    real_T Y1[SIZE_FFT];
-    real_T Y2[SIZE_FFT / 2 + 1];
-    real_T F[SIZE_FFT / 2 + 1];
+	creal_T X[SIZE_FFT];
+	creal_T W[SIZE_FFT];
+	real_T Y1[SIZE_FFT];
 
+//	real_T Y2[SIZE_FFT / 2 + 1];
+//	real_T F[SIZE_FFT / 2 + 1];
+	fft_type fft_data[SIZE_FFT / 2 + 1];
     uint16_T i = 0;
     uint16_T j = 0;
     uint16_T k = 0;
@@ -931,53 +937,51 @@ void fft(real_T *S, uint16_T N, real_T freq, real_T *returnFreq, real_T *returnP
     {
         Y1[i] = sqrt((X[i].im) * (X[i].im) + (X[i].re) * (X[i].re)) / N;
     }
-
-    Y2[0] = Y1[0];
-    Y2[N / 2] = Y1[N / 2];
+    fft_data[0].amp = Y1[0];
+    fft_data[N / 2].amp = Y1[N / 2];
     for (i = 1; i < N / 2; i++)
     {
-        Y2[i] = 2 * Y1[i];
+    	fft_data[i].amp = 2 * Y1[i];
     }
     // 计算频率
     for (i = 0; i < N / 2 + 1; i++)
     {
-        F[i] = freq * i / N;
+    	fft_data[i].freq = freq * i / N;
     }
-
     // 从大到小 排序
-    real_T temp;
-    uint16_T temp_idx;
-    uint16_T idx[5];
-    for (i = 0; i < N / 2 + 1; i++)
-    {
-        idx[i] = i;
-    }
-
-    for (j = 0; j < N / 2 + 1; j++) // 比较n-1轮
-    {
-        for (k = 0; k < N / 2 - j; k++) // 每轮比较n-1-i次,
-        {
-
-            if (Y2[k] < Y2[k + 1]) // 从大到小
-            {
-                temp = Y2[k];
-                Y2[k] = Y2[k + 1];
-                Y2[k + 1] = temp;
-
-                temp_idx = idx[k];
-                idx[k] = idx[k + 1];
-                idx[k + 1] = temp_idx;
-            }
-        }
-    }
-    // 输出前5个
+//    real_T temp;
+//    uint16_T temp_idx;
+//    uint16_T idx[N / 2 + 1];
+//    for (i = 0; i < N / 2 + 1; i++)
+//    {
+//        idx[i] = i;
+//    }
+//
+//    for (j = 0; j < N / 2 + 1; j++) // 比较n-1轮
+//    {
+//        for (k = 0; k < N / 2 - j; k++) // 每轮比较n-1-i次,
+//        {
+//
+//            if (Y2[k] < Y2[k + 1]) // 从大到小
+//            {
+//                temp = Y2[k];
+//                Y2[k] = Y2[k + 1];
+//                Y2[k + 1] = temp;
+//
+//                temp_idx = idx[k];
+//                idx[k] = idx[k + 1];
+//                idx[k + 1] = temp_idx;
+//            }
+//        }
+//    }
+//    // 输出前5个
+    qsort(fft_data,sizeof(fft_data) / sizeof(fft_data[0]),sizeof(fft_data[0]),fft_cmp);
     for (i = 0; i < 5; i++)
     {
-        returnFreq[i] = F[idx[i]];
-        returnP[i] = Y2[i];
+        returnFreq[i] = fft_data[i].freq;
+        returnP[i] = fft_data[i].amp;
     }
 }
-
 //
 void RaderReverse(creal_T *X, uint16_T N)
 {

+ 7 - 2
code/app/lib/AppFuncLib.h

@@ -45,7 +45,12 @@ int _sprintf(char *dst, const char *format, ...);
 uint16 crc_chk(uint8 *data, uint8 length);
 
 /*********************************************************************************************/
-#define SIZE_FFT 128
+#define SIZE_FFT 64
+typedef struct _fft_Freq
+{
+	real_T freq;
+	real_T amp;
+}fft_type;
 extern uint16_T ArrMax(uint16_T *Data, uint16_T m);
 extern uint16_T ArrMin(uint16_T *Data, uint16_T m);
 extern int16_T ArrMean(int16_T *Data, uint16_T n);
@@ -69,4 +74,4 @@ extern void cmul(creal_T a, creal_T b, creal_T *c);
 extern void cadd(creal_T a, creal_T b, creal_T *c);
 extern void csub(creal_T a, creal_T b, creal_T *c);
 /***********************************************************************************************/
-#endif /* APPFUNCLIB_H_ */
+#endif /* APPFUNCLIB_H_ */

+ 6 - 13
code/hal/hal_adapter.c

@@ -312,19 +312,16 @@ Std_ReturnType UART_Send_Data(uint8 transChannel, const uint8 *txBuffer, uint32
 			  {
 					if(UartHalMsgRecv.value>0)
 					{
-
-
-
 						recvSize = write_ringBuffer(RX_Buffer[UartHalMsgRecv.Channel],UartHalMsgRecv.value,&uartRingBuffer[UartHalMsgRecv.Channel]);
 						UartRecvMsg.DataLen = UartHalMsgRecv.value;
 						UartRecvMsg.dataAddr = (uint32)(uartRingBuffer[UartHalMsgRecv.Channel].bw + uartRingBuffer[UartHalMsgRecv.Channel].source - UartHalMsgRecv.value);
 						ret_send = xQueueSend(UartRecvQueue[UartHalMsgRecv.Channel],&UartRecvMsg,10);
-//#if SEGGER_PRINTF==1
-//						if(UartHalMsgRecv.Channel==1)
-//						{
-//							SEGGER_RTT_printf("[%d]source=%X,dataAddr=%X\r\n",__LINE__,uartRingBuffer[UartHalMsgRecv.Channel].source,UartRecvMsg.dataAddr);
-//						}
-//#endif
+#ifdef SEGGER_RTT_PRINTF1
+						if(UartHalMsgRecv.Channel==1)
+						{
+							SEGGER_RTT_printf("[%d]source=%X,dataAddr=%s\r\n",__LINE__,uartRingBuffer[UartHalMsgRecv.Channel].source,(uint8 *)UartRecvMsg.dataAddr);
+						}
+#endif
 					}
 					T_timeout[UartHalMsgRecv.Channel] = 0;
 					UartState[UartHalMsgRecv.Channel] = UartRecvComplete;
@@ -1079,12 +1076,8 @@ void MCUEnterSleep(void)
 		vTaskDelete(CanTask_Handle);
 		vTaskDelete(GpsTask_Handle);
 		vTaskDelete(Uart_4G_Task_Handle);
-//		vTaskDelete(MainTask_Handle);
 
 		SystemDeinit();
-#ifdef SEGGER_RTT_PRINTF
-	SEGGER_RTT_printf("[%d]\n",__LINE__);
-#endif
 		MCUSleep();
 //		WdgInit();
 //		DoResetECUWithWdg();

+ 4 - 5
code/main.c

@@ -70,7 +70,6 @@
 int main(void)
 {
 	volatile int exit_code = 0;
-
 	coreInit();
 	SystemModulesInit();
 	displayResetReasonWithLED();
@@ -84,10 +83,10 @@ int main(void)
 	SEGGER_RTT_printf("boot\n");
 #endif
 	UartInit();
-	xTaskCreate(MainTask, (const char *const)"MainTask", 512, (void *)0, main_TASK_PRIORITY + 6, MainTask_Handle);
-	//	xTaskCreate(Uart0Task, (const char *const)"Uart0_Bms_Task", 512, (void *)0, main_TASK_PRIORITY + 2, Uart0Task_Handle);
-	xTaskCreate(CanTask, (const char *const)"CanTask", 1024, (void *)0, main_TASK_PRIORITY + 2, &CanTask_Handle);
-	xTaskCreate(GpsTask, (const char *const)"GpsTask", 512, (void *)0, main_TASK_PRIORITY + 1, &GpsTask_Handle);
+	xTaskCreate(MainTask, (const char *const)"MainTask", 4096, (void *)0, main_TASK_PRIORITY + 6, MainTask_Handle);
+	//xTaskCreate(Uart0Task, (const char *const)"Uart0_Bms_Task", 512, (void *)0, main_TASK_PRIORITY + 2, Uart0Task_Handle);
+	xTaskCreate(CanTask, (const char *const)"CanTask", 512, (void *)0, main_TASK_PRIORITY + 2, &CanTask_Handle);
+	xTaskCreate(GpsTask, (const char *const)"GpsTask", 2048, (void *)0, main_TASK_PRIORITY + 1, &GpsTask_Handle);
 	xTaskCreate(Uart_4G_Task, (const char *const)"Uart_4G_Task", 2048, (void *)0, main_TASK_PRIORITY + 0, &Uart_4G_Task_Handle);
 	vTaskStartScheduler();