diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 0983f0a..18a1fab 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -299,5 +299,7 @@ 2023.12.19 添加赋码设备注码命令,实现ew检测时注码 添加文件 tran_for_coder.c +2023.12.20 + V2.09 使用任务插槽设置电阻校准值成功 diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index fbb9be9..fc0c167 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -214,7 +214,7 @@ array_def *elec_bootinfo(void) board_st.resistor_diff=sys_param()->resistor_diff; //board_st.hard_v=rt_tick_get()/1000; board_st.hard_v=HARD_VERSION; - board_st.soft_v=(int)(str_atof(SOFT_VERSION)*100); + board_st.soft_v=(int)(str_atof(SOFT_VERSION)*100+0.5); array_def *r=arr_creat(); arr_append(r,0); arr_appends(r,&board_st,sizeof(BoartCheck_st)); @@ -629,3 +629,33 @@ array_def *elec_code(array_def *uid_psw) +// 执行任务插槽 +array_def *elec_check_slot(void) +{ + self_def *s=&g_self; + s->task_par=0; + s->chip_type=0; + uint8_t taskid=0; + uint8_t res=0; + s->task_index=0; + array_def *r=arr_creat(); + res=checker_runcfg.power_prapare_exe; + memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); + checker_runcfg.power_prapare_exe=res; + + checker_runcfg.param_count=1; + checker_runcfg.params[0]=1; + CheckerExt_Slot(); + + elec_judge_def *e=malloc(sizeof(elec_judge_def)); + elec_judge(e,s->task_num,checker_runcfg.Task_Result, + checker_runcfg.Task_Excute, + (uint8_t *)checker_runcfg.Test_Rtv,&res,0); + free(e); + arr_append(r,res); + return arr_temp(r); +} + + + + diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h index 731cdec..67b878f 100644 --- a/source/elec_det/elec_det.h +++ b/source/elec_det/elec_det.h @@ -38,7 +38,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw); array_def *elec_code(array_def *uid_psw); - +array_def *elec_check_slot(void); int elec_check_load_task_param(uint8_t task_index); diff --git a/source/elec_det/elec_task_slot.c b/source/elec_det/elec_task_slot.c index 405ce16..81cee24 100644 --- a/source/elec_det/elec_task_slot.c +++ b/source/elec_det/elec_task_slot.c @@ -33,9 +33,12 @@ typedef struct{ +static task_slot_def *g_task_slot; + void task_slot_delete(void) { - task_slot_def *t=app_variable("task_slot",0,0); + //task_slot_def *t=app_variable("task_slot",0,0); + task_slot_def *t=g_task_slot; if(t){ task_node *n=t->head; task_node *old=0; @@ -46,18 +49,21 @@ void task_slot_delete(void) } free(t); } + g_task_slot=0; } // 初始化 void *task_slot_init(void) { - task_slot_def *t=app_variable("task_slot",0,0); + //task_slot_def *t=app_variable("task_slot",0,0); + task_slot_def *t=g_task_slot; if(t==0){ t=calloc(1,sizeof(task_slot_def)); - app_variable("task_slot",t,0); + // app_variable("task_slot",t,0); } t->current=t->head; + g_task_slot=t; return t; } @@ -73,7 +79,7 @@ int task_slot_add_item(void *context,task_def *item) task_node **n=&t->head; task_node *tail; tail=calloc(1,sizeof(task_node)); - memcpy(tail,item,sizeof(task_node)); + memcpy(&tail->task,item,sizeof(task_def)); while(*n){ n=&(*n)->next; } diff --git a/source/elec_det/interface/CheckerExt.c b/source/elec_det/interface/CheckerExt.c index db1ddb0..0fff8df 100644 --- a/source/elec_det/interface/CheckerExt.c +++ b/source/elec_det/interface/CheckerExt.c @@ -208,8 +208,19 @@ void CheckerExt_Slot(void) +/*rc{ - +写电阻校准值 +par0:电阻校准值 +ret:无 +}*/ +void CheckerExt_SetCbv(void) +{ + int cbv=checker_runcfg.params[0]; + int self_index=checker_runcfg.task_info.runindex; + elec_write_resistor_cbv(cbv); + Checker_MaskResult(0,self_index); +} @@ -220,5 +231,6 @@ CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={ CheckerExt_Repeat, CheckerExt_SetUID, CheckerExt_Slot, + CheckerExt_SetCbv, }; diff --git a/source/elec_det/interface/CheckerExt.h b/source/elec_det/interface/CheckerExt.h index a5b68ba..53a0cab 100644 --- a/source/elec_det/interface/CheckerExt.h +++ b/source/elec_det/interface/CheckerExt.h @@ -23,7 +23,7 @@ void CheckerExt_SetUID(void); void CheckerExt_Slot(void); - +void CheckerExt_SetCbv(void); diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index 2604251..213e1ff 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -966,6 +966,31 @@ void EW_Test_VerifyUID(void) +// 读mtp +void EW_Test_ReadMTP(void) +{ + uint8_t uc_rtv=0; + uint8_t addr=checker_runcfg.params[0]; + uint8_t len=checker_runcfg.params[1]; + delay_ms(50); + uc_rtv|EW_ReadMTP(checker_runcfg.netid,addr,EW_RunBuf,len); + Checker_SetRtv((uint16_t *)EW_RunBuf,checker_runcfg.rtv_count); + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); +} +// 写mtp +void EW_Test_WriteMTP(void) +{ + uint8_t uc_rtv=0; + uint8_t addr=checker_runcfg.params[0]; + uint8_t len=checker_runcfg.params[1]; + delay_ms(50); + memcpy(EW_RunBuf,&checker_runcfg.params[1],len); + uc_rtv |= EW_WriteMTP(checker_runcfg.netid,addr,EW_RunBuf,len); + Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); +} + + + @@ -986,6 +1011,10 @@ void EW_Empty(void) + + + + CheckerTask ewtaskArray[CHECKER_MAXID_COUNT] ={ Checker_PowerPrapare, //0 电源准备 Checker_WaitDelay, //1 延时等待 @@ -1022,6 +1051,9 @@ EW_Test_WriteUID, //31 写入三码数据 EW_Test_VerifyUID, //32 验证三码数据 CheckerExt_SetUID, //33 配置三码数据到小板 CheckerExt_Slot, //34 任务插槽 +EW_Test_ReadMTP, //35 读取mtp +EW_Test_WriteMTP, //36 写入mtp +CheckerExt_SetCbv, //37 设置电阻校准值 (void*)0 //数组结束 }; diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c index a722c3c..a852b4a 100644 --- a/source/elec_det/interface/JQChecker.c +++ b/source/elec_det/interface/JQChecker.c @@ -4,6 +4,7 @@ #include "base/utility.h" #include "hardware/power.h" #include "JQChecker.h" +#include "CheckerExt.h" /* @brief 统计模块的上电充能,具有电压设置功能,采集档位 R10_0p1mA_1p6mA_UC @@ -1264,6 +1265,7 @@ CheckerExt_CalcErr ,//39 计算异常 CheckerExt_Repeat ,//40 重新执行任务 CheckerExt_SetUID ,//41 设置uid数据到小板 CheckerExt_Slot ,//42 任务插槽 +CheckerExt_SetCbv ,//43 设置电阻校准值 (void*)0 //数组结束 }; diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index e54b0aa..8b8d937 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,8 +6,8 @@ -#define BUILD_DATE "2023-12-19 15:39:10" -#define SOFT_VERSION "2.08" +#define BUILD_DATE "2023-12-20 17:27:12" +#define SOFT_VERSION "2.09" diff --git a/source/prebuild.py b/source/prebuild.py index a0f512e..ec3fc4b 100644 --- a/source/prebuild.py +++ b/source/prebuild.py @@ -7,7 +7,7 @@ import mycopy # 定义软件版本号 -SOFT_VERION = "2.08" +SOFT_VERION = "2.09" diff --git a/source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S b/source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S index c6d0d29..7ba6c19 100644 --- a/source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S +++ b/source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S @@ -177,10 +177,12 @@ rt_hw_interrupt_thread_switch PROC ENDP IMPORT rt_hw_hard_fault_exception + IMPORT bk_reboot_hard_err EXPORT HardFault_Handler HardFault_Handler PROC ; get current context + BL bk_reboot_hard_err B . TST lr, #0x04 ; if(!EXC_RETURN[2]) ITE EQ diff --git a/source/task/tran_for_broadcast.c b/source/task/tran_for_broadcast.c index 8f72c1a..e7e6030 100644 --- a/source/task/tran_for_broadcast.c +++ b/source/task/tran_for_broadcast.c @@ -26,7 +26,13 @@ [4...n]=数据 数据域格式 -[0]=小板地址,[1]=数据长度,[2...n]=数据 +[0]=检测模式0,只检测,返回原始检测结果;模式1,检测并添加任务插槽,只返回异常代码和任务插槽数据; +模式2,检测并执行任务插槽,返回原始检测数据和任务插槽数据; +模式3,只执行任务插槽,返回异常代码和插槽数据 +[1...n]小板数据 + +小板数据格式 +[0]=小板地址(0x1f时为通用数据,每个小板都可以使用),[1]=数据长度,[2...n]=数据 单个任务数据格式 [0]=插槽序号,[1]=任务id,[2]=参数个数(u16) @@ -80,7 +86,7 @@ static void slave_get_self(slave_def *s) while(offdata,off); slave_len=arr_get(s->data,off+1); - if(addr==elec_local_addr()){ + if((addr==elec_local_addr())||(addr==0x1f)){ d=arr_data(s->data)+off+2; arr_appends(expat,d,slave_len); break; @@ -141,6 +147,7 @@ static int run_task_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_ array_def *r=0; array_def *check=0; uint8_t *d; + uint8_t ret_mode=0; pack_all=arr_get(data,0)|(arr_get(data,1)<<8); pack_curr=arr_get(data,2); pack_size=arr_get(data,3); @@ -160,13 +167,29 @@ static int run_task_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_ } else if(arr_length(s->data)==pack_all){ // 接收完成后执行命令 - r=arr_creat(); + ret_mode=arr_get(s->data,0); + arr_remove(s->data,0,1); slave_get_self(s); slave_adds(s); - check=elec_check_with_scheme(0); - arr_append(r,arr_get(check,0)); - slave_creat_retdata(s,r); - emit tran_reply_signal(u->p,arr_temp(r)); + if(ret_mode!=3){ + check=elec_check_with_scheme(0); + }else{ + check=elec_check_slot(); + } + if(ret_mode==0){ + // 模式0,只返回检测数据 + emit tran_reply_signal(u->p,arr_temp(check)); + }else if((ret_mode==1)||(ret_mode==3)){ + // 模式1,返回异常代码和任务插槽数据 + r=arr_creat(); + arr_append(r,arr_get(check,0)); + slave_creat_retdata(s,r); + emit tran_reply_signal(u->p,arr_temp(r)); + }else if(ret_mode==2){ + // 模式2,返回检测数据和任务插槽数据 + slave_creat_retdata(s,check); + emit tran_reply_signal(u->p,arr_temp(check)); + } } return 0; }