From cbbb2af2986863f837e06c0d7c206052bde58974 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Mon, 16 Oct 2023 18:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=87=AA=E5=8A=A8=E6=9B=B4?= =?UTF-8?q?=E6=96=B0bootloader=E6=AD=BB=E6=9C=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20=E8=BD=AF=E4=BB=B6=E7=89=88=E6=9C=AC2.00=20?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=A3=80=E6=B5=8B=E4=BB=BB=E5=8A=A1=E4=B8=AD?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E5=A4=B1=E8=B4=A5=E5=90=8E=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=A1=AB=E5=85=85=E8=BF=94=E5=9B=9E=E5=80=BC=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checher_slave.uvoptx | 36 ++--- checher_slave.uvprojx | 206 +++++++++++++++++++++++- source/ReadMe.txt | 1 + source/elec_det/base/define.h | 4 +- source/elec_det/driver/EWDriver.c | 8 +- source/elec_det/driver/JQDriver.c | 18 +-- source/elec_det/driver/JQDriver.h | 12 +- source/elec_det/driver/XTDriver.c | 10 +- source/elec_det/driver/XTDriver.h | 4 +- source/elec_det/elec_det.c | 21 ++- source/elec_det/hardware/adc_cfg.c | 10 +- source/elec_det/hardware/dac_cfg.c | 30 ++-- source/elec_det/hardware/hardware.c | 6 +- source/elec_det/hardware/power.c | 32 ++-- source/elec_det/hardware/timer_cfg.c | 4 +- source/elec_det/interface/BaseChecker.c | 2 +- source/elec_det/interface/BaseChecker.h | 2 +- source/elec_det/interface/JQChecker.c | 2 +- source/elec_det/interface/XTChecker.c | 2 +- source/main/compiler_info.h | 2 +- source/task/tran_for_slave.c | 35 +++- 21 files changed, 337 insertions(+), 110 deletions(-) diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index a7883c3..8a9c3ec 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -459,6 +459,12 @@ + + + System Viewer\DAC + 35905 + + 1 1 @@ -601,41 +607,19 @@ - - - 0 - 0 - 44 - 1 -
134325998
- 0 - 0 - 0 - 0 - 0 - 1 - .\source\main\main.c - - \\checker_slave_app\source/main/main.c\44 -
-
+ 0 1 g_tempptr - - 1 - 1 - g_self - 1 - 1 - 0x20000000 + 0 + uid_psw 0 @@ -1753,7 +1737,7 @@ soft - 0 + 1 0 0 0 diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index c63eddb..a6deba6 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -2932,7 +2932,7 @@ 1 - 4 + 1 0 0 1 @@ -3449,21 +3449,225 @@ EW_TestUsartApp.c 1 .\source\elec_det\test\EW_TestUsartApp.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + EWCheckerTest.c 1 .\source\elec_det\test\EWCheckerTest.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + Test.c 1 .\source\elec_det\test\Test.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + XTCheckerTest.c 1 .\source\elec_det\test\XTCheckerTest.c + + + 2 + 0 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + elec_cmd.c diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 15bc99f..3a23b50 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -215,4 +215,5 @@ 2023.10.16 解决自动更新bootloader死机的问题 软件版本2.00 + 解决检测任务中重试失败后不会填充返回值的bug diff --git a/source/elec_det/base/define.h b/source/elec_det/base/define.h index 0204db9..e501666 100644 --- a/source/elec_det/base/define.h +++ b/source/elec_det/base/define.h @@ -124,8 +124,8 @@ typedef struct { #pragma pack() -extern BoartCheck_st board_st; -extern BoardInfo_un boardinfo_un; +extern volatile BoartCheck_st board_st; +extern volatile BoardInfo_un boardinfo_un; //检测小板初始化 void Ye_BoardInit(void); diff --git a/source/elec_det/driver/EWDriver.c b/source/elec_det/driver/EWDriver.c index 047fe19..c347fa2 100644 --- a/source/elec_det/driver/EWDriver.c +++ b/source/elec_det/driver/EWDriver.c @@ -24,14 +24,14 @@ static volatile uint16_t SMod_Read_Idle_C; static uint16_t firebus_idle_diff = SMod_Read_Idle_Filter; const static uint16_t data2bit_signal[]={200,234,275,323,380,446}; -static uint16_t datapulus[6][2]; +volatile static uint16_t datapulus[6][2]; //发送起始信号 #define SMod_Begin_Plus() SMod_2Bit_Plus(4) //发送结束信号 #define SMod_End_Plus() SMod_2Bit_Plus(5) -uint8_t EW_CommBuf[EW_DMODE_FRAME_SIZE]; -uint16_t EW_DMOD_Peroid = 300; -uint16_t EW_DMOD_READ_Timeout = 6000; +volatile uint8_t EW_CommBuf[EW_DMODE_FRAME_SIZE]; +volatile uint16_t EW_DMOD_Peroid = 300; +volatile uint16_t EW_DMOD_READ_Timeout = 6000; //发送唤醒信号 static void SMod_Wake_Plus(void) { diff --git a/source/elec_det/driver/JQDriver.c b/source/elec_det/driver/JQDriver.c index 74a74b7..a4f9949 100644 --- a/source/elec_det/driver/JQDriver.c +++ b/source/elec_det/driver/JQDriver.c @@ -5,7 +5,7 @@ #include "hardware/power.h" #include "hardware/timer_cfg.h" #include "hardware/power.h" -static uint16_t jq_idle_current; +volatile static uint16_t jq_idle_current; #define JQ_IDLE_NOISE 100 @@ -14,19 +14,19 @@ static uint16_t jq_idle_current; #else volatile uint16_t* JQ_Read_AD_V = FireBus_ADC_Buf; #endif -static uint16_t jq_ad_last_sample; +volatile static uint16_t jq_ad_last_sample; static volatile CurrentSample_Range_eu buscurrent_range = Current_Max; -uint16_t JQ_FreeBack_MaxCur; -uint16_t JQ_FreeBack_MaxTime; -uint16_t JQ_FreeBack_MinCur; -uint16_t JQ_FreeBack_MinTime; +volatile uint16_t JQ_FreeBack_MaxCur; +volatile uint16_t JQ_FreeBack_MaxTime; +volatile uint16_t JQ_FreeBack_MinCur; +volatile uint16_t JQ_FreeBack_MinTime; -uint16_t JQ_CommEnd_MaxCur = 0; -uint8_t JQ_CommEnd_CurEn = 0; +volatile uint16_t JQ_CommEnd_MaxCur = 0; +volatile uint8_t JQ_CommEnd_CurEn = 0; -uint16_t JQ_EnFreeBack_Test = 0; +volatile uint16_t JQ_EnFreeBack_Test = 0; static void JQ_CommBegin() { diff --git a/source/elec_det/driver/JQDriver.h b/source/elec_det/driver/JQDriver.h index 5f6e834..5470d0f 100644 --- a/source/elec_det/driver/JQDriver.h +++ b/source/elec_det/driver/JQDriver.h @@ -16,12 +16,12 @@ #define JQ_Read_AD_Sample_C 140 #define JQ_Read_AD_Sample_C_IDLE 80 -extern uint16_t JQ_FreeBack_MaxCur; -extern uint16_t JQ_FreeBack_MaxTime; -extern uint16_t JQ_FreeBack_MinCur; -extern uint16_t JQ_FreeBack_MinTime; -extern uint16_t JQ_CommEnd_MaxCur ; -extern uint8_t JQ_CommEnd_CurEn ; +extern volatile uint16_t JQ_FreeBack_MaxCur; +extern volatile uint16_t JQ_FreeBack_MaxTime; +extern volatile uint16_t JQ_FreeBack_MinCur; +extern volatile uint16_t JQ_FreeBack_MinTime; +extern volatile uint16_t JQ_CommEnd_MaxCur ; +extern volatile uint8_t JQ_CommEnd_CurEn ; //@brief 读OTP diff --git a/source/elec_det/driver/XTDriver.c b/source/elec_det/driver/XTDriver.c index 553a925..c842adf 100644 --- a/source/elec_det/driver/XTDriver.c +++ b/source/elec_det/driver/XTDriver.c @@ -1,9 +1,9 @@ #include "XTDriver.h" #include "hardware/adc_cfg.h" #include "hardware/timer_cfg.h" -uint32_t XT_SquareCount = 0; //发送载波个数 -uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; -uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; +volatile uint32_t XT_SquareCount = 0; //发送载波个数 +volatile uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; +volatile uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; volatile uint8_t XT_SendSquareFlag = 1; //发送方波标志 volatile uint8_t XT_ReadUIDFlag = 1; //扫描标志 @@ -18,8 +18,8 @@ volatile uint16_t* XT_ADC_Buf = FireBus_ADC_Buf;//AD采样缓存区 volatile uint8_t XT_ADCCollectStartFlag = 1; //ADC采集标志 -uint32_t XT_ADC_BaseValue = 0; //ADC采集最低电压 -uint32_t XT_ADC_CollectValue_sum = 0; //ADC采集电压和 +volatile uint32_t XT_ADC_BaseValue = 0; //ADC采集最低电压 +volatile uint32_t XT_ADC_CollectValue_sum = 0; //ADC采集电压和 #define XT_FreeBack_Noise 800 //static uint32_t XT_ADCCollectIncrementValue = XTCollectIncrementValue; diff --git a/source/elec_det/driver/XTDriver.h b/source/elec_det/driver/XTDriver.h index d8ccd84..1c55652 100644 --- a/source/elec_det/driver/XTDriver.h +++ b/source/elec_det/driver/XTDriver.h @@ -129,8 +129,8 @@ #define XT_CMDC_MEASURE_RES 0x2F //测量药头电阻_C -extern uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; -extern uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; +extern volatile uint16_t XT_FreeBackMaxCur,XT_FreeBackMinCur,XT_FreeBackMaxTime,XT_FreeBackMinTime,XT_CommEndMaxCur; +extern volatile uint8_t XT_EnFreeBack_Test,XT_CommEnd_CurEn; //************************************************************************// /* diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index 6f74d84..ddc92fd 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -94,7 +94,12 @@ static int elec_parper_power(void) ret=checker_runcfg.excue_rtv; if(ret){ DBG_WARN("parper power failed,ret=%d.",ret); + }else{ + checker_runcfg.power_prapare_exe=1; } + JQBUS_OFF; + delay_ms(20); + PowerCalibration_set(POWER_DEF_V,POWER_DEF_V-10); return ret; } @@ -133,7 +138,7 @@ array_def *elec_bootinfo(void) Ye_BoardCheck(); board_st.hard_v=sys_param()->hard_version; board_st.resistor_diff=sys_param()->resistor_diff; - board_st.hard_v=15; + board_st.hard_v=19; array_def *r=arr_creat(); arr_append(r,0); arr_appends(r,&board_st,sizeof(BoartCheck_st)); @@ -294,11 +299,11 @@ static int elec_code_param_check(array_def *uid_psw) if((uid_psw==0)||(arr_length(uid_psw)==0)){ return 1; } - if(arr_length(uid_psw)!=(arr_get(uid_psw,0)+arr_get(uid_psw,1)+1)){ + if(arr_length(uid_psw)!=(arr_get(uid_psw,0)+arr_get(uid_psw,1)+3)){ return 2; } if(arr_get(uid_psw,2)!=0){ - return 2; + return 3; } if((arr_get(uid_psw,0)>13)||(arr_get(uid_psw,1)>8)){ return 4; @@ -365,10 +370,11 @@ array_def *elec_check_with_scheme(array_def *uid_psw) uint8_t res=0; array_def *r=arr_creat(); CHECK_DO(s->data,arr_delete); + res=checker_runcfg.power_prapare_exe; memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); + checker_runcfg.power_prapare_exe=res; chip_type=(board_st.plan_id >> 12 ) & 0x0F; if(elec_code_param_check(uid_psw)==0){ - checker_runcfg.code_bind_check_flag = 1;//检测 绑定一起执行 elec_code_load_param(uid_psw); } @@ -402,13 +408,18 @@ array_def *elec_check_with_scheme(array_def *uid_psw) break; checker_runcfg.rtv_index-=checker_runcfg.rtv_count; } - DBG_LOG("task_index:%d,taskid:%d,ret=%d.",task_index,taskid,checker_runcfg.excue_rtv); + if(checker_runcfg.excue_rtv){ + checker_runcfg.rtv_index+=checker_runcfg.rtv_count; + } + DBG_LOG("task_index:%d,taskid:%d,ret=%d,rtv_index=%d.",task_index,taskid,checker_runcfg.excue_rtv, + checker_runcfg.rtv_index); // 找寻下一个任务 task_index++; if(checker_runcfg.excue_rtv != 0){ uint8_t err_to=checker_runcfg.task_info.error_jumpto; uint8_t temp; + if(err_to==0xff) continue; if(err_to>s->task_num-1) err_to=s->task_num-1; for(;task_index>2); us_temp = ADC1_SAMPLE_BUF_LEN - (ADC1_SAMPLE_BUF_LEN>>2); @@ -297,7 +297,7 @@ uint16_t ADC_Comm1p6mA_EndCur(void) ul_base = (ul_base*8 + adc1_sample_buf[us_count]*2 )/10; adc1_sample_buf[us_count] = ul_base; } - Bubble_Sort_u16(adc1_sample_buf,us_count); + Bubble_Sort_u16((uint16_t *)adc1_sample_buf,us_count); us_count = (ADC1_SAMPLE_BUF_LEN2>>2); us_temp = ADC1_SAMPLE_BUF_LEN2 - (ADC1_SAMPLE_BUF_LEN2>>2); diff --git a/source/elec_det/hardware/dac_cfg.c b/source/elec_det/hardware/dac_cfg.c index 2a5b3d3..b39c7ac 100644 --- a/source/elec_det/hardware/dac_cfg.c +++ b/source/elec_det/hardware/dac_cfg.c @@ -1,5 +1,6 @@ #include "dac_cfg.h" #include "gpio_cfg.h" +#include "base/delay.h" /* @brief 默认初始化 */ @@ -43,13 +44,16 @@ void DAC_Definit(void) */ void C_H_DAC_Set(uint16_t dac_val) { + uint16_t read=0; + read=DAC_GetDataOutputValue(DAC_Channel_1); + if(dac_val==read) return; DAC_SetChannel1Data(DAC_Align_12b_R, dac_val); - DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); -// dac_output_buffer_enable(DAC0); -// dac_data_set(DAC0,DAC_ALIGN_12B_R,dac_val); -// dac_trigger_enable(DAC0); -// dac_enable(DAC0); -// dac_software_trigger_enable(DAC0); + + do{ + DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); + read=DAC_GetDataOutputValue(DAC_Channel_1); + }while(read!=dac_val); + } /* @brief 设置高电平电压 @@ -57,13 +61,15 @@ void C_H_DAC_Set(uint16_t dac_val) */ void C_M_DAC_Set(uint16_t dac_val) { + uint16_t read=0; + read=DAC_GetDataOutputValue(DAC_Channel_2); + if(dac_val==read) return; DAC_SetChannel2Data(DAC_Align_12b_R, dac_val); - DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE); -// dac_output_buffer_enable(DAC1); -// dac_data_set(DAC1,DAC_ALIGN_12B_R,dac_val); -// dac_trigger_enable(DAC1); -// dac_enable(DAC1); -// dac_software_trigger_enable(DAC1); + do{ + DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE); + delay_us(2); + read=DAC_GetDataOutputValue(DAC_Channel_2); + }while(read!=dac_val); } diff --git a/source/elec_det/hardware/hardware.c b/source/elec_det/hardware/hardware.c index 78ba9ae..a005f72 100644 --- a/source/elec_det/hardware/hardware.c +++ b/source/elec_det/hardware/hardware.c @@ -10,8 +10,8 @@ #include "base/utility.h" //#include "yecan.h" #include "hardware/jw3425iic.h" -BoartCheck_st board_st; -BoardInfo_un boardinfo_un; +volatile BoartCheck_st board_st; +volatile BoardInfo_un boardinfo_un; void test_timer_function() { @@ -71,7 +71,7 @@ void Ye_BoardCheck(void) LED1_Out = 0; } PowerCalibration_set(POWER_DEF_V,45); - delay_ms(100); + delay_ms(5); board_st.bus_5p5v = Power_GetHPowerV(); // #ifdef CHECKER_DEV diff --git a/source/elec_det/hardware/power.c b/source/elec_det/hardware/power.c index 3cc27a3..0b8f8be 100644 --- a/source/elec_det/hardware/power.c +++ b/source/elec_det/hardware/power.c @@ -4,13 +4,13 @@ #include "base/delay.h" #define PowerCurr_AD_BUF_LEN 40 #define POWER_SET_COUNT 20 -static CurrentSample_Range_eu latest_range = Current_Max; -static PowerInfo_st def_power_st; +static volatile CurrentSample_Range_eu latest_range = Current_Max; +static volatile PowerInfo_st def_power_st; //static uint16_t PowerCurr_AD_buf[PowerCurr_AD_BUF_LEN]; -static float f_cur_k; -static float f_cur_b; -static uint8_t uc_power_cal_flag = 0; -PowerInfo_st powerinfo_arrayst[POWER_SET_COUNT] ; +static volatile float f_cur_k; +static volatile float f_cur_b; +static volatile uint8_t uc_power_cal_flag = 0; +volatile PowerInfo_st powerinfo_arrayst[POWER_SET_COUNT] ; /* @brief 获取内部基准1.2V电压对应的AD @@ -106,13 +106,13 @@ uint32_t Power_GetBousV() abus_v = Power_ADVGetCalVal_106(abus_v); abus_v = abus_v*11/100000; - hbus_v=Power_GetHPowerV(); +// hbus_v=Power_GetHPowerV(); //? 验证电压失调 // 电压相差过大的时候输出一个离谱的值 - if((hbus_v>abus_v+10)||(abus_v>hbus_v+10)){ - abus_v=500; - } +// if((hbus_v>abus_v+10)||(abus_v>hbus_v+10)){ +// abus_v=500; +// } return abus_v; } @@ -451,15 +451,15 @@ void PowerCalibration(PowerInfo_st* info_st) //设置总线电压 void PowerSetVoltage(PowerInfo_st* info_st) { - memcpy(&def_power_st,info_st,sizeof(PowerInfo_st)); + memcpy((void *)&def_power_st,info_st,sizeof(PowerInfo_st)); PowerUpFilter(info_st->V_LAH_DAC); C_H_DAC_Set(info_st->V_LAH_DAC); C_M_DAC_Set(info_st->V_LAM_DAC); POWER_ON; //? 验证电压失调 - delay_ms(5); - C_H_DAC_Set(info_st->V_LAH_DAC); - C_M_DAC_Set(info_st->V_LAM_DAC); +// delay_ms(5); +// C_H_DAC_Set(info_st->V_LAH_DAC); +// C_M_DAC_Set(info_st->V_LAM_DAC); } //获取当前电压配置值 void PowerGetSet(PowerInfo_st* info_st) @@ -503,7 +503,7 @@ uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v) //在现有电压列表中能够查询到校准后的电压 if(ul_index < POWER_SET_COUNT) { - memcpy(&powerinfo_st,&powerinfo_arrayst[ul_index],sizeof(PowerInfo_st)); + memcpy((void *)&powerinfo_st,(void *)&powerinfo_arrayst[ul_index],sizeof(PowerInfo_st)); PowerSetVoltage(&powerinfo_st); return 0; } @@ -524,7 +524,7 @@ uint8_t PowerCalibration_set(uint16_t h_v,uint16_t m_v) { if( powerinfo_arrayst[ul_index].V_LAH_DAC == 0 || powerinfo_arrayst[ul_index].V_LAM_DAC == 0) { - memcpy(&powerinfo_arrayst[ul_index],&powerinfo_st,sizeof(PowerInfo_st)); + memcpy((void *)&powerinfo_arrayst[ul_index],&powerinfo_st,sizeof(PowerInfo_st)); break; } ul_index++; diff --git a/source/elec_det/hardware/timer_cfg.c b/source/elec_det/hardware/timer_cfg.c index 07f271f..2e574c5 100644 --- a/source/elec_det/hardware/timer_cfg.c +++ b/source/elec_det/hardware/timer_cfg.c @@ -1,7 +1,7 @@ #include "base/define.h" #include "timer_cfg.h" #include "base/delay.h" -Timerupdatefunc p_timer4update_func = NULL; +volatile Timerupdatefunc p_timer4update_func = NULL; /* @@ -11,7 +11,7 @@ Timerupdatefunc p_timer4update_func = NULL; */ static volatile uint16_t amend_plus_count = 0; -TimerTriger p_timertriger = NULL; +volatile TimerTriger p_timertriger = NULL; void FireBus_ClkAmend(uint16_t pre_us,uint16_t trigger_us,uint16_t count,void *p_fun) { diff --git a/source/elec_det/interface/BaseChecker.c b/source/elec_det/interface/BaseChecker.c index 673f4dd..51f5f0b 100644 --- a/source/elec_det/interface/BaseChecker.c +++ b/source/elec_det/interface/BaseChecker.c @@ -6,7 +6,7 @@ Checker_RunCfg_st checker_runcfg; uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN]; volatile uint8_t ThreeBindResult_flag = 1; -uint16_t Checker_First_Set_Voltage = 88; +volatile uint16_t Checker_First_Set_Voltage = 88; /* @brief 标记执行结果 @param rtv 执行返回值 1表示失败 0 表示成功 diff --git a/source/elec_det/interface/BaseChecker.h b/source/elec_det/interface/BaseChecker.h index 9835ea7..a7871ba 100644 --- a/source/elec_det/interface/BaseChecker.h +++ b/source/elec_det/interface/BaseChecker.h @@ -51,7 +51,7 @@ extern Checker_RunCfg_st checker_runcfg; #define CHECKER_FAC_BUF_LEN 50 //len+crc8+48bytes extern uint8_t Checker_FacBuf[CHECKER_FAC_BUF_LEN]; extern volatile uint8_t ThreeBindResult_flag ; -extern uint16_t Checker_First_Set_Voltage ;//方案设置内部第一个电压 +extern volatile uint16_t Checker_First_Set_Voltage ;//方案设置内部第一个电压 /* @brief 标记执行结果 @param rtv 执行返回值 1表示失败 0 表示成功 diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c index d2c0442..dcf0a4f 100644 --- a/source/elec_det/interface/JQChecker.c +++ b/source/elec_det/interface/JQChecker.c @@ -753,7 +753,7 @@ void JQ_Test_EnCommEndCur(void) void JQ_Test_GetCommEndCur(void) { JQ_CommEnd_CurEn = 0; - Checker_SetRtv(&JQ_CommEnd_MaxCur,checker_runcfg.rtv_count); + Checker_SetRtv((uint16_t *)&JQ_CommEnd_MaxCur,checker_runcfg.rtv_count); Checker_MaskResult(0,checker_runcfg.task_info.runindex); } /* diff --git a/source/elec_det/interface/XTChecker.c b/source/elec_det/interface/XTChecker.c index 67e4c77..ecda9d8 100644 --- a/source/elec_det/interface/XTChecker.c +++ b/source/elec_det/interface/XTChecker.c @@ -701,7 +701,7 @@ void XT_Test_EnCommEndCur(void) void XT_Test_GetCommEndCur(void) { XT_CommEnd_CurEn = 0; - Checker_SetRtv(&XT_CommEndMaxCur,checker_runcfg.rtv_count); + Checker_SetRtv((uint16_t *)&XT_CommEndMaxCur,checker_runcfg.rtv_count); Checker_MaskResult(0,checker_runcfg.task_info.runindex); } diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 618b584..1f7d8c8 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-10-16 09:54:53" +#define BUILD_DATE "2023-10-16 18:50:56" #define SOFT_VERSION "2.00" diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index 8c645de..5911bee 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -19,7 +19,7 @@ typedef struct{ ucport_def u; rt_timer_t timer; - int *host_type;// 主机接口类型0串口,1can +// int *host_type;// 主机接口类型0串口,1can }slave_def; @@ -27,7 +27,7 @@ typedef struct{ static slave_def *slave_creat(void) { slave_def *u=calloc(1,sizeof(slave_def)); - u->host_type=app_variable("host_if",0,0); + //u->host_type=app_variable("host_if",0,0); return u; } @@ -145,6 +145,7 @@ typedef struct{ uint8_t cmd; int host_type; array_def *data; + array_def *(*check_fun)(array_def *uid); }check_def; static check_def g_check; static void check_set_data(check_def *u,array_def *data) @@ -170,7 +171,9 @@ static void check_submit_later(void *t) static void check_later(void *t) { check_def *s=(check_def *)t; - elec_check_with_scheme(s->data); + if(s->check_fun){ + s->check_fun(s->data); + } if(s->host_type==1) { s->submit_times=10; @@ -181,7 +184,7 @@ static void check_later(void *t) s->cmd=0; } } -static int check_with_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) +static int check_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) { slave_def *s=(slave_def *)u; check_def *c=&g_check; @@ -189,7 +192,6 @@ static int check_with_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,c if(c->cmd==0){ c->cmd=cmd; c->tran=s->u.p; - c->host_type=*s->host_type; check_set_data(c,data); later_execute(check_later,c,10); } @@ -201,18 +203,37 @@ static int check_with_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,c emit tran_reply_signal(u->p,arr_temp(r)); return 0; } -static ucport_def *check_with_scheme(tran_def *t, uint8_t cmd,array_def *data) + +static ucport_def *check_self(tran_def *t, uint8_t cmd,array_def *data, + array_def *(*fun)(array_def *)) { int ret=0; + check_def *c=&g_check; slave_def *u=slave_creat(); u->u.p=t; u->u.del=slave_del; - u->u.dolater=check_with_scheme_dolater; + u->u.dolater=check_dolater; + c->check_fun=fun; + u->u.dolater(&u->u,cmd,data,"ok"); return (ucport_def *)u; } + +static ucport_def *check_with_scheme(tran_def *t, uint8_t cmd,array_def *data) +{ + check_def *c=&g_check; + c->host_type=*(int *)app_variable("host_if",0,0); + return check_self(t,cmd,data,elec_check_with_scheme); +} transmit_export(ym_slave,0x0b,check_with_scheme) transmit_export(ym_slave,0x0c,check_with_scheme) +static ucport_def *check_code(tran_def *t, uint8_t cmd,array_def *data) +{ + check_def *c=&g_check; + c->host_type=0; + return check_self(t,cmd,data,elec_code); +} +transmit_export(ym_slave,0x17,check_code)