解决自动更新bootloader死机的问题
软件版本2.00 解决检测任务中重试失败后不会填充返回值的bug
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user