#include "cyclic_storage_cfg_api.h"
|
#include "cyclic_storage_data_created_api.h"
|
#include "gpio.h"
|
#include "string.h"
|
#include "bootloader_iap.h"
|
#include "off_chip_flash.h"
|
|
// »·Ð´´¢´æµÄ¿éÊýÁ¿
|
#define CYCLIC_STORAGE_BLOCK_CNT (128)
|
// »·Ð´´¢´æµÄ´óС
|
#define CYCLIC_STORAGE_SIZE (CYCLIC_STORAGE_BLOCK_CNT * OUT_FLASH_SECTOR_SIZE) // 512KB
|
// »·Ð´´¢´æÆðʼµØÖ·£¨Ä¬ÈÏÖµ£©
|
#define CYCLIC_STORAGE_START_ADDR (BOOTLOAD_DIFF_PROG_START_ADDRESS + BOOTLOAD_DIFF_PROG_LEN_MAX) //416K
|
// »·Ð´´¢´æ½áÊøµØÖ·£¨Ä¬ÈÏÖµ£©
|
#define CYCLIC_STORAGE_END_ADDR (CYCLIC_STORAGE_START_ADDR + CYCLIC_STORAGE_SIZE)
|
|
|
SYSLOG_CYCLIC_DATA_T sys_log_cyclic_data_g = {0};
|
|
/*ÀúÊ·¼Ç¼ÈÕÖ¾±í£¨»·Ð´£©*/
|
const SYSLOG_CYCLIC_TABLE_T sys_log_cyclic_table[] = {
|
{&sys_log_cyclic_data_g.send_flow_data_log, SEND_FLOW_DATA_LOG_FORMAT_SIZE, 6 * 24 * 3}, //°´10·ÖÖÓ´¢´æÒ»´Î£¬´¢´æÈýÌìµÄ×î´óÌõÊý¼ÆËã
|
{&sys_log_cyclic_data_g.sys_hour_flow_data_log, HISTORY_FLOW_DATA_LOG_FORMAT_SIZE, 2 * 24 * 31}, // 2¸öÔÂ
|
{&sys_log_cyclic_data_g.sys_day_flow_data_log, HISTORY_FLOW_DATA_LOG_FORMAT_SIZE, 365}, // 1Äê
|
{&sys_log_cyclic_data_g.sys_month_flow_data_log, HISTORY_FLOW_DATA_LOG_FORMAT_SIZE, 10 * 12}, // 10Äê
|
|
{&sys_log_cyclic_data_g.measure_alarm_log, MEASURE_ALARM_DATA_LOG_FORMAT_SIZE, 200}, // ÌõÊý
|
{&sys_log_cyclic_data_g.other_alarm_log, OTHER_ALARM_DATA_LOG_FORMAT_SIZE, 400},
|
{&sys_log_cyclic_data_g.valve_log, VALVE_LOG_FORMAT_SIZE, 100},
|
{&sys_log_cyclic_data_g.pay_log, PAY_LOG_FORMAT_SIZE, 100},
|
{&sys_log_cyclic_data_g.restore_default_log, RESTORE_DEFAULT_LOG_FORMAT_SIZE, 5},
|
{&sys_log_cyclic_data_g.timing_log,TIMING_LOG_FORMAT_SIZE,50},
|
|
{&sys_log_cyclic_data_g.gas_cumulate_amend_log, GAS_CUMULATE_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.balance_amend_log, BALANCE_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.temp_cfg_amend_log, TEMP_CFG_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.press_cfg_amend_log, PRESS_CFG_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.billing_price_amend_log, BILLING_PRICE_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.flow_cfg_amend_log, FLOW_CFG_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.cal_pulse_amend_log, CAL_PULSE_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.sys_func_cfg_amend_log, SYS_FUNC_CFG_AMEND_LOG_FORMAT_SIZE, 20},
|
{&sys_log_cyclic_data_g.alarm_ctl_send_bytes_amend_log,ALARM_CTL_SEND_BYTES_AMEND_LOG_FORMAT_SIZE,20},
|
{&sys_log_cyclic_data_g.valve_ctl_bytes_amend_log,VALVE_CTL_BYTES_AMEND_LOG_FORMAT_SIZE,20},
|
{&sys_log_cyclic_data_g.billing_alarm_cfg_amend_log,BILLING_ALARM_CFG_AMEND_LOG_FORMAT_SIZE,20},
|
{&sys_log_cyclic_data_g.sec_corr_para_amend_log,SEC_CORR_PARA_AMEND_LOG_FORMAT_SIZE,20},
|
};
|
/*ÓÃÓÚÅжÏÊÇÄĸö²ÎÊýÐ޸IJ¢¼Ç¼*/
|
const PARA_AMEND_TABLE_T para_amend_table[12] = {
|
{GAS_CUMULATE_PARA_AMEND, &sys_log_cyclic_table[CYCL_GAS_CUMULATE_AMEND]},
|
{BALANCE_PARA_AMEND, &sys_log_cyclic_table[CYCL_BALANCE_AMEND]},
|
{TEMP_CFG_PARA_AMEND, &sys_log_cyclic_table[CYCL_TEMP_CFG_AMEND]},
|
{PRESS_CFG_PARA_AMEND, &sys_log_cyclic_table[CYCL_PRESS_CFG_AMEND]},
|
{BILLING_PARA_AMEND, &sys_log_cyclic_table[CYCL_BILLING_PRICE_AMEND]},
|
{GAS_CFG_PARA_AMEND, &sys_log_cyclic_table[CYCL_FLOW_CFG_AMEND]},
|
{PLUSE_CAL_PARA_AMEND, &sys_log_cyclic_table[CYCL_CAL_PULSE_AMEND]},
|
{SYS_FUNC_CFG_BYTES_AMEND,&sys_log_cyclic_table[CYCL_SYS_FUNC_CFG_AMEND]},
|
{ALARM_CTL_SEND_BYTES_AMEND,&sys_log_cyclic_table[CYCL_ALARM_CTL_SEND_BYTES_AMEND]},
|
{VALVE_CTL_BYTES_AMEND,&sys_log_cyclic_table[CYCL_VALVE_CTL_BYTES_AMEND]},
|
{BILLING_ALARM_CFG_AMEND,&sys_log_cyclic_table[CYCL_BILLING_ALARM_CFG_AMEND]},
|
{SEC_ORDER_CORR_PARA_AMEND,&sys_log_cyclic_table[CYCL_SEC_CORR_PARA_AMEND]},
|
};
|
|
/*Åжϴ˿̻·Ð´ÊÇ·ñµ½´ïµØÖ·Î²£¨×î´ónum£© µ½´ï·µ»Ø1 δµ½´ï·µ»Ø0*/
|
uint8_t Sys_Log_E2pCyclicFull(const SYSLOG_CYCLIC_TABLE_T *log_table_p)
|
{
|
if ((log_table_p->table_id->log_index - 1) >= log_table_p->data_num) // Åжϴ˿ÌÊÇ·ñµ½´ïµØÖ·Î²£¨×î´ónum£©
|
{
|
log_table_p->table_id->log_index = 1; // ·¶Î§ 1 ~ (data_num + 1)
|
log_table_p->table_id->log_cyclic_full_cnt++;
|
if (log_table_p->table_id->log_cyclic_full_cnt == 0) // cnt++Ô½½çÁ˺ó²»ÄܵÈÓÚ0
|
log_table_p->table_id->log_cyclic_full_cnt = 1;
|
FM25V02_data_write(log_table_p->table_id->log_cyclic_full_cnt,log_table_p->table_id->log_full_cnt_addr);
|
FM25V02_data_write_uint16(log_table_p->table_id->log_index_addr,log_table_p->table_id->log_index);
|
return 1;
|
}
|
return 0;
|
}
|
/*
|
ÈÕÖ¾E2p»·Ð´µ¥´Î
|
log_table_p £ºÈÕÖ¾±íÖ¸Õë
|
pBuffer £º¾ßÌåµÄдÈëÊý¾ÝÄÚÈÝ
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
void Sys_Log_E2pCyclicWrite_1_Data(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pBuffer)
|
{
|
uint32_t now_addr = log_table_p->table_id->log_start_addr + (log_table_p->table_id->log_index - 1) * log_table_p->data_size;
|
log_table_p->table_id->log_index++;
|
/*´¢´æÊý¾Ý*/
|
Out_Flash_MultipleWrite(pBuffer, now_addr, log_table_p->data_size);
|
if (Sys_Log_E2pCyclicFull(log_table_p) == 0)
|
FM25V02_data_write_uint16(log_table_p->table_id->log_index_addr,log_table_p->table_id->log_index);
|
}
|
|
/*
|
ÈÕÖ¾E2p»·Ð´¶à´Î
|
log_table_p £ºÈÕÖ¾±íÖ¸Õë
|
pBuffer £º¾ßÌåµÄдÈëÊý¾ÝÄÚÈÝ
|
write_cnt:д´ÎÊý
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
void Sys_Log_E2pCyclicMultipleWrite(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pBuffer,uint8_t write_cnt)
|
{
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
for(uint8_t i = 0;i < write_cnt;i++)
|
Sys_Log_E2pCyclicWrite_1_Data(log_table_p,&pBuffer[i * log_table_p->data_size]);
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
}
|
/*
|
ÓÃÓÚÔ¶´«Á÷Á¿Êý¾ÝµÄÌØÊâд
|
pBuffer £º¾ßÌåµÄдÈëÊý¾ÝÄÚÈÝ
|
write_cnt:д´ÎÊý
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
ErrorStatus_STM32 SendFlowData_SpecialWrite(uint8_t *pBuffer,uint8_t write_cnt)
|
{
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
ErrorStatus_STM32 result = ERROR_1;
|
uint32_t now_addr = 0;
|
const SYSLOG_CYCLIC_TABLE_T *log_table_p = &sys_log_cyclic_table[CYCL_SEND_FLOW_DATA];
|
for(uint8_t i = 0;i < write_cnt;i++)
|
{
|
now_addr = log_table_p->table_id->log_start_addr + (log_table_p->table_id->log_index - 1) * log_table_p->data_size;
|
log_table_p->table_id->log_index++;
|
if (Sys_Log_E2pCyclicFull(log_table_p) == 0)
|
FM25V02_data_write_uint16(log_table_p->table_id->log_index_addr,log_table_p->table_id->log_index);
|
/*¶à´ÎÑéÖ¤±£Ö¤Êý¾ÝµÄÕýÈ·ÐÔºÍÍêÕûÐÔ*/
|
for(uint8_t j = 0;j < 3;j++)
|
{
|
uint8_t read_sum = 0,save_sum = 0,calc_sum = 0,temp_buffer[log_table_p->data_size];
|
/*´¢´æÊý¾Ý*/
|
Out_Flash_MultipleWrite(pBuffer, now_addr, log_table_p->data_size);
|
/*¶ÁÈ¡Êý¾Ý*/
|
Out_Flash_MultipleRead(temp_buffer, now_addr, log_table_p->data_size);
|
save_sum = pBuffer[0];
|
read_sum = temp_buffer[0];
|
calc_sum = CalcCheckSum(&temp_buffer[1], log_table_p->data_size);
|
if((calc_sum == save_sum) && (read_sum == save_sum)) //дÈëÕýÈ·
|
{
|
result = SUCCESS_0;
|
break;
|
}
|
}
|
}
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
return result;
|
}
|
|
/*
|
ÓÃÓÚÔ¶´«Á÷Á¿Êý¾ÝµÄÌØÊâ¶Á
|
pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
read_cnt£º¶Á´ÎÊý
|
back_or_forward£ºµ¹Ðò¶Áor˳Ðò¶Á
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
*/
|
ErrorStatus_STM32 SendFlowData_SpecialRead(uint8_t *pOutput,uint8_t read_cnt,uint8_t back_or_forward)
|
{
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
ErrorStatus_STM32 result = ERROR_1;
|
const SYSLOG_CYCLIC_TABLE_T *log_table_p = &sys_log_cyclic_table[CYCL_SEND_FLOW_DATA];
|
uint32_t addr_now;
|
for(uint8_t j = 0;j < read_cnt;j++)
|
{
|
/*¼ÆËãµØÖ·*/
|
if(back_or_forward == REVERSE_READ)
|
addr_now = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,j + 1);
|
else if(back_or_forward == POSITIVE_READ)
|
addr_now = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,read_cnt - j);
|
/*¶à´ÎÑéÖ¤±£Ö¤Êý¾ÝµÄÕýÈ·ÐÔºÍÍêÕûÐÔ*/
|
for(uint8_t i = 0;i < 3;i++)
|
{
|
uint8_t read_sum, calc_sum;
|
/*¼ÆËãºÍ*/
|
Out_Flash_MultipleRead(&pOutput[j * log_table_p->data_size] , addr_now, log_table_p->data_size);
|
calc_sum = CalcCheckSum(&pOutput[1], log_table_p->data_size);
|
/*´¢´æºÍ*/
|
read_sum = pOutput[0];
|
//Ö»ÓÐÔÚ¸ÕÉϵçʱ²Å»áµ÷Óô˺¯Êý£¬ËùÒÔ´¢´æÖеÄУÑéºÍÓëÌáÈ¡Êý¾ÝºóµÄ¼ÆËãºÍ²»Ò»ÖÂʱ
|
//1.¿ÉÄÜ´ú±íE2PË𻵠2.Öжϴò¶Ï¶ÁÈ¡º¯Êý
|
if (read_sum == calc_sum)
|
{
|
result = SUCCESS_0;
|
break;
|
}
|
}
|
}
|
E2P_PWR_OFF; // ¿ªÆôE2pµçÔ´
|
return result;
|
}
|
/*
|
ÓÃÓÚÔ¶´«Á÷Á¿Êý¾Ý¶ÁÒ»ÌõÊý¾Ý
|
pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
pRead_addr£ºÔ¶´«·¢ËÍÊý¾ÝµÄ¶ÁµØÖ·
|
ÊÇ·ñÕý³££º
|
*/
|
uint32_t SendFlowData_Read_1_Data(uint8_t *pOutput,uint32_t read_addr)
|
{
|
ErrorStatus_STM32 success_flag = ERROR_1;
|
uint32_t next_addr = read_addr;
|
const SYSLOG_CYCLIC_TABLE_T *log_table_p = &sys_log_cyclic_table[CYCL_SEND_FLOW_DATA];
|
/*¶à´ÎÑéÖ¤±£Ö¤Êý¾ÝµÄÕýÈ·ÐÔºÍÍêÕûÐÔ*/
|
for(uint8_t i = 0;i < 3;i++)
|
{
|
uint8_t read_sum, calc_sum;
|
/*¼ÆËãºÍ*/
|
next_addr = Sys_Log_E2pCyclicRead_1_Data(log_table_p, pOutput, read_addr);
|
calc_sum = CalcCheckSum(&pOutput[1], log_table_p->data_size);
|
/*´¢´æºÍ*/
|
read_sum = pOutput[0];
|
//Ö»ÓÐÔÚ¸ÕÉϵçʱ²Å»áµ÷Óô˺¯Êý£¬ËùÒÔ´¢´æÖеÄУÑéºÍÓëÌáÈ¡Êý¾ÝºóµÄ¼ÆËãºÍ²»Ò»ÖÂʱ
|
//1.¿ÉÄÜ´ú±íE2PË𻵠2.Öжϴò¶Ï¶ÁÈ¡º¯Êý
|
if (read_sum == calc_sum)
|
{
|
success_flag = SUCCESS_0;
|
return next_addr;
|
}
|
}
|
return next_addr;
|
}
|
|
|
/********************************************************************
|
* name : Sys_Log_E2pCyclic_ReverseGetStartAddr
|
* description : ÒÔµ¹ÐòµÄ·½Ê½»ñµÃÊý¾Ý¿ªÊ¼µØÖ·
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
back_cnt£ºÒÔµ±Ç°ÎªÆðʼ£¬»ØÍƵÄÊý¾ÝÌõÊý
|
* Output : none
|
* Return : start_addr:Êý¾ÝµÄÆðʼµØÖ·
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
********************************************************************/
|
uint32_t Sys_Log_E2pCyclic_ReverseGetStartAddr(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint16_t back_cnt)
|
{
|
uint32_t get_start_addr = 0;
|
uint16_t real_log_index = log_table_p->table_id->log_index - 1;
|
uint16_t data_full_index_cnt = 0, calc_index = 0;
|
if (log_table_p->table_id->log_cyclic_full_cnt) // ÄÚ´æ»·Âú
|
{
|
if (back_cnt > log_table_p->data_num) // Åж϶ÁÈ¡ÌõÊýÊÇ·ñÔ½½ç
|
back_cnt = log_table_p->data_num;
|
if (back_cnt > real_log_index) //»ØÍÆÌõÊý´óÓÚµ±Ç°ÌõÊý
|
{
|
data_full_index_cnt = back_cnt - real_log_index; // ¼ÆËã³ýÈ¥Ë÷Òý³¤¶Èµ½×î´ó³¤¶È»¹Óж೤
|
calc_index = log_table_p->data_num - data_full_index_cnt; // ¼ÆËãË÷Òý
|
get_start_addr = log_table_p->table_id->log_start_addr + calc_index * log_table_p->data_size;
|
}
|
else
|
get_start_addr = (real_log_index - back_cnt) * log_table_p->data_size + log_table_p->table_id->log_start_addr;
|
}
|
else // Äڴ滷δÂú
|
{
|
if (back_cnt > real_log_index)
|
back_cnt = real_log_index;
|
get_start_addr = (real_log_index - back_cnt) * log_table_p->data_size + log_table_p->table_id->log_start_addr;
|
}
|
return get_start_addr;
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclic_PositiveGetStartAddr£¨ÔÝÎÞÔËÓó¡¾°£©
|
* description : ÒÔÕýÐòµÄ·½Ê½»ñµÃÊý¾Ý¿ªÊ¼µØÖ·
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
forward_cnt£ºÒÔ×îÀϵÄÊý¾ÝΪÆðʼ£¬ÕýÍÆµÄÊý¾ÝÌõÊý
|
* Output : none
|
* Return : start_addr:Êý¾ÝµÄÆðʼµØÖ·
|
********************************************************************/
|
uint32_t Sys_Log_E2pCyclic_PositiveGetStartAddr(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint16_t forward_cnt)
|
{
|
uint32_t get_start_addr = 0;
|
if(log_table_p->table_id->log_cyclic_full_cnt) // ÄÚ´æ»·Âú
|
{
|
}
|
else
|
{
|
}
|
return get_start_addr;
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclic_TimeInterval_GetStartAddr
|
* description : °´Ê±¼äÇø¼ä»ñµÃÊý¾Ý¿ªÊ¼µØÖ·ºÍÌõÊý£¨ÊÊÓÃÓÚ´æ´¢ÌõÊý¶àÇÒÓйæÂÉÓÐÖÜÆÚ´æ´¢µÄÊý¾Ý£©
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
start_time_bcd[6]£º¿ªÊ¼Ê±¼ä
|
end_time_bcd[6]£º½áÊøÊ±¼ä
|
para_flag£º0£ºÆäËû 1£ºÐ¡Ê±¼Ç¼ 2£ºÌì¼Ç¼ 3£ºÔ¼Ç¼
|
* Output : *pSend_data_num : ÐèÒªÌáÈ¡Êý¾ÝµÄÌõÊý
|
* Return : start_addr:Êý¾ÝµÄÆðʼµØÖ·
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230627
|
********************************************************************/
|
uint32_t Sys_Log_E2pCyclic_TimeGetStartAddr(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint16_t *pSend_data_num,
|
uint8_t start_time_bcd[6],uint8_t end_time_bcd[6],uint8_t para_flag)
|
{
|
uint32_t get_start_addr = 0;
|
uint8_t old_e2p_time_bcd[6] = {0};//E2P×îÀϵÄʱ¼äÊý¾Ý
|
/*µ±Ç°Ê±¼äÒ²ÊÇE2P×îд洢Êý¾ÝµÄʱ¼ä*/
|
uint8_t new_e2p_time_bcd[] = {calendar_g.Year, calendar_g.Month, calendar_g.Date, calendar_g.Hour, calendar_g.Minute, calendar_g.Second};
|
uint32_t old_log_start_addr;
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
/*·½·¨1*/
|
int start_2_e2p_old_time_diff,end_2_e2p_old_time_diff,
|
e2p_new_2_start_time_diff,e2p_new_2_end_time_diff;
|
/*ÌáÈ¡³ö×îÀϵÄÒ»ÌõÊý¾ÝµÄʱ¼ä*/
|
old_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, log_table_p->data_num);
|
switch(para_flag)
|
{
|
case 0:
|
Out_Flash_MultipleRead(old_e2p_time_bcd,old_log_start_addr + SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num),6);
|
break;
|
case 1:
|
case 2:
|
case 3:
|
Out_Flash_MultipleRead(old_e2p_time_bcd,old_log_start_addr,6);
|
break;
|
default:break;
|
}
|
start_2_e2p_old_time_diff = Datecmp(start_time_bcd,old_e2p_time_bcd);// ¿ªÊ¼Ê±¼ä ºÍ ´æ´¢µÄ×îÀÏʱ¼äµÄ ʱ¼ä²î
|
end_2_e2p_old_time_diff = Datecmp(end_time_bcd,old_e2p_time_bcd);//½áÊøÊ±¼ä ºÍ ´æ´¢×îÀϵÄʱ¼äµÄ ʱ¼ä²î
|
e2p_new_2_start_time_diff = Datecmp(new_e2p_time_bcd,start_time_bcd);// ´æ´¢×îÐÂʱ¼ä ºÍ ¿ªÊ¼Ê±¼äµÄ ʱ¼ä²î
|
e2p_new_2_end_time_diff = Datecmp(new_e2p_time_bcd,end_time_bcd);//´¢´æ×îÐÂʱ¼ä ºÍ ½áÊøÊ±¼äµÄ ʱ¼ä²î
|
if(end_2_e2p_old_time_diff <= 0 || e2p_new_2_start_time_diff <= 0) //²»ÔÚ´¢´æÊ±¼ä·¶Î§
|
{
|
/*½oÒ»¸ö¶ÁÈ¡µÄ×î´óÌõÊý*/
|
if(log_table_p->table_id->log_index >= 20 || log_table_p->table_id->log_cyclic_full_cnt)
|
*pSend_data_num = 20;
|
else
|
*pSend_data_num = log_table_p->table_id->log_index - 1;
|
/*¼ÆËãÆðʼʱ¼äµÄµØÖ·*/
|
get_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, *pSend_data_num);
|
}else
|
{
|
if(start_2_e2p_old_time_diff <= 0) // Æðʼʱ¼ä <= E2p´¢´æµÄ×îÔçʱ¼ä
|
{
|
get_start_addr = old_log_start_addr;
|
if(e2p_new_2_end_time_diff <= 0) //E2p´¢´æµÄ×îÐÂʱ¼ä <= ½áÊøÊ±¼ä
|
{
|
if(log_table_p->table_id->log_cyclic_full_cnt) //»·Ð´Âú
|
*pSend_data_num = log_table_p->data_num;
|
else
|
*pSend_data_num = log_table_p->table_id->log_index - 1;
|
}
|
else //E2p´¢´æµÄ×îÐÂʱ¼ä > ½áÊøÊ±¼ä
|
{
|
uint16_t e2p_old_2_end_days_diff = Date_DaysDifference(old_e2p_time_bcd[0],old_e2p_time_bcd[1],old_e2p_time_bcd[2],end_time_bcd[0],end_time_bcd[1],end_time_bcd[2]);
|
switch(para_flag)
|
{
|
case 1:
|
*pSend_data_num = e2p_old_2_end_days_diff * 24 - BCD_2_HEX_U8(old_e2p_time_bcd[3]) + BCD_2_HEX_U8(end_time_bcd[3]);
|
break;
|
case 2:
|
*pSend_data_num = e2p_old_2_end_days_diff;
|
break;
|
case 3:
|
*pSend_data_num = Data_MonthsDifference(old_e2p_time_bcd[0],old_e2p_time_bcd[1],end_time_bcd[0],end_time_bcd[1]);
|
break;
|
default:break;
|
}
|
}
|
}
|
else
|
{
|
uint16_t days_diff;
|
// Æðʼµ½ÊµÊ±Ê±¼äµÄÌìÊý²î
|
days_diff = Date_DaysDifference(start_time_bcd[0], start_time_bcd[1], start_time_bcd[2], new_e2p_time_bcd[0], new_e2p_time_bcd[1], new_e2p_time_bcd[2]);
|
/*¼ÆËãÆðʼʱ¼äÖÁµ±Ç°Ê±¼ä¹²ÓжàÉÙÌõÊý¾Ý*/
|
switch(para_flag)
|
{
|
case 1:
|
*pSend_data_num = days_diff * 24 - BCD_2_HEX_U8(start_time_bcd[3]) + BCD_2_HEX_U8(new_e2p_time_bcd[3]);
|
break;
|
case 2:
|
*pSend_data_num = days_diff + 1;
|
break;
|
case 3:
|
*pSend_data_num = Data_MonthsDifference(start_time_bcd[0],start_time_bcd[1],new_e2p_time_bcd[0],new_e2p_time_bcd[1]) + 1;
|
break;
|
default:break;
|
}
|
/*¼ÆËãÆðʼʱ¼äµÄµØÖ·*/
|
get_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, *pSend_data_num);
|
|
if(e2p_new_2_end_time_diff > 0) //E2p´¢´æµÄ×îÐÂʱ¼ä > ½áÊøÊ±¼ä
|
{
|
days_diff = Date_DaysDifference(start_time_bcd[0], start_time_bcd[1], start_time_bcd[2], end_time_bcd[0], end_time_bcd[1], end_time_bcd[2]);
|
switch(para_flag)
|
{
|
case 1:
|
*pSend_data_num = days_diff * 24 - BCD_2_HEX_U8(start_time_bcd[3]) + BCD_2_HEX_U8(end_time_bcd[3]);
|
break;
|
case 2:
|
*pSend_data_num = days_diff;
|
break;
|
case 3:
|
*pSend_data_num = Data_MonthsDifference(start_time_bcd[0],start_time_bcd[1],end_time_bcd[0],end_time_bcd[1]);
|
break;
|
default:break;
|
}
|
}
|
}
|
if(log_table_p->table_id->log_cyclic_full_cnt && *pSend_data_num > log_table_p->data_num)
|
*pSend_data_num = log_table_p->data_num;
|
else if(log_table_p->table_id->log_cyclic_full_cnt == 0 && (*pSend_data_num > (log_table_p->table_id->log_index - 1)))
|
*pSend_data_num = log_table_p->table_id->log_index - 1;
|
}
|
|
/*·½·¨2*/
|
// if (Datecmp(start_time_bcd, new_e2p_time_bcd) <= 0) // Æðʼʱ¼ä <= ʵʱʱ¼ä
|
// {
|
// /*ÌáÈ¡³ö×îÀϵÄÒ»ÌõÊý¾ÝµÄʱ¼ä*/
|
// old_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, log_table_p->data_num);
|
// switch(para_flag)
|
// {
|
// case 0:
|
// EEPROM_MultipleRead(old_e2p_time_bcd,old_log_start_addr + SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num),6);
|
// break;
|
// case 1:
|
// case 2:
|
// case 3:
|
// EEPROM_MultipleRead(old_e2p_time_bcd,old_log_start_addr,6);
|
// break;
|
// default:break;
|
// }
|
// if (Datecmp(start_time_bcd, old_e2p_time_bcd) <= 0) // Æðʼʱ¼ä <= E2p´¢´æµÄ×îÔçʱ¼ä
|
// get_start_addr = old_log_start_addr;
|
// else
|
// {
|
// uint16_t data_num_start_2_real,start_to_real_days_diff;
|
// // Æðʼµ½ÊµÊ±Ê±¼äµÄÌìÊý²î
|
// start_to_real_days_diff = Date_DaysDifference(start_time_bcd[0], start_time_bcd[1], start_time_bcd[2], new_e2p_time_bcd[0], new_e2p_time_bcd[1], new_e2p_time_bcd[2]);
|
// /*¼ÆËãÆðʼʱ¼äÖÁµ±Ç°Ê±¼ä¹²ÓжàÉÙÌõÊý¾Ý*/
|
// switch(para_flag)
|
// {
|
// case 1:
|
// data_num_start_2_real = start_to_real_days_diff * 24 - BCD_2_HEX_U8(start_time_bcd[3]) + BCD_2_HEX_U8(new_e2p_time_bcd[3]);
|
// break;
|
// case 2:
|
// data_num_start_2_real = start_to_real_days_diff;
|
// break;
|
// case 3:
|
// data_num_start_2_real = Data_MonthsDifference(start_time_bcd[0],start_time_bcd[1],new_e2p_time_bcd[0],new_e2p_time_bcd[1]);
|
// break;
|
// default:break;
|
// }
|
// /*¼ÆËãÆðʼʱ¼äµÄµØÖ·*/
|
// get_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, data_num_start_2_real);
|
// }
|
// }
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
return get_start_addr;
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclic_StartTime_GetStartAddr
|
* description : °´¿ªÊ¼Ê±¼ä»ñµÃÊý¾Ý¿ªÊ¼µØÖ·£¨ÊÊÓÃÓÚ´¢´æÌõÊýÉÙÇÒ²»¹æÂÉ´æ´¢µÄÊý¾Ý£©
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
start_time_bcd[6]£º¿ªÊ¼Ê±¼ä
|
end_time_bcd[6]£º½áÊøÊ±¼ä
|
offset_addr£º¸ù¾Ý²»Í¬´¢´æ²ÎÊýµÄ¸ñʽÖС°Ê±¼ä¡±Êý¾ÝµÄÆ«ÒÆµØÖ·
|
* Output : *pSend_data_num : ÐèÒªÌáÈ¡Êý¾ÝµÄÌõÊý
|
* Return : start_addr:Êý¾ÝµÄÆðʼµØÖ·
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230629
|
********************************************************************/
|
uint32_t Sys_Log_E2pCyclic_StartTime_GetStartAddr(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint16_t *pSend_data_num,
|
uint8_t start_time_bcd[6],uint8_t end_time_bcd[6],uint8_t offset_addr)
|
{
|
uint8_t e2p_time_1[6] = {0};
|
uint32_t get_start_addr = 0,old_log_start_addr,new_log_start_addr;
|
int32_t addr_temp; //ÓÉÓÚÓÐ--µÄÇé¿ö»áµ¼Ö¸ºÊý£¬ËùÒÔÓÃÓзûºÅ
|
uint16_t search_num = 0;//ÐèÒª±È½ÏµÄÊý¾Ý×ܺÍ
|
uint16_t real_num = 0; //ÕæÊµÐèÒªÌáÈ¡Êý¾ÝµÄÌõÊý
|
uint16_t i;
|
int data_cmp = 0;
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
|
/*·½·¨1*/
|
old_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,log_table_p->data_num);
|
new_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,1);
|
if(old_log_start_addr == new_log_start_addr)//ÎÞÊý¾Ý or Ö»ÓÐÒ»ÌõÊý¾Ý
|
{
|
if(log_table_p->table_id->log_index == 2) //ÓÐÒ»ÌõÊý¾Ý
|
*pSend_data_num = 1;
|
else
|
*pSend_data_num = 0;
|
return new_log_start_addr;
|
}
|
uint8_t old_e2p_time_bcd[6] = {0},new_e2p_time_bcd[6];//E2P×îÀϺÍ×îеÄʱ¼äÊý¾Ý
|
/*ÓÉÓÚÊý¾Ý¸ñʽǰÁ½¸ö×Ö½ÚΪ¡°ÐòºÅ¡±ËùÒÔÒª½øÐÐÆ«ÒÆ*/
|
Out_Flash_MultipleRead(old_e2p_time_bcd, old_log_start_addr + offset_addr/*SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num)*/, 6);
|
Out_Flash_MultipleRead(new_e2p_time_bcd, new_log_start_addr + offset_addr/*SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num)*/, 6);
|
int start_2_e2p_old_time_diff,end_2_e2p_old_time_diff,
|
e2p_new_2_start_time_diff,e2p_new_2_end_time_diff;
|
start_2_e2p_old_time_diff = Datecmp(start_time_bcd,old_e2p_time_bcd);// ¿ªÊ¼Ê±¼ä ºÍ ´æ´¢µÄ×îÀÏʱ¼äµÄ ʱ¼ä²î
|
end_2_e2p_old_time_diff = Datecmp(end_time_bcd,old_e2p_time_bcd);//½áÊøÊ±¼ä ºÍ ´æ´¢×îÀϵÄʱ¼äµÄ ʱ¼ä²î
|
e2p_new_2_start_time_diff = Datecmp(new_e2p_time_bcd,start_time_bcd);// ´æ´¢×îÐÂʱ¼ä ºÍ ¿ªÊ¼Ê±¼äµÄ ʱ¼ä²î
|
e2p_new_2_end_time_diff = Datecmp(new_e2p_time_bcd,end_time_bcd);//´¢´æ×îÐÂʱ¼ä ºÍ ½áÊøÊ±¼äµÄ ʱ¼ä²î
|
if(end_2_e2p_old_time_diff <= 0 || e2p_new_2_start_time_diff <= 0)//²»ÔÚ´¢´æÊ±¼ä·¶Î§
|
{
|
/*½oÒ»¸ö¶ÁÈ¡µÄ×î´óÌõÊý*/
|
if(log_table_p->table_id->log_index >= 20 || log_table_p->table_id->log_cyclic_full_cnt)
|
*pSend_data_num = 20;
|
else
|
*pSend_data_num = log_table_p->table_id->log_index - 1;
|
/*¼ÆËãÆðʼʱ¼äµÄµØÖ·*/
|
get_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, *pSend_data_num);
|
}else
|
{
|
if(log_table_p->table_id->log_cyclic_full_cnt)
|
search_num = log_table_p->data_num;
|
else
|
search_num = log_table_p->table_id->log_index - 1;
|
if(start_2_e2p_old_time_diff <= 0) // Æðʼʱ¼ä <= E2p´¢´æµÄ×îÔçʱ¼ä
|
{
|
get_start_addr = old_log_start_addr;
|
if(e2p_new_2_end_time_diff <= 0) //E2p´¢´æµÄ×îÐÂʱ¼ä <= ½áÊøÊ±¼ä
|
{
|
if(log_table_p->table_id->log_cyclic_full_cnt) //»·Ð´Âú
|
*pSend_data_num = log_table_p->data_num;
|
else
|
*pSend_data_num = log_table_p->table_id->log_index - 1;
|
}
|
else //E2p´¢´æµÄ×îÐÂʱ¼ä > ½áÊøÊ±¼ä
|
{
|
addr_temp = get_start_addr;
|
for(i = 0;i < search_num;i++)
|
{
|
Out_Flash_MultipleRead(e2p_time_1,addr_temp + offset_addr,6);
|
data_cmp = Datecmp(e2p_time_1,end_time_bcd);
|
if(data_cmp <= 0) //e2pµÄʱ¼ä <= ½áÊøÊ±¼ä
|
real_num++;
|
else
|
{
|
*pSend_data_num = real_num;
|
break;
|
}
|
addr_temp += log_table_p->data_size;
|
if(addr_temp >= log_table_p->table_id->log_end_addr)
|
addr_temp = log_table_p->table_id->log_start_addr;
|
}
|
}
|
}else
|
{
|
addr_temp = new_log_start_addr;
|
for(i = 0;i < search_num;i++)
|
{
|
Out_Flash_MultipleRead(e2p_time_1,addr_temp + offset_addr,6);
|
data_cmp = Datecmp(e2p_time_1,start_time_bcd);
|
if(data_cmp >= 0) //e2pµÄʱ¼ä >= ¿ªÊ¼Ê±¼ä
|
real_num++;
|
else
|
{
|
*pSend_data_num = real_num;
|
addr_temp += log_table_p->data_size;
|
if(addr_temp >= log_table_p->table_id->log_end_addr)
|
addr_temp = log_table_p->table_id->log_start_addr;
|
get_start_addr = addr_temp;
|
break;
|
}
|
addr_temp -= log_table_p->data_size;
|
if(addr_temp <= log_table_p->table_id->log_start_addr)
|
addr_temp = log_table_p->table_id->log_end_addr - log_table_p->data_size;
|
}
|
if(e2p_new_2_end_time_diff > 0) //E2p´¢´æµÄ×îÐÂʱ¼ä > ½áÊøÊ±¼ä
|
{
|
real_num = 0;
|
for(i = 0;i < search_num;i++)
|
{
|
Out_Flash_MultipleRead(e2p_time_1,addr_temp + offset_addr,6);
|
data_cmp = Datecmp(e2p_time_1,end_time_bcd);
|
if(data_cmp <= 0) //e2pµÄʱ¼ä <= ½áÊøÊ±¼ä
|
real_num++;
|
else
|
{
|
*pSend_data_num = real_num;
|
break;
|
}
|
addr_temp += log_table_p->data_size;
|
if(addr_temp >= log_table_p->table_id->log_end_addr)
|
addr_temp = log_table_p->table_id->log_start_addr;
|
}
|
}
|
}
|
}
|
/*·½·¨2*/
|
// if(log_table_p->table_id->log_cyclic_full_cnt) //ÅжÏÊÇ·ñдÂúÒ»ÂÖ
|
// search_num = log_table_p->data_num;
|
// else
|
// search_num = log_table_p->table_id->log_index;
|
// old_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,log_table_p->data_num);
|
// last_log_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p,1);
|
// /*ÓÉÓÚÊý¾Ý¸ñʽǰÁ½¸ö×Ö½ÚΪ¡°ÐòºÅ¡±ËùÒÔÒª½øÐÐÆ«ÒÆ*/
|
// EEPROM_MultipleRead(e2p_time_1, old_log_start_addr + offset_addr/*SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num)*/, 6);
|
// EEPROM_MultipleRead(e2p_time_2, last_log_start_addr + offset_addr/*SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num)*/, 6);
|
// data_cmp1 = Datecmp(start_time_bcd,e2p_time_1);
|
// data_cmp2 = Datecmp(start_time_bcd,e2p_time_2);
|
// if(data_cmp1 <= 0) //ѰÕÒµÄʱ¼ä±È¼Ç¼µÄµÚÒ»¸öʱ¼äÔç
|
// get_start_addr = old_log_start_addr;
|
// else if(data_cmp2 > 0) //ѰÕÒµÄʱ¼ä±È×îºó¼Ç¼µÄʱ¼äÍí
|
// {}
|
// else
|
// {
|
// uint32_t addr_a,addr_b;
|
// for(uint8_t i = 0; i < (search_num - 1);i++)
|
// {
|
// if((old_log_start_addr + log_table_p->data_size) >= log_table_p->table_id->log_end_addr)
|
// {
|
// addr_a = log_table_p->table_id->log_end_addr - log_table_p->data_size;
|
// addr_b = log_table_p->table_id->log_start_addr;
|
// }
|
// else
|
// {
|
// addr_a = old_log_start_addr + (i * log_table_p->data_size);
|
// addr_b = addr_a + log_table_p->data_size;
|
// }
|
//
|
// EEPROM_MultipleRead(e2p_time_1,addr_a + SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num),6);
|
// EEPROM_MultipleRead(e2p_time_2,addr_b + SIZEOF_OF(VALVE_SYSLOG_FORMAT_T,record_num),6);
|
// data_cmp1 = Datecmp(e2p_time_1,start_time_bcd);
|
// data_cmp2 = Datecmp(e2p_time_2,start_time_bcd);
|
// if((data_cmp1 <= 0) && (data_cmp2 >= 0)) //µÚÒ»¸öʱ¼ä±ÈѰÕÒµÄʱ¼äÔ磬µÚ¶þ¸öʱ¼ä±ÈѰÕÒµÄʱ¼äÍí
|
// get_start_addr = addr_b;
|
// }
|
// }
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
return get_start_addr;
|
}
|
|
/********************************************************************
|
* name : Sys_Log_E2pCyclicRead_1_Data
|
* description : ¶ÁÊý¾Ýµ¥´Î
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
read_addr: ¶ÁÊý¾ÝµÄµØÖ·
|
* Output : pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
* Return : next_read_addr£ºÏÂÒ»×éÊý¾ÝµÄ¶ÁÈ¡µØÖ·
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
********************************************************************/
|
uint32_t Sys_Log_E2pCyclicRead_1_Data(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pOutput,uint32_t read_addr)
|
{
|
uint32_t next_read_addr = 0;
|
E2P_PWR_ON; // ¿ªÆôE2pµçÔ´
|
Out_Flash_MultipleRead(pOutput,read_addr,log_table_p->data_size);
|
next_read_addr = read_addr + log_table_p->data_size;
|
if(next_read_addr >= log_table_p->table_id->log_end_addr)
|
next_read_addr = log_table_p->table_id->log_start_addr;
|
E2P_PWR_OFF; // ¹Ø±ÕE2pµçÔ´
|
return next_read_addr;
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclicMultipleReverseRead
|
* description : ÒÔ×îд洢Êý¾ÝΪ¿ªÊ¼£¬µ¹Ðò¶ÁÊý¾Ý¶à´Î
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
back_read_cnt: ÐèÒª¶ÁÈ¡µÄÌõÊý
|
* Output : pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
* Return :
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
********************************************************************/
|
void Sys_Log_E2pCyclicMultipleReverseRead(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pOutput, uint16_t back_read_cnt)
|
{
|
uint32_t read_start_addr = 0;
|
for (uint16_t i = 0; i < back_read_cnt; i++)
|
{
|
read_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, i + 1);
|
Sys_Log_E2pCyclicRead_1_Data(log_table_p,&pOutput[i * log_table_p->data_size],read_start_addr);
|
}
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclicMultiplePositiveRead
|
* description : ÒÔ×îд洢Êý¾ÝΪ»ùµã£¬ÍË»Øforward_read_cntÌõÊý¾Ý£¬ÕýÐò¶ÁÊý¾Ýdata_cnt´Î
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
forward_read_cnt: ÐèÒªÏòǰÍ˻صÄÌõÊý
|
data_cnt: ÐèÒª¶ÁÈ¡µÄÌõÊý
|
* Output : pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
* Return :
|
ÊÇ·ñÕý³££ºÕý³££¬²âÊÔʱ¼ä230407
|
********************************************************************/
|
void Sys_Log_E2pCyclicMultiplePositiveRead(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pOutput,
|
uint16_t forward_read_cnt,uint16_t data_cnt)
|
{
|
uint32_t read_start_addr = 0;
|
read_start_addr = Sys_Log_E2pCyclic_ReverseGetStartAddr(log_table_p, forward_read_cnt);
|
for (uint16_t i = 0; i < data_cnt; i++)
|
read_start_addr = Sys_Log_E2pCyclicRead_1_Data(log_table_p,&pOutput[i * log_table_p->data_size],read_start_addr);
|
}
|
/********************************************************************
|
* name : Sys_Log_E2pCyclicMultiplePositiveRead_2
|
* description : ÕýÐò¶ÁÊý¾Ýcnt´Î
|
* Input : *log_table_p£ºÈÕÖ¾±íÖ¸Õë
|
addr £ºÊý¾ÝµØÖ·
|
cnt £ºÕýÐò¶ÁµÄÌõÊý
|
* Output : pOutput £º¾ßÌåµÄÊä³öÊý¾ÝÄÚÈÝ
|
* Return :
|
ÊÇ·ñÕý³££º
|
********************************************************************/
|
void Sys_Log_E2pCyclicMultiplePositiveRead_2(const SYSLOG_CYCLIC_TABLE_T *log_table_p, uint8_t *pOutput, uint32_t addr,uint16_t cnt)
|
{
|
for (uint16_t i = 0; i < cnt; i++)
|
addr = Sys_Log_E2pCyclicRead_1_Data(log_table_p,&pOutput[i * log_table_p->data_size],addr);
|
}
|
|
/*°´Ê±¼äÇø¼äµ¹Ðð¶Á*/
|
|
/*°´Ê±¼äÇø¼äÕýÐò¶Á*/
|
|
|
|
|
|
|
/*»·Ð´ÈÕÖ¾µØÖ·³õʼ»¯£¨ÓÉÓÚFlashµÄ¶Áд´ÎÊýÏÞÖÆ£¬²ÎÊý´æ´¢ÔÚE2PÖУ©
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼A¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª> | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼B¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
* | | | | |
|
* | <¡ª¡ª¡ªÊý¾ÝË÷Òý¡ª¡ª¡ª> | <¡ª¡ª¡ª»·Ð´ÂúCNT¡ª¡ª¡ª> | <¡ª¡ª¡ªÊý¾ÝË÷Òý¡ª¡ª¡ª> | <¡ª¡ª¡ª»·Ð´ÂúCNT¡ª¡ª¡ª> |
|
* | | | | |
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼´æ´¢ÏßÐÔ¸ñʽ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
* Flash»·Ð´ÈÕÖ¾Êý¾Ý¸ñʽ
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼A¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª¡ª> | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼B¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
* | | | | | | |
|
* | <¡ªÊý¾ÝÄÚÈÝ1¡ª> | <¡ªÊý¾ÝÄÚÈÝ2¡ª> | <¡ªÊý¾ÝÄÚÈÝ3¡ª> | <¡ªÊý¾ÝÄÚÈÝ1¡ª> | <¡ªÊý¾ÝÄÚÈÝ2¡ª> | <¡ªÊý¾ÝÄÚÈÝ3¡ª> |
|
* | | | | | | |
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÊý¾ÝÑ»·¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª¡ª¡ª> | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÊý¾ÝÑ»·¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª¡ª¡ª> |
|
* | <¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ªÀúÊ·¼Ç¼´æ´¢ÏßÐÔ¸ñʽ¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª-¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª¡ª> |
|
*/
|
void Sys_Log_E2pCyclicAddrInit(void)
|
{
|
uint32_t log_cyclic_para_addr = CYCLIC_PARA_STORAGE_START_ADDR;
|
uint32_t log_flash_start_addr = CYCLIC_STORAGE_START_ADDR;
|
/*Ë÷Òý »·Ð´Âú±ê־λ µØÖ·³õʼ»¯*/
|
sys_log_cyclic_table[0].table_id->log_index_addr = log_cyclic_para_addr;
|
sys_log_cyclic_table[0].table_id->log_full_cnt_addr = sys_log_cyclic_table[0].table_id->log_index_addr + CYCLIC_INDEX_OFFSET;
|
|
sys_log_cyclic_table[0].table_id->log_start_addr = log_flash_start_addr;
|
sys_log_cyclic_table[0].table_id->log_end_addr = sys_log_cyclic_table[0].table_id->log_start_addr + sys_log_cyclic_table[0].data_size * sys_log_cyclic_table[0].data_num;
|
|
for (uint8_t i = 1; i < SYS_LOG_CYCLIC_TABLE_NUM; i++)
|
{
|
sys_log_cyclic_table[i].table_id->log_index_addr = sys_log_cyclic_table[i - 1].table_id->log_full_cnt_addr + 1;
|
sys_log_cyclic_table[i].table_id->log_full_cnt_addr = sys_log_cyclic_table[i].table_id->log_index_addr + CYCLIC_INDEX_OFFSET;
|
|
//½áÊøµØÖ·¾ÍÊÇÏÂÒ»¸ö²ÎÊýµÄ¿ªÊ¼µØÖ·
|
sys_log_cyclic_table[i].table_id->log_start_addr = sys_log_cyclic_table[i - 1].table_id->log_end_addr;
|
sys_log_cyclic_table[i].table_id->log_end_addr = sys_log_cyclic_table[i].table_id->log_start_addr + sys_log_cyclic_table[i].data_size * sys_log_cyclic_table[i].data_num;
|
}
|
}
|
|
void Sys_Log_E2pCyclic_FirstPower_FlagInit(void)
|
{
|
E2P_PWR_ON;
|
for(uint8_t i = 0;i < SYS_LOG_CYCLIC_TABLE_NUM;i++)
|
{
|
sys_log_cyclic_table[i].table_id->log_index = 1; // »Ö¸´Ä¬ÈÏÖµ
|
sys_log_cyclic_table[i].table_id->log_cyclic_full_cnt = 0;
|
|
FM25V02_data_write_uint16(sys_log_cyclic_table[i].table_id->log_index_addr,sys_log_cyclic_table[i].table_id->log_index);
|
FM25V02_data_write(sys_log_cyclic_table[i].table_id->log_cyclic_full_cnt,sys_log_cyclic_table[i].table_id->log_full_cnt_addr);
|
}
|
}
|
void Sys_Log_E2pCyclic_NoFirstPower_FlagInit(void)
|
{
|
E2P_PWR_ON;
|
for(uint8_t i = 0;i < SYS_LOG_CYCLIC_TABLE_NUM;i++)
|
{
|
sys_log_cyclic_table[i].table_id->log_index = FM25V02_data_read_uint16(sys_log_cyclic_table[i].table_id->log_index_addr);
|
sys_log_cyclic_table[i].table_id->log_cyclic_full_cnt = FM25V02_data_read(sys_log_cyclic_table[i].table_id->log_full_cnt_addr);
|
|
if(sys_log_cyclic_table[i].table_id->log_index >= (sys_log_cyclic_table[i].data_num + 1))
|
{
|
sys_log_cyclic_table[i].table_id->log_index = 1;
|
FM25V02_data_write_uint16(sys_log_cyclic_table[i].table_id->log_index_addr,sys_log_cyclic_table[i].table_id->log_index);
|
}
|
}
|
}
|