Files

203 lines
6.7 KiB
C
Raw Permalink Normal View History

/*
* rw_logging.c
*
* Created on: Jul 29, 2025
* Author: cc
*/
#include "includes.h"
/*******************************************************************************
* Function Name : Log_CheckSum
* Description : <EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>SRAM<EFBFBD>ж<EFBFBD>ȡ
*******************************************************************************/
uint8_t Log_CheckSum(uint32_t addr,uint8_t len)
{
uint8_t data_sum = 0;
for(uint8_t i = 0;i<len;i++)
{
data_sum += SRAM_Read_Byte(addr+i);
}
return ~data_sum;
}
/*******************************************************************************
* Function Name : Data_CheckSum
* Description : <EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Data_CheckSum(uint8_t* data,uint16_t len)
{
uint8_t data_sum = 0;
for(uint16_t i = 0;i<len;i++)
{
data_sum += data[i];
}
return ~data_sum;
}
/*******************************************************************************
* Function Name : Get_Log_Current_Address
* Description : <EFBFBD><EFBFBD>ȡSRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ǰд<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
*******************************************************************************/
uint32_t Get_Log_Current_Address(void)
{
uint32_t rev = 0;
uint8_t read_buff[4] = {0};
SRAM_DMA_Read_Buff(read_buff,0x04,SRAM_LOG_WRITE_Address);
rev = read_buff[3];
rev <<= 8;
rev |= read_buff[2];
rev <<= 8;
rev |= read_buff[1];
rev <<= 8;
rev |= read_buff[0];
if((rev < SRAM_LOG_DATA_Address) || (rev > SRAM_LOG_End_Address)) rev = SRAM_LOG_DATA_Address;
return rev;
}
/*******************************************************************************
* Function Name : Set_Log_Current_Address
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ǰд<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
*******************************************************************************/
void Set_Log_Current_Address(uint32_t W_addr)
{
uint32_t Last_addr = W_addr;
uint8_t write_buff[4] = {0};
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
write_buff[0] = (uint8_t)(Last_addr & 0xFF);
write_buff[1] = (uint8_t)((Last_addr >> 8) & 0xFF);
write_buff[2] = (uint8_t)((Last_addr >> 16) & 0xFF);
write_buff[3] = (uint8_t)((Last_addr >> 24) & 0xFF);
SRAM_DMA_Write_Buff(write_buff,0x04,SRAM_LOG_WRITE_Address);
}
/*******************************************************************************
* Function Name : SRAM_Get_READ_Log_Address
* Description : <EFBFBD><EFBFBD>ȡSRAM<EFBFBD>е<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ַ
*******************************************************************************/
uint32_t SRAM_Get_READ_Log_Address(void)
{
uint32_t rev = 0;
uint8_t read_buff[4] = {0};
SRAM_DMA_Read_Buff(read_buff,0x04,SRAM_LOG_READ_Address);
rev = read_buff[3];
rev <<= 8;
rev |= read_buff[2];
rev <<= 8;
rev |= read_buff[1];
rev <<= 8;
rev |= read_buff[0];
if((rev < SRAM_LOG_DATA_Address) || (rev > SRAM_LOG_End_Address)) rev = SRAM_LOG_DATA_Address;
return rev;
}
/*******************************************************************************
* Function Name : SRAM_Set_READ_LOG_Address
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<EFBFBD>е<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>ַ
*******************************************************************************/
void SRAM_Set_READ_LOG_Address(uint32_t r_addr)
{
uint32_t Last_addr = r_addr;
uint8_t write_buff[4] = {0};
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
write_buff[0] = (uint8_t)(Last_addr & 0xFF);
write_buff[1] = (uint8_t)((Last_addr >> 8) & 0xFF);
write_buff[2] = (uint8_t)((Last_addr >> 16) & 0xFF);
write_buff[3] = (uint8_t)((Last_addr >> 24) & 0xFF);
SRAM_DMA_Write_Buff(write_buff,0x04,SRAM_LOG_READ_Address);
}
/*******************************************************************************
* Function Name : <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Description : <EFBFBD><EFBFBD>־ÿһ<EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>SRAM<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>з<EFBFBD>װ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ֻ<EFBFBD>Ǽ<EFBFBD><EFBFBD>ϰ<EFBFBD>ͷ<EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
*******************************************************************************/
uint8_t Log_write_sram(uint8_t data_type,uint8_t *buff,uint16_t len)
{
uint32_t Last_add = 0;
uint8_t temp = 0,temp_len = 0,temp_number = 0;
uint8_t temp_buff[20] = {0};
uint16_t data_len = len,temp_date = 0,write_len = 0;
uint32_t Log_Hour_Tick = SysTick_1ms - Log_Time_ms; //2021-09-23 Log_Time_ms<6D>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹȫ<D6B9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>while<6C><65>ͬʱ<CDAC><CAB1>д
Log_Hour_Tick += (uint32_t)HEX_Conversion_To_DEC(RTC_Raw_Data.minute)*60000;
Log_Hour_Tick += (uint32_t)HEX_Conversion_To_DEC(RTC_Raw_Data.hour)*3600000;
if(data_len >= Log_Data_Len_MAX) data_len = Log_Data_Len_MAX; //<2F>޶<EFBFBD><DEB6><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
write_len = S_Log_Data + data_len + 1;
/*<2A><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>־д<D6BE><D0B4><EFBFBD><EFBFBD>ַ <20><> <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD>*/
SRAM_DMA_Read_Buff(temp_buff,0x0A,SRAM_LOG_WRITE_Address);
Last_add = temp_buff[3]; //<2F><>ȡ<EFBFBD><C8A1>־д<D6BE><D0B4><EFBFBD><EFBFBD>ַ
Last_add <<= 8;
Last_add |= temp_buff[2];
Last_add <<= 8;
Last_add |= temp_buff[1];
Last_add <<= 8;
Last_add |= temp_buff[0];
temp_number = temp_buff[8]; //<2F><>ȡ<EFBFBD><C8A1>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
//<2F><>ǰ<EFBFBD><C7B0>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
if((Last_add + write_len) >= SRAM_LOG_End_Address)
{
Last_add = SRAM_LOG_DATA_Address;
}
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־*/
temp_buff[temp_len++] = LOG_Data_Hand; //<2F><><EFBFBD><EFBFBD>ͷ
temp_buff[temp_len++] = temp_buff[8]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
temp_buff[temp_len++] = write_len; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 2Byte
temp_buff[temp_len++] = (write_len >> 8) & 0xFF;
temp_buff[temp_len++] = 0x00;
temp_date = (HEX_Conversion_To_DEC(RTC_Raw_Data.year) << 10) + (HEX_Conversion_To_DEC(RTC_Raw_Data.month) << 5) + HEX_Conversion_To_DEC(RTC_Raw_Data.day);
temp_buff[temp_len++] = (temp_date >> 8) & 0xFF;
temp_buff[temp_len++] = temp_date & 0xFF;
temp_buff[temp_len++] = data_type;
temp_buff[temp_len++] = Log_Hour_Tick & 0xFF;
temp_buff[temp_len++] = (Log_Hour_Tick >> 8) & 0xFF;
temp_buff[temp_len++] = (Log_Hour_Tick >> 16) & 0xFF;
temp_buff[temp_len++] = (Log_Hour_Tick >> 24) & 0xFF;
SRAM_DMA_Write_Buff(temp_buff,S_Log_Data,Last_add); //<2F><><EFBFBD><EFBFBD>
SRAM_DMA_Write_Buff(buff,data_len,Last_add + S_Log_Data); //<2F><><EFBFBD><EFBFBD>
SRAM_Write_Byte(Log_Data_End,Last_add + S_Log_Data + data_len); //<2F><><EFBFBD><EFBFBD>β
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>*/
temp = Log_CheckSum(Last_add,write_len);
SRAM_Write_Byte(temp,Last_add + S_Log_Check); //У<><D0A3>ֵ
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>־д<D6BE><D0B4><EFBFBD><EFBFBD>ַ <20>Լ<EFBFBD><D4BC><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>*/
Last_add = Last_add + write_len;
Set_Log_Current_Address(Last_add);
if(temp_number >= 0xFF)
{
temp_number = 0x00;
}else {
temp_number++;
}
SRAM_Write_Byte(temp_number,SRAM_LOG_Serial_Number); //<2F><><EFBFBD><EFBFBD>β
return 0;
}