瀏覽代碼

函数内部定义的局部数组放到改为全局数组,减小栈空间压力。

Dail 1 年之前
父節點
當前提交
01e4adf5c5
共有 5 個文件被更改,包括 2346 次插入2345 次删除
  1. 2292 2292
      MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex
  2. 二進制
      MDK-ARM/bin/QD007A_CTL_APP.bin
  3. 5 4
      User/Src/eeprom_24c02.c
  4. 30 30
      User/Src/eeprom_flash.c
  5. 19 19
      User/Src/uart_process.c

File diff suppressed because it is too large
+ 2292 - 2292
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


二進制
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 5 - 4
User/Src/eeprom_24c02.c

@@ -169,21 +169,22 @@ int8_t SaveParamToEEprom_24C02(I2C_Handle_Struct_t* I2C_Handle, uint8_t AddrBegi
 }
 
 //指定地址读取有效数据
+uint8_t EEPROM_ReadDataBuf[256];
 int8_t GetParamFromEEprom_24C02(I2C_Handle_Struct_t* I2C_Handle, uint8_t AddrBegin, uint8_t DataLen, uint8_t *Data)
 {
-  uint8_t Temp1_8[256], i, Temp2_8[2];
+  uint8_t i, Temp2_8[2];
 	uint16_t CRC_Data, CRC_Result;
 	
 	//读取DataLen个字节
 	for(i=0;i<DataLen;i++)
 	{
-	  if(EEPROM_24C02_ReadOneByte(I2C_Handle, AddrBegin + i, (Temp1_8 + i)) == ACK_FAIL)
+	  if(EEPROM_24C02_ReadOneByte(I2C_Handle, AddrBegin + i, (EEPROM_ReadDataBuf + i)) == ACK_FAIL)
 		{
 	  	return ACK_FAIL;
 		}
 	}
 	//计算校验
-	CRC_Result = CRC16_Xmodem(Temp1_8, DataLen);
+	CRC_Result = CRC16_Xmodem(EEPROM_ReadDataBuf, DataLen);
 	
 	//读取校验
 	EEPROM_24C02_ReadOneByte(I2C_Handle, AddrBegin + DataLen, Temp2_8);
@@ -193,7 +194,7 @@ int8_t GetParamFromEEprom_24C02(I2C_Handle_Struct_t* I2C_Handle, uint8_t AddrBeg
 	//判断数据是否有效
 	if((CRC_Data - CRC_Result) == 0)
 	{
-	  memcpy(Data, Temp1_8, DataLen);
+	  memcpy(Data, EEPROM_ReadDataBuf, DataLen);
 		return ACK_OK;
 	}
 	else

+ 30 - 30
User/Src/eeprom_flash.c

@@ -7,6 +7,10 @@ FLASH_EraseInitTypeDef EEPROM_AreaEraseInitStruct;
 TrueOrFalse_Flag_Struct_t IsPowerOffDataBkp_SaveFlag = FALSE;
 TrueOrFalse_Flag_Struct_t IsFlashSaveDataUpdate = FALSE;
 
+/****************************局部变量定义******************************/
+uint8_t Flash_ReadDataBuf[256];
+uint32_t Flash_WriteDataBuf[256];
+
 /****************************全局函数定义******************************/
 //数据写入
 void CopyDataToEEPROM_Flash(void)
@@ -46,75 +50,74 @@ void CopyDataToEEPROM_Flash(void)
 
 void CopyDataFromEEPROM_Flash(void)
 {
-  uint8_t Data_Buf[256];
 	int8_t Error_OK; 
 	
 	//读取型号
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, Data_Buf, 16);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MODE, Flash_ReadDataBuf, 16);
 	if(Error_OK == 0)
 	{
-	  memcpy(MC_VerInfo.Mode, Data_Buf, 16);
+	  memcpy(MC_VerInfo.Mode, Flash_ReadDataBuf, 16);
 	}
 	//读取序列号
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, Data_Buf, 16);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_SN, Flash_ReadDataBuf, 16);
 	if(Error_OK == 0)
 	{
-	  memcpy(MC_VerInfo.SN_Num, Data_Buf, 16);
+	  memcpy(MC_VerInfo.SN_Num, Flash_ReadDataBuf, 16);
 	}
 	//读取生产信息
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MAC_INFO, Data_Buf, 32);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MAC_INFO, Flash_ReadDataBuf, 32);
 	if(Error_OK == 0)
 	{
-	  memcpy(MC_MacInfo.Manufacturer, Data_Buf, 32);
+	  memcpy(MC_MacInfo.Manufacturer, Flash_ReadDataBuf, 32);
 	}
 	//读取自定义字符串1
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO1, Data_Buf, 16);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO1, Flash_ReadDataBuf, 16);
 	if(Error_OK == 0)
 	{
-	  memcpy(&UserString1, Data_Buf, 16);
+	  memcpy(&UserString1, Flash_ReadDataBuf, 16);
 	}	
 	//读取自定义字符串2
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO2, Data_Buf, 16);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO2, Flash_ReadDataBuf, 16);
 	if(Error_OK == 0)
 	{
-  	  memcpy(&UserString2, Data_Buf, 16);
+  	memcpy(&UserString2, Flash_ReadDataBuf, 16);
 	}
 	//读取自定义字符串3
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO3, Data_Buf, 16);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_USER_INFO3, Flash_ReadDataBuf, 16);
 	if(Error_OK == 0)
 	{
-	  memcpy(&UserString3, Data_Buf, 16);
+	  memcpy(&UserString3, Flash_ReadDataBuf, 16);
 	}	
 	//读取配置参数1
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM1, Data_Buf, sizeof(MC_ConfigParam1_Struct_t));
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM1, Flash_ReadDataBuf, sizeof(MC_ConfigParam1_Struct_t));
 	if(Error_OK == 0)
 	{
-  	  memcpy((uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param, Data_Buf, sizeof(MC_ConfigParam1_Struct_t));
+  	  memcpy((uint8_t*)&MC_ConfigParam1.GasCtrlMode_Param, Flash_ReadDataBuf, sizeof(MC_ConfigParam1_Struct_t));
 	}
 	MC_GasMode_Param.Mode = MC_ConfigParam1.GasCtrlMode_Param;
 	//读取配置参数2
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM2, Data_Buf, sizeof(MC_ConfigParam2_Struct_t));
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_CONFIG_PARAM2, Flash_ReadDataBuf, sizeof(MC_ConfigParam2_Struct_t));
 	if(Error_OK == 0)
 	{
-  	  memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, Data_Buf, sizeof(MC_ConfigParam2_Struct_t));
+  	  memcpy((uint8_t*)&MC_ConfigParam2.ZeroAngle_Pitch, Flash_ReadDataBuf, sizeof(MC_ConfigParam2_Struct_t));
 	}
 	//读取马达配置参数
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MOTOR_PARAM, Data_Buf, sizeof(MC_MotorParam_Struct_t));
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_MOTOR_PARAM, Flash_ReadDataBuf, sizeof(MC_MotorParam_Struct_t));
 	if(Error_OK == 0)
 	{
-  	  memcpy((uint8_t*)&MC_MotorParam.Rate_Power, Data_Buf, sizeof(MC_MotorParam_Struct_t));
+  	  memcpy((uint8_t*)&MC_MotorParam.Rate_Power, Flash_ReadDataBuf, sizeof(MC_MotorParam_Struct_t));
 	}
 	//读取自动变速器控制参数
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_GEARBOX_PARAMS, Data_Buf, 8);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_GEARBOX_PARAMS, Flash_ReadDataBuf, 8);
 	if(Error_OK == 0)
 	{
-	   memcpy((uint8_t*)&GearBox_OBC_SetParams.GearNum, Data_Buf, 8);
+	   memcpy((uint8_t*)&GearBox_OBC_SetParams.GearNum, Flash_ReadDataBuf, 8);
 	}		
 	//读取电池放电曲线参数
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_BATTERY_PARMAS, Data_Buf, sizeof(BatterCellInfo_Struct_t));
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_BATTERY_PARMAS, Flash_ReadDataBuf, sizeof(BatterCellInfo_Struct_t));
 	if(Error_OK == 0)
 	{
-	   memcpy((uint8_t*)&BatteryCellInfo.DesignCap, Data_Buf, sizeof(BatterCellInfo_Struct_t));
+	   memcpy((uint8_t*)&BatteryCellInfo.DesignCap, Flash_ReadDataBuf, sizeof(BatterCellInfo_Struct_t));
 	}
 }
 
@@ -161,7 +164,6 @@ void EEPROM_Flash_Erase(uint32_t BeginAddress, uint32_t EndAddress)
 }
 
 //指定地址读取指定长度数据类型为8bit数据
-uint8_t Flash_ReadDataBuf[256];
 int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
 {
   uint32_t DataTemp32, CRC_Data, CRC_Result;
@@ -191,7 +193,6 @@ int8_t ReadDataFromEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Le
 }
 
 //指定地址写入指定长度数据类型为8bit数据,并写入crc校验码
-uint32_t Flash_WriteDataBuf[64];
 void SaveDataToEEPROM_Flash(uint32_t FlashAddress, uint8_t* Data, uint8_t Length) // Length必须为4的倍数
 {
 	uint32_t CRC_Result;
@@ -249,19 +250,18 @@ void EEPROM_Flash_DataUpdate(TrueOrFalse_Flag_Struct_t* IsUpdateFlag)
 
 TrueOrFalse_Flag_Struct_t EEPROM_Flash_TempCheck(void)
 {
-  uint8_t Data_Buf[64];
 	int8_t Error_OK;
 	
 	//读取掉电临时保存的数据
-	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP_FLAG, Data_Buf, 4);
+	Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP_FLAG, Flash_ReadDataBuf, 4);
 	if(Error_OK == 0)
 	{
-	  if(strncmp("FLAG", (char*)Data_Buf, 4) == 0) //关机前进行过存储
+	  if(strncmp("FLAG", (char*)Flash_ReadDataBuf, 4) == 0) //关机前进行过存储
 		{
-			Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP, Data_Buf, 40);
+			Error_OK = ReadDataFromEEPROM_Flash(EEPROM_FLASH_ADDR_POWEROFF_BKP, Flash_ReadDataBuf, 40);
 			if(Error_OK == 0)
 			{
-				memcpy((uint8_t*)&MC_PowerOffBkp.ODO_Km, Data_Buf, 40);
+				memcpy((uint8_t*)&MC_PowerOffBkp.ODO_Km, Flash_ReadDataBuf, 40);
 				return TRUE;
 			}	
 		}

+ 19 - 19
User/Src/uart_process.c

@@ -55,35 +55,35 @@ void UART_DataProcess(uint8_t Mode, uint16_t Command, uint8_t* Data)
 }
 
 //·¢ËÍÊý¾Ý
+uint8_t UartSendBuf[150];
+uint8_t UartCRC_Buf[150];
 void SendUartDataToTE(USART_Buf_TypeDef * ptTx,uint16_t IDnum,uint8_t Mode, uint16_t Command, uint8_t* Data)
 {
-  uint8_t SendBuf[150] = {0};
-	uint8_t CRC_Buf[150] = {0};
 	uint32_t CRC_Result = 0x00000000;
 	uint8_t DataLength;
 	
 	DataLength = (uint8_t)(Command & 0xFF);
-	SendBuf[0] = FRAME_BEGIN1;
-	SendBuf[1] = FRAME_BEGIN2;
-	SendBuf[2] = (uint8_t)((IDnum >> 8) & 0xFF);
-	SendBuf[3] = (uint8_t)(IDnum & 0xFF);;
-	SendBuf[4] = Mode;
-	SendBuf[5] = DataLength + 2;
-	SendBuf[6] = (uint8_t)((Command >> 8) & 0xFF);
-	SendBuf[7] = DataLength;
-	memcpy(SendBuf + 8, Data, DataLength);
-	memcpy(CRC_Buf, SendBuf, 8 + DataLength);
+	UartSendBuf[0] = FRAME_BEGIN1;
+	UartSendBuf[1] = FRAME_BEGIN2;
+	UartSendBuf[2] = (uint8_t)((IDnum >> 8) & 0xFF);
+	UartSendBuf[3] = (uint8_t)(IDnum & 0xFF);;
+	UartSendBuf[4] = Mode;
+	UartSendBuf[5] = DataLength + 2;
+	UartSendBuf[6] = (uint8_t)((Command >> 8) & 0xFF);
+	UartSendBuf[7] = DataLength;
+	memcpy(UartSendBuf + 8, Data, DataLength);
+	memcpy(UartCRC_Buf, UartSendBuf, 8 + DataLength);
 	
-	CRC_Result = CRC32_Calculate(CRC_Buf, DataLength + 8);
+	CRC_Result = CRC32_Calculate(UartCRC_Buf, DataLength + 8);
 	
-	SendBuf[8 + DataLength] = (uint8_t)((CRC_Result >> 24) & 0xFF);
-	SendBuf[9 + DataLength] = (uint8_t)((CRC_Result >> 16) & 0xFF);
-	SendBuf[10 + DataLength] = (uint8_t)((CRC_Result >> 8) & 0xFF);
-	SendBuf[11 + DataLength] = (uint8_t)(CRC_Result & 0xFF);
+	UartSendBuf[8 + DataLength] = (uint8_t)((CRC_Result >> 24) & 0xFF);
+	UartSendBuf[9 + DataLength] = (uint8_t)((CRC_Result >> 16) & 0xFF);
+	UartSendBuf[10 + DataLength] = (uint8_t)((CRC_Result >> 8) & 0xFF);
+	UartSendBuf[11 + DataLength] = (uint8_t)(CRC_Result & 0xFF);
 	
-	SendBuf[12 + DataLength] = FRAME_END;
+	UartSendBuf[12 + DataLength] = FRAME_END;
 	
-	UART_SendData(ptTx, SendBuf, DataLength + 13);
+	UART_SendData(ptTx, UartSendBuf, DataLength + 13);
 }
 
 //´®¿ÚÊý¾Ý½âÎö

Some files were not shown because too many files changed in this diff