#include "stdlib.h" #include "dev_flash.h" #include "elec_judge.h" #include "CheckerExt.h" #include "basechecker.h" #include "elec_det.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; } CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={ CheckerExt_CalcErr, };