diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index 62918a6..ec25b79 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -120,7 +120,7 @@ 0 DLGUARM - (105=-1,-1,-1,-1,0) + d 0 @@ -299,7 +299,7 @@ 1 0 - 0 + 1 18 @@ -523,7 +523,7 @@ 1 0 - 1 + 0 18 @@ -583,7 +583,6 @@ 0 DLGUARM - d 0 @@ -771,7 +770,7 @@ stm32lib - 1 + 0 0 0 0 @@ -1123,7 +1122,7 @@ dev - 1 + 0 0 0 0 @@ -1475,7 +1474,7 @@ rtt - 1 + 0 0 0 0 @@ -1507,7 +1506,7 @@ rt_thread - 1 + 0 0 0 0 @@ -1743,7 +1742,7 @@ soft - 1 + 0 0 0 0 diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index 876476d..d2c5954 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -185,7 +185,6 @@ 0 0 0 - 0 0 0 8 @@ -352,7 +351,7 @@ 0 0 0 - 4 + 0 @@ -799,7 +798,7 @@ 2 2 2 - 0 + 2 @@ -1893,7 +1892,7 @@ 2 2 2 - 0 + 2 @@ -2384,7 +2383,7 @@ 2 2 2 - 0 + 2 @@ -2483,7 +2482,7 @@ 2 2 2 - 0 + 2 @@ -2562,7 +2561,7 @@ 2 2 2 - 0 + 2 @@ -2636,7 +2635,7 @@ app 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -2811,11 +2810,10 @@ 0 0 0 - 0 0 0 8 - 0 + 1 0 0 0 @@ -2978,7 +2976,7 @@ 0 0 0 - 4 + 0 @@ -4256,7 +4254,6 @@ 0 0 0 - 0 0 0 8 @@ -4423,7 +4420,7 @@ 0 0 0 - 4 + 0 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 397722a..b63d1ab 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -240,4 +240,9 @@ 添加 DMod_FireBusReadDatasV2_RC 函数 2023.11.1 make 对文件名是区分大小写的... +2023.11.3 + 启动时调压改为查找任务id0,自检信息中的方案id由方案初始化时确定 + 接收到升级方案命令时把本机方案状态设置为无效 + 检测电阻命令index为5时读取本机校准值 + diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c index 6310798..ef20de6 100644 --- a/source/dev/dev_flash.c +++ b/source/dev/dev_flash.c @@ -271,7 +271,7 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len) if((uint32_t)data%4) { DBG_WARN("write addr err."); - return -1; + return 1; } uint32_t *t=(uint32_t *)data; uint32_t flash_addr=(uint32_t)addr; @@ -294,7 +294,7 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len) { DBG_WARN("flash write failed.ret=%d",state); DBG_WARN("addr=%08X",flash_addr); - ret=-1; + ret=2; break; } flash_addr+=4; @@ -303,7 +303,7 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len) if(memcmp(addr,data,(len/4)*4)!=0) { DBG_WARN("addr=%08x write/read data not equate.",addr); - ret=-2; + ret=3; } rt_mutex_release(s->mutex); return ret; diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index d694c8e..7e437aa 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -74,16 +74,42 @@ int elec_scheme_init(void) } +// 方案去初始化 +int elec_scheme_deinit(void) +{ + self_def *s=&g_self; + s->scheme_inited=0; + board_st.plan_id = ~0; + return 0; +} + + + +// 找到第一个指定taskid的任务 +static CheckerTask_Info_st *elec_find_task_by_taskid(int id) +{ + self_def *s=&g_self; + CheckerTask_Info_st *task_par=0; + for(int i=0;itask_num;i++){ + task_par= s->task_info_array[i]; + if(task_par->taskid==id){ + return task_par; + } + } + return 0; +} + + // 调压 static int elec_parper_power(void) { self_def *s=&g_self; CheckerTask_Info_st *task_par=0; int ret=0; - task_par= s->task_info_array[0]; - if(task_par->taskid!=0){ - // 第一个任务不是调压任务,失败 - DBG_WARN("parper power failed,first taskid is not 0."); + task_par= elec_find_task_by_taskid(0); + if(task_par==0){ + // 找不到调压任务,失败 + DBG_WARN("parper power failed,can not find task with id 0."); return 1; } // 装载参数 @@ -226,7 +252,7 @@ array_def *elec_write_fat_buff(array_def *d) // 测量桥丝阻值 -array_def *elec_check_resistor(void) +array_def *elec_check_resistor(uint8_t index) { /* 1 通道1-4通,过桥丝 @@ -243,11 +269,12 @@ array_def *elec_check_resistor(void) aus_sample[uc_index] -= board_st.resistor_diff; } // 读取方案中测量电阻的模式 - switch(0) + switch(index) { case 0: us_resistor = aus_sample[0];break; case 1: us_resistor = aus_sample[1];break; case 2: us_resistor = aus_sample[2];break; + case 5: us_resistor = board_st.resistor_diff;break; default : us_resistor = 0;break; } array_def *r=arr_creat(); @@ -382,7 +409,11 @@ array_def *elec_check_with_scheme(array_def *uid_psw) CheckerTask task_fun=0; uint8_t res=0; array_def *r=arr_creat(); - //CHECK_DO(s->data,arr_delete); + if(s->scheme_inited==0){ + DBG_WARN("scheme not init."); + arr_append(r,1); + return arr_temp(r); + } res=checker_runcfg.power_prapare_exe; memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); checker_runcfg.power_prapare_exe=res; @@ -391,11 +422,6 @@ array_def *elec_check_with_scheme(array_def *uid_psw) elec_code_load_param(uid_psw); } - if(s->scheme_inited==0){ - DBG_WARN("scheme not init."); - arr_append(r,1); - return arr_temp(r); - } if(chip_type>=LENGTH(tasks_fun_table)){ DBG_WARN("unknown chip type."); arr_append(r,2); diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h index ab90f5d..d2e5233 100644 --- a/source/elec_det/elec_det.h +++ b/source/elec_det/elec_det.h @@ -10,6 +10,8 @@ int elec_init(void); int elec_scheme_init(void); +int elec_scheme_deinit(void); + uint8_t elec_local_addr(void); void elec_led1_power(int power); @@ -28,7 +30,7 @@ array_def *elec_write_resistor_cbv(int cbv); array_def *elec_write_fat_buff(array_def *d); -array_def *elec_check_resistor(void); +array_def *elec_check_resistor(uint8_t index); array_def *elec_check_with_scheme(array_def *uid_psw); diff --git a/source/elec_det/hardware/hardware.c b/source/elec_det/hardware/hardware.c index a005f72..80982eb 100644 --- a/source/elec_det/hardware/hardware.c +++ b/source/elec_det/hardware/hardware.c @@ -48,7 +48,7 @@ void Ye_BoardCheck(void) board_st.soft_v = SoftVersion; board_st.hard_v = boardinfo_un.boardinfo.hard_v; board_st.resistor_diff = boardinfo_un.boardinfo.resistor_diff; - board_st.plan_id = *((uint32_t*)APP_TEST_PLAN_ADDR); + //board_st.plan_id = *((uint32_t*)APP_TEST_PLAN_ADDR); GetADC1_Value(VCC_1V25_CH,aus_buf,AD_SCAN_COUNT); diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 55816ea..085c88d 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-11-01 23:50:38" +#define BUILD_DATE "2023-11-03 18:01:29" #define SOFT_VERSION "2.03" diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index f4c91b3..58de8a0 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -116,7 +116,11 @@ transmit_export(ym_slave,0x04,write_resistor_cbv) // 测量桥丝阻值 static int check_resistor_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) { - emit tran_reply_signal(u->p,arr_temp(elec_check_resistor())); + uint8_t index=0; + if(data){ + index=arr_get(data,0); + } + emit tran_reply_signal(u->p,arr_temp(elec_check_resistor(index))); return 0; } static ucport_def *check_resistor(tran_def *t, uint8_t cmd,array_def *data) @@ -282,6 +286,7 @@ typedef struct{ uint8_t device_state; uint32_t flash_addr; uint32_t flash_addr_base; + int erased; }updata_def; static updata_def g_updata; @@ -445,24 +450,34 @@ static int write_data2_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e uint32_t addr=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24); int len=arr_length(data)-4; int ret=0; + if(strcmp(err_str,"ok")!=0){ + return -1; + } if((addr)==MCU_TASKID_ADDR_BASE){ - //flash_erase_scheme(); - // 只擦除两个扇区 - flash_erase_addr((uint32_t)flash_get_scheme()); - flash_erase_addr((uint32_t)flash_get_scheme()+2048); - g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin"); - g_updata.flash_addr_base=MCU_TASKID_ADDR_BASE; + if(g_updata.erased==0){ + flash_erase_scheme(); + g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin"); + g_updata.flash_addr_base=MCU_TASKID_ADDR_BASE; + elec_scheme_deinit(); + g_updata.erased=1; + } }else if((addr)==MCU_JWT_ADDR_BASE){ - flash_erase_jwtcode(); - g_updata.flash_addr=creat_file_head((uint32_t)flash_get_jwtcode(),"jwtcode.jwt"); - g_updata.flash_addr_base=MCU_JWT_ADDR_BASE; + if(g_updata.erased==0){ + flash_erase_jwtcode(); + g_updata.flash_addr=creat_file_head((uint32_t)flash_get_jwtcode(),"jwtcode.jwt"); + g_updata.flash_addr_base=MCU_JWT_ADDR_BASE; + g_updata.erased=1; + } } uint32_t offset=addr-g_updata.flash_addr_base; addr=g_updata.flash_addr+offset; ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len); array_def *r=arr_creat(); - arr_append(r,(ret!=0)); + arr_append(r,ret); emit tran_reply_signal(u->p,arr_temp(r)); + if(ret){ + g_updata.erased=0; + } return 0; } static ucport_def *write_data2(tran_def *t, uint8_t cmd,array_def *data) @@ -486,6 +501,9 @@ static int load_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e array_def *r=arr_creat(); arr_append(r,ret); emit tran_reply_signal(u->p,arr_temp(r)); + // 此处如果重启的话会丢失缓存 +// later_execute((void (*)(void *))bk_reboot_app,0,100); + g_updata.erased=0; ret=elec_scheme_init(); return 0; } diff --git a/source/task/transmit.c b/source/task/transmit.c index aae7d71..cddde6c 100644 --- a/source/task/transmit.c +++ b/source/task/transmit.c @@ -307,11 +307,8 @@ static void updata_prepar_read(updata_def *u,uint8_t cmd,array_def *data) static void when_scheme_done(ucport_def *u) { - tran_def *tran=app_variable("tran",0,0); - if(tran==0){ - DBG_WARN("can not fond variable \"tran\""); - return; - } + // 升级完成后延时50ms重启 + later_execute((void (*)(void *))bk_reboot_app,0,50); } static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data) {