添加重复执行指定任务的任务

This commit is contained in:
ranchuan
2023-11-20 18:06:03 +08:00
parent be3c644d23
commit fa2509c5af
8 changed files with 112 additions and 4 deletions

View File

@@ -1548,7 +1548,7 @@
<Group>
<GroupName>rt_thread</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

View File

@@ -269,4 +269,6 @@
2023.11.17
添加扩展任务 用于小板端执行异常判定
ew程序下载批量验证成功
2023.11.20
添加重复执行指定任务的任务

View File

@@ -29,6 +29,17 @@
#define PLAN_MAX_TASK 64
#define TASK_PAR_BACK_LEN 10
typedef struct{
CheckerTask_Info_st task_par;
int par_count;
int ret_count;
int rtv_index;// 返回值下标
uint16_t params[10];
}task_par_back;
typedef struct{
CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//方案参数结构体指针
@@ -41,6 +52,8 @@ typedef struct{
int task_num;
int scheme_inited;
array_def *data;
task_par_back *task_back_table[TASK_PAR_BACK_LEN];
int task_back_index;
}self_def;
@@ -423,6 +436,48 @@ int elec_check_load_task_param(uint8_t task_index)
memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2);
return 0;
}
// 备份任务运行环境,0成功
int elec_task_env_back(void)
{
self_def *s=&g_self;
task_par_back *b=0;
if(s->task_back_index>=TASK_PAR_BACK_LEN){
return 1;
}
s->task_back_table[s->task_back_index]=calloc(1,sizeof(task_par_back));
b=s->task_back_table[s->task_back_index];
if(b==0){
return 2;
}
b->par_count=checker_runcfg.param_count;
b->ret_count=checker_runcfg.rtv_count;
b->rtv_index=checker_runcfg.rtv_index;
memcpy(&b->task_par, &checker_runcfg.task_info,sizeof(CheckerTask_Info_st));
memcpy(b->params,checker_runcfg.params,checker_runcfg.param_count*2);
s->task_back_index++;
return 0;
}
// 恢复任务运行环境,0成功
int elec_task_env_restore(void)
{
self_def *s=&g_self;
task_par_back *b=0;
if(s->task_back_index<=0){
return 1;
}
b=s->task_back_table[s->task_back_index-1];
checker_runcfg.param_count=b->par_count;
checker_runcfg.rtv_count=b->ret_count;
checker_runcfg.rtv_index=b->rtv_index;
memcpy(&checker_runcfg.task_info,&b->task_par, sizeof(CheckerTask_Info_st));
memcpy(checker_runcfg.params,b->params,checker_runcfg.param_count*2);
free(b);
s->task_back_index--;
return 0;
}
// 根据任务id获取检测函数
CheckerTask elec_get_task_fun(CheckerTask *tasks_fun_table[],uint8_t chip_type,uint8_t taskid)
{

View File

@@ -44,6 +44,10 @@ int elec_check_load_task_param(uint8_t task_index);
void elec_exe_task(void);
int elec_task_env_back(void);
int elec_task_env_restore(void);
#endif

View File

@@ -4,7 +4,7 @@
#include "elec_judge.h"
#include "CheckerExt.h"
#include "basechecker.h"
#include "elec_det.h"
@@ -69,7 +69,52 @@ par0:要执行的任务序号
return:无
exe:如果要执行的任务序号不小于此任务则此任务失败
}*/
//void CheckerExt_Repeat
static int calc_skip_num(int index);
void CheckerExt_Repeat(void)
{
int index;
uint16_t ret=0;
int self_index=checker_runcfg.task_info.runindex;
if(checker_runcfg.param_count<1){
ret=1;
goto end;
}
index=checker_runcfg.params[0];
if(index>=self_index){
ret=2;
goto end;
}
if(elec_task_env_back()){
ret=3;
goto end;
}
if(elec_check_load_task_param(index)){
ret=4;
goto end;
}
checker_runcfg.rtv_index=calc_skip_num(index);
elec_exe_task();
if(elec_task_env_restore()){
ret=5;
goto end;
}
end:
Checker_MaskResult(ret,self_index);
}
// 计算在taskindex之前有多少个返回值
static int calc_skip_num(int index)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int num=0;
for(int i=0;i<index;i++)
{
t=&s->task[i];
num+=t->item_num;
}
return num;
}
CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={

View File

@@ -17,6 +17,7 @@ extern CheckerTask exttaskArray[CHECKER_EXTID_COUNT];
void CheckerExt_CalcErr(void);
void CheckerExt_Repeat(void);

View File

@@ -858,6 +858,7 @@ EW_Test_PowerOFF, //26 关总线
EW_Updata, //27 升级
EW_Test_ChgEnergy, //28 充能统计
CheckerExt_CalcErr, //29 计算异常
CheckerExt_Repeat, //30 重新执行一次指定任务
(void*)0 //数组结束
};

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-11-18 14:06:40"
#define BUILD_DATE "2023-11-20 10:44:09"
#define SOFT_VERSION "2.06"