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)
{