diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index 9ece02a..c01ce06 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -639,16 +639,16 @@ 1 - 0 - 0x20007958 + 1 + 0x20003b00 0 2 - 0 - 0x0803B000 + 1 + 0x200079a0 0 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index a897874..da73e89 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -308,3 +308,7 @@ V2.10 添加写入固定延时任务 EW发送数据前固定50ms延时 can总线发送采用等待的方式 +2023.12.25 + 解决EW写流水号数组越界的bug + 解决0x20指令只会解析第一个槽参数的bug + ew写延时添加crc8 diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index 4e55331..c160dab 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -1021,8 +1021,9 @@ void EW_Test_ReadSN(void) uint8_t uc_rtv=0; uint8_t addr=9; uint8_t len=4; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[4]; + uint8_t arr[6]; uint32_t data; }temp_def; temp_def temp={0}; @@ -1057,13 +1058,15 @@ void EW_Test_WriteSN(void) uint8_t uc_rtv=0; uint8_t addr=9; uint8_t len=4; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[4]; + uint8_t arr[6]; uint32_t data; }temp_def; temp_def temp={0}; uint32_t sn; delay_ms(50); + sn=checker_runcfg.params[0]|(checker_runcfg.params[1]<<16); uc_rtv|=EW_ReadMTP(checker_runcfg.netid,addr,temp.arr,len); if(uc_rtv){ uc_rtv=1; @@ -1095,9 +1098,10 @@ void EW_Test_WriteDelay(void) { uint8_t uc_rtv=0; uint8_t addr[2]={0x18/4,0xa8/4}; - uint8_t len=2; + uint8_t len=3; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[2]; + uint8_t arr[6]; uint16_t data; }temp_def; temp_def temp={0}; @@ -1113,6 +1117,7 @@ void EW_Test_WriteDelay(void) // } delay_ms(50); temp.data=delay; + temp.arr[2]=CheckCRC_8(temp.arr,2); uc_rtv |= EW_WriteMTP(checker_runcfg.netid,addr[i],temp.arr,len); if(uc_rtv){ uc_rtv=2+i; diff --git a/source/elec_det/interface/JQChecker.c b/source/elec_det/interface/JQChecker.c index 49eb147..d6673fd 100644 --- a/source/elec_det/interface/JQChecker.c +++ b/source/elec_det/interface/JQChecker.c @@ -1233,8 +1233,9 @@ void JQ_Test_WriteSN(void) uint8_t uc_ack; uint8_t uc_otpAddr = 20; uint8_t uc_writeCount = 4; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[4]; + uint8_t arr[6]; uint32_t data; }temp_def; temp_def temp={0}; @@ -1295,8 +1296,9 @@ void JQ_Test_ReadSN(void) uint8_t uc_ack; uint8_t uc_otpAddr = 20; uint8_t uc_writeCount = 4; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[4]; + uint8_t arr[6]; uint32_t data; }temp_def; temp_def temp={0}; @@ -1347,8 +1349,9 @@ void JQ_Test_WriteDelay(void) uint8_t uc_ack; uint8_t uc_otpAddr = 15; uint8_t uc_writeCount = 2; + // 缓存开大一点防止数据越界 typedef union{ - uint8_t arr[2]; + uint8_t arr[4]; uint16_t data; }temp_def; temp_def temp={0}; diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index d867b0d..1d8c336 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-12-22 18:12:46" +#define BUILD_DATE "2023-12-25 17:21:14" #define SOFT_VERSION "2.10" diff --git a/source/task/tran_for_broadcast.c b/source/task/tran_for_broadcast.c index 1ecbbeb..ecda370 100644 --- a/source/task/tran_for_broadcast.c +++ b/source/task/tran_for_broadcast.c @@ -113,14 +113,14 @@ static void slave_adds(self_def *s) task_slot_delete(); slot=task_slot_init(); while(offslot_index=arr_get(s->data,0); - t->task_id=arr_get(s->data,1); - t->par_count=arr_get(s->data,2); - t->ret_count=arr_get(s->data,3); - t->errcode=arr_get(s->data,4); + t->slot_index=arr_get(s->data,off); + t->task_id=arr_get(s->data,off+1); + t->par_count=arr_get(s->data,off+2); + t->ret_count=arr_get(s->data,off+3); + t->errcode=arr_get(s->data,off+4); t->exe_flag=0; - t->task_index=arr_get(s->data,5); - memcpy(t->params,arr_data(s->data)+6,t->par_count*2); + t->task_index=arr_get(s->data,off+5); + memcpy(t->params,arr_data(s->data)+off+6,t->par_count*2); task_slot_add_item(slot,t); off+=6+t->par_count*2; } @@ -233,6 +233,8 @@ static ucport_def *run_task(tran_def *t, uint8_t cmd,array_def *data) return (ucport_def *)u; } transmit_export(ym_slave,0x20,run_task) +// 0x21 是上位机协议的命令字 +transmit_export(ym_checker,0x21,run_task)