#include "stdlib.h" #include "dev_flash.h" #include "elec_judge.h" #include "CheckerExt.h" #include "basechecker.h" #include "elec_det.h" #include "elec_task_slot.h" // 扩展的检测任务,这个文件下的任务是所有模块通用的 /*rc{ 计算异常 par0:忽略的异常代码1 par1:忽略的异常代码2 par2~par9:同上 return:无 exe:如果计算的异常代码为不被忽略的异常,则此任务失败 }*/ static int calc_contain(uint16_t *arr,int arr_len,uint16_t item); void CheckerExt_CalcErr(void) { const scheme_def *sch=check_scheme(); elec_judge_def *e=0; uint8_t marerr=0,suberr=0; if(sch->plan_id==0xffffffff){ // 判定任务不存在,返回失败 marerr=6; goto end; } e=malloc(sizeof(elec_judge_def)); elec_judge(e,sch->task_num,checker_runcfg.Task_Result, checker_runcfg.Task_Excute, (uint8_t *)checker_runcfg.Test_Rtv,&marerr,&suberr); free(e); end: if((marerr!=0)&&(calc_contain(checker_runcfg.params,checker_runcfg.param_count,marerr)==0)){ Checker_MaskResult(1,checker_runcfg.task_info.runindex); }else{ Checker_MaskResult(0,checker_runcfg.task_info.runindex); } } static int calc_contain(uint16_t *arr,int arr_len,uint16_t item) { for(int i=0;i=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;itask[i]; num+=t->item_num; } return num; } /*rc{ 执行动态插入的任务, 找到此插槽的所有动态任务并依次执行,如未找到则直接返回 par0:要执行的任务插槽 return:无 exe:动态插入的任务执行失败则此任务失败 }*/ void CheckerExt_Slot(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]; task_def *t=0; void *task_slot=task_slot_init(); if(task_slot==0){ goto end; } if(elec_task_env_back()){ ret=2; goto end; } while(t=task_slot_next(task_slot,(uint8_t)index),t){ // t-> } if(elec_task_env_restore()){ ret=5; goto end; } end: Checker_MaskResult(ret,self_index); } CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={ CheckerExt_CalcErr, CheckerExt_Repeat, };