更新:

1、mux任务调整,开机动画结束后再启动,否则会与其他任务的初始化冲突;
2、EEPROM的读取新增异常数据检测与处理;
This commit is contained in:
吴俊潮 2025-06-25 15:57:14 +08:00
parent 53358b12c6
commit 88c0dbc6e3
7 changed files with 22452 additions and 18728 deletions

View File

@ -116,12 +116,11 @@ float result = 0;
} }
else else
{ {
curma_out_cal_enable = 2; //存在校准数据
// //存在校准数据 curma_out_cal_enable = 1;
// curma_out_cal_enable = 1;
// //将读到的数据存储至cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS] //将读到的数据存储至cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS]
// eeprom_dataread_single(EEPROM_TAG_CAL_CUR_MA_OUT); eeprom_dataread_single(EEPROM_TAG_CAL_CUR_MA_OUT);
} }
} }
break; break;

View File

@ -46,6 +46,7 @@ typedef struct dac8552_object
extern dac8552x_object dac8552; extern dac8552x_object dac8552;
extern float cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS]; extern float cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS];
extern uint8_t curma_out_cal_enable;
void dac8552_init(dac8552x_object *dac, dac8552_write write, dac8552_chip_select cs); void dac8552_init(dac8552x_object *dac, dac8552_write write, dac8552_chip_select cs);
void dac8552_operation(float32 *data1, float32 *data2); void dac8552_operation(float32 *data1, float32 *data2);

View File

@ -629,54 +629,68 @@ void eeprom_datasave_single(uint8_t tag)
void eeprom_dataread(void) void eeprom_dataread(void)
{ {
uint8_t temp_h = 0, temp_l = 0; uint8_t temp_h = 0, temp_l = 0;
uint16_t temp_w = 0;
//VOL V //VOL V
temp_h = eeprom_readdata(VOL_V_UP_ADDR); temp_h = eeprom_readdata(VOL_V_UP_ADDR);
temp_l = eeprom_readdata(VOL_V_UP_ADDR + 8); temp_l = eeprom_readdata(VOL_V_UP_ADDR + 8);
tabdata.item0_page0_vup[0] = ( temp_h << 8 ) + temp_l; tabdata.item0_page0_vup[0] = ( temp_h << 8 ) + temp_l;
//数据异常时使用默认值
if( (tabdata.item0_page0_vup[0] > VOL[0].up)||(tabdata.item0_page0_vup[0] < VOL[0].low) ) tabdata.item0_page0_vup[0] = VOL[0].up;
temp_h = eeprom_readdata(VOL_V_LOW_ADDR); temp_h = eeprom_readdata(VOL_V_LOW_ADDR);
temp_l = eeprom_readdata(VOL_V_LOW_ADDR + 8); temp_l = eeprom_readdata(VOL_V_LOW_ADDR + 8);
tabdata.item0_page0_vlow[0] = ( temp_h << 8 ) + temp_l; tabdata.item0_page0_vlow[0] = ( temp_h << 8 ) + temp_l;
//数据异常时使用默认值
if( (tabdata.item0_page0_vlow[0] > VOL[0].up)||(tabdata.item0_page0_vlow[0] < VOL[0].low) ) tabdata.item0_page0_vlow[0] = VOL[0].low;
//出现错误后,提前返回 //出现错误后,提前返回(连续四个字节不出错,直接读到最后)
//该错误仅能表示超时,无法表示数据异常
if(system_sts.eeprom_read_error) return; if(system_sts.eeprom_read_error) return;
//VOL mV //VOL mV
temp_h = eeprom_readdata(VOL_MV_UP_ADDR); temp_h = eeprom_readdata(VOL_MV_UP_ADDR);
temp_l = eeprom_readdata(VOL_MV_UP_ADDR + 8); temp_l = eeprom_readdata(VOL_MV_UP_ADDR + 8);
tabdata.item0_page0_vup[1] = ( temp_h << 8 ) + temp_l; tabdata.item0_page0_vup[1] = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page0_vup[1] > VOL[1].up)||(tabdata.item0_page0_vup[1] < VOL[1].low) ) tabdata.item0_page0_vup[0] = VOL[1].up;
temp_h = eeprom_readdata(VOL_MV_LOW_ADDR); temp_h = eeprom_readdata(VOL_MV_LOW_ADDR);
temp_l = eeprom_readdata(VOL_MV_LOW_ADDR + 8); temp_l = eeprom_readdata(VOL_MV_LOW_ADDR + 8);
tabdata.item0_page0_vlow[1] = ( temp_h << 8 ) + temp_l; tabdata.item0_page0_vlow[1] = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page0_vlow[1] > VOL[1].up)||(tabdata.item0_page0_vlow[1] < VOL[1].low) ) tabdata.item0_page0_vlow[0] = VOL[1].low;
//CUR //CUR
//temp_h = eeprom_readdata(CUR_UP_ADDR); //temp_h = eeprom_readdata(CUR_UP_ADDR);
temp_l = eeprom_readdata(CUR_UP_ADDR + 8); temp_l = eeprom_readdata(CUR_UP_ADDR + 8);
tabdata.item0_page0_cup = temp_l; tabdata.item0_page0_cup = temp_l;
if( (tabdata.item0_page0_cup > CUR.up)||(tabdata.item0_page0_cup < CUR.low) ) tabdata.item0_page0_cup = CUR.up;
//temp_h = eeprom_readdata(CUR_LOW_ADDR); //temp_h = eeprom_readdata(CUR_LOW_ADDR);
temp_l = eeprom_readdata(CUR_LOW_ADDR + 8); temp_l = eeprom_readdata(CUR_LOW_ADDR + 8);
tabdata.item0_page0_clow = temp_l; tabdata.item0_page0_clow = temp_l;
if( (tabdata.item0_page0_clow > CUR.up)||(tabdata.item0_page0_clow < CUR.low) ) tabdata.item0_page0_clow = CUR.low;
//RES //RES
temp_h = eeprom_readdata(RES_UP_ADDR); temp_h = eeprom_readdata(RES_UP_ADDR);
temp_l = eeprom_readdata(RES_UP_ADDR + 8); temp_l = eeprom_readdata(RES_UP_ADDR + 8);
tabdata.item0_page0_rup = ( temp_h << 8 ) + temp_l; tabdata.item0_page0_rup = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page0_rup > RES.up)||(tabdata.item0_page0_rup < RES.low) ) tabdata.item0_page0_rup = RES.up;
temp_h = eeprom_readdata(RES_LOW_ADDR); temp_h = eeprom_readdata(RES_LOW_ADDR);
temp_l = eeprom_readdata(RES_LOW_ADDR + 8); temp_l = eeprom_readdata(RES_LOW_ADDR + 8);
tabdata.item0_page1_rlow = ( temp_h << 8 ) + temp_l; tabdata.item0_page1_rlow = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page1_rlow > RES.up)||(tabdata.item0_page1_rlow < RES.low) ) tabdata.item0_page1_rlow = RES.low;
//FRE //FRE
//temp_h = eeprom_readdata(FRE_UP_ADDR); //temp_h = eeprom_readdata(FRE_UP_ADDR);
temp_l = eeprom_readdata(FRE_UP_ADDR + 8); temp_l = eeprom_readdata(FRE_UP_ADDR + 8);
tabdata.item0_page1_fup = temp_l; tabdata.item0_page1_fup = temp_l;
if( (tabdata.item0_page1_fup > FRE.up)||(tabdata.item0_page1_fup < FRE.low) ) tabdata.item0_page1_fup = FRE.up;
//temp_h = eeprom_readdata(FRE_LOW_ADDR); //temp_h = eeprom_readdata(FRE_LOW_ADDR);
temp_l = eeprom_readdata(FRE_LOW_ADDR + 8); temp_l = eeprom_readdata(FRE_LOW_ADDR + 8);
tabdata.item0_page1_flow = temp_l; tabdata.item0_page1_flow = temp_l;
if( (tabdata.item0_page1_flow > FRE.up)||(tabdata.item0_page1_flow < FRE.low) ) tabdata.item0_page1_flow = FRE.low;
//TC K //TC K
temp_h = eeprom_readdata(TC_K_UP_ADDR); temp_h = eeprom_readdata(TC_K_UP_ADDR);
@ -750,39 +764,55 @@ void eeprom_dataread(void)
temp_l = eeprom_readdata(TC_T_LOW_ADDR + 8); temp_l = eeprom_readdata(TC_T_LOW_ADDR + 8);
tabdata.item0_page1_TClow[7] = ( temp_h << 8 ) + temp_l; tabdata.item0_page1_TClow[7] = ( temp_h << 8 ) + temp_l;
for(uint8_t i = 0; i < 8; i++)
{
if( (tabdata.item0_page1_TCup[i] > TC[i].up)||(tabdata.item0_page1_TCup[i] < TC[i].low) ) tabdata.item0_page1_TCup[i] = TC[i].up;
if( (tabdata.item0_page1_TClow[i] > TC[i].up)||(tabdata.item0_page1_TClow[i] < TC[i].low) ) tabdata.item0_page1_TClow[i] = TC[i].low;
}
//RTD //RTD
temp_h = eeprom_readdata(RTD_UP_ADDR); temp_h = eeprom_readdata(RTD_UP_ADDR);
temp_l = eeprom_readdata(RTD_UP_ADDR + 8); temp_l = eeprom_readdata(RTD_UP_ADDR + 8);
tabdata.item0_page2_RTDup = ( temp_h << 8 ) + temp_l; tabdata.item0_page2_RTDup = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page2_RTDup > RTD.up)||(tabdata.item0_page2_RTDup < RTD.low) ) tabdata.item0_page2_RTDup = RTD.up;
temp_h = eeprom_readdata(RTD_LOW_ADDR); temp_h = eeprom_readdata(RTD_LOW_ADDR);
temp_l = eeprom_readdata(RTD_LOW_ADDR + 8); temp_l = eeprom_readdata(RTD_LOW_ADDR + 8);
tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l; tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l;
if( (tabdata.item0_page2_RTDlow > RTD.up)||(tabdata.item0_page2_RTDlow < RTD.low) ) tabdata.item0_page2_RTDlow = RTD.low;
//采样间隔 //采样间隔
temp_h = eeprom_readdata(SAMPLE_INTERVAL_ADDR); temp_h = eeprom_readdata(SAMPLE_INTERVAL_ADDR);
temp_l = eeprom_readdata(SAMPLE_INTERVAL_ADDR + 8); temp_l = eeprom_readdata(SAMPLE_INTERVAL_ADDR + 8);
tabdata.item1_page0_sample_interval = ( temp_h << 8 ) + temp_l; tabdata.item1_page0_sample_interval = ( temp_h << 8 ) + temp_l;
if( (tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX)||(tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD) ) tabdata.item1_page0_sample_interval = 1000;
//描点数量 //描点数量
temp_h = eeprom_readdata(PLOT_COUNT_ADDR); temp_h = eeprom_readdata(PLOT_COUNT_ADDR);
temp_l = eeprom_readdata(PLOT_COUNT_ADDR + 8); temp_l = eeprom_readdata(PLOT_COUNT_ADDR + 8);
tabdata.item1_page0_plot_num = ( temp_h << 8 ) + temp_l; tabdata.item1_page0_plot_num = ( temp_h << 8 ) + temp_l;
if( (tabdata.item1_page0_plot_num > PLOT_NUM_MAX)||(tabdata.item1_page0_plot_num < PLOT_NUM_MIN) ) tabdata.item1_page0_plot_num = 10;
//输入曲线颜色 //输入曲线颜色
temp_h = eeprom_readdata(INPUT_COLOR_ADDR); temp_h = eeprom_readdata(INPUT_COLOR_ADDR);
temp_l = eeprom_readdata(INPUT_COLOR_ADDR + 8); temp_l = eeprom_readdata(INPUT_COLOR_ADDR + 8);
tabdata.item1_page0_color_input = (COLORS)( ( temp_h << 8 ) + temp_l ); temp_w = ( temp_h << 8 ) + temp_l;
if(temp_w > 5) temp_w = 0;
tabdata.item1_page0_color_input = (COLORS)temp_w;
//输出曲线颜色 //输出曲线颜色
temp_h = eeprom_readdata(OUTPUT_COLOR_ADDR); temp_h = eeprom_readdata(OUTPUT_COLOR_ADDR);
temp_l = eeprom_readdata(OUTPUT_COLOR_ADDR + 8); temp_l = eeprom_readdata(OUTPUT_COLOR_ADDR + 8);
tabdata.item1_page0_color_output = (COLORS)( ( temp_h << 8 ) + temp_l ); temp_w = ( temp_h << 8 ) + temp_l;
if(temp_w > 5) temp_w = 1;
tabdata.item1_page0_color_output = (COLORS)temp_w;
//语言选择 //语言选择
temp_h = eeprom_readdata(LANGUAGE_SELECT_ADDR); temp_h = eeprom_readdata(LANGUAGE_SELECT_ADDR);
temp_l = eeprom_readdata(LANGUAGE_SELECT_ADDR + 8); temp_l = eeprom_readdata(LANGUAGE_SELECT_ADDR + 8);
tabdata.item3_page0_language = (LANGUAGES)( ( temp_h << 8 ) + temp_l ); temp_w = ( temp_h << 8 ) + temp_l;
if(temp_w > 1) temp_w = 0;
tabdata.item3_page0_language = (LANGUAGES)temp_w;
} }
//读取指定数据 //读取指定数据
@ -792,6 +822,7 @@ void eeprom_dataread_single(uint8_t tag)
//32bits: h --- mh --- ml --- l //32bits: h --- mh --- ml --- l
uint8_t temp_h = 0, temp_l = 0; uint8_t temp_h = 0, temp_l = 0;
uint8_t temp_mh = 0, temp_ml = 0; uint8_t temp_mh = 0, temp_ml = 0;
float error_check = 0;
switch (tag) switch (tag)
{ {
@ -806,6 +837,14 @@ void eeprom_dataread_single(uint8_t tag)
temp_ml = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 16); temp_ml = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 16);
temp_l = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 24); temp_l = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 24);
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l); flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
memcpy(&error_check, flt + i, 4);
if( ((int16_t)error_check > CUR.up)||((int16_t)error_check < CUR.low) )
{
//任意一个点异常,随即退出,不启用校准
curma_out_cal_enable = 2;
return;
}
} }
memcpy(cur_ma_out_calibrate_table, flt, sizeof(cur_ma_out_calibrate_table)); memcpy(cur_ma_out_calibrate_table, flt, sizeof(cur_ma_out_calibrate_table));
@ -823,6 +862,14 @@ void eeprom_dataread_single(uint8_t tag)
temp_ml = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 16); temp_ml = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 16);
temp_l = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 24); temp_l = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 24);
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l); flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
memcpy(&error_check, flt + i, 4);
if( ((int16_t)error_check > VOL[0].up)||((int16_t)error_check < VOL[0].low) )
{
//任意一个点异常,随即退出,不启用校准
volv_out_cal_enable = 2;
return;
}
} }
memcpy(vol_v_out_calibrate_table, flt, sizeof(vol_v_out_calibrate_table)); memcpy(vol_v_out_calibrate_table, flt, sizeof(vol_v_out_calibrate_table));

View File

@ -49,6 +49,7 @@ void MX_DAC_Init(void);
float calibrate_vol_v(float raw); float calibrate_vol_v(float raw);
extern float vol_v_out_calibrate_table[CALIBRATE_VOL_V_OUT_POINTS]; extern float vol_v_out_calibrate_table[CALIBRATE_VOL_V_OUT_POINTS];
extern uint8_t volv_out_cal_enable;
/* USER CODE END Prototypes */ /* USER CODE END Prototypes */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -330,6 +330,9 @@ void start_mux_analog(void const * argument)
SIG24130_Init(); //多路输入输出初始化 SIG24130_Init(); //多路输入输出初始化
/* Infinite loop */ /* Infinite loop */
for (;;) for (;;)
{
//开机动画结束后再执行
if(menu_data.scr_init_flag == 1)
{ {
//编程输出过程,放在此处实时性更好 //编程输出过程,放在此处实时性更好
if(progout_data.process == PROGOUT_RUNNING) if(progout_data.process == PROGOUT_RUNNING)
@ -361,6 +364,7 @@ void start_mux_analog(void const * argument)
//处理校准事件 //处理校准事件
deal_calibrate_affair(); deal_calibrate_affair();
}
//内存、内存碎片、CPU占用监控 //内存、内存碎片、CPU占用监控
my_monitor_cnt++; my_monitor_cnt++;

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff