解决自动更新bootloader死机的问题

软件版本2.00
解决检测任务中重试失败后不会填充返回值的bug
This commit is contained in:
ranchuan
2023-10-16 18:53:12 +08:00
parent 54bc5b44ac
commit cbbb2af298
21 changed files with 337 additions and 110 deletions

View File

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