From ed9e4c0c3e3d034a46828393d1b4787b38b6f432 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Tue, 10 Oct 2023 18:03:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E6=B5=81=E7=A8=8B=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checher_slave.uvprojx | 18 ++- doc/JW3425_boot_v10.bin | Bin 0 -> 4056 bytes doc/{jwt_program.jwt => JW3425_boot_v10.jwt} | Bin 16384 -> 16412 bytes doc/JW3425_boot_v8.bin | Bin 3992 -> 0 bytes doc/creat_jwt_boot.py | 18 ++- source/ReadMe.txt | 4 + source/elec_det/driver/EWDriver.c | 65 +++++++---- source/elec_det/elec_cmd.c | 10 +- source/elec_det/elec_det.c | 4 +- source/elec_det/interface/EWChecker.c | 110 ++++++++++++++----- source/main/compiler_info.h | 2 +- source/task/tran_for_slave.c | 7 ++ 12 files changed, 169 insertions(+), 69 deletions(-) create mode 100644 doc/JW3425_boot_v10.bin rename doc/{jwt_program.jwt => JW3425_boot_v10.jwt} (78%) delete mode 100644 doc/JW3425_boot_v8.bin diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index 89cf810..6be32e7 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -10,7 +10,7 @@ app 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -185,7 +185,6 @@ 0 0 0 - 0 0 0 8 @@ -352,7 +351,7 @@ 0 0 0 - 4 + 0 @@ -1248,7 +1247,6 @@ 0 0 0 - 0 0 0 8 @@ -1415,7 +1413,7 @@ 0 0 0 - 4 + 0 @@ -1862,7 +1860,7 @@ 2 2 2 - 0 + 2 @@ -2926,7 +2924,7 @@ 2 2 2 - 0 + 2 @@ -3468,7 +3466,7 @@ 2 2 2 - 0 + 2 @@ -3572,7 +3570,7 @@ 2 2 2 - 0 + 2 @@ -3651,7 +3649,7 @@ 2 2 2 - 0 + 2 diff --git a/doc/JW3425_boot_v10.bin b/doc/JW3425_boot_v10.bin new file mode 100644 index 0000000000000000000000000000000000000000..ec66ab81e8d6f00d692fccb284a3b87922e45f12 GIT binary patch literal 4056 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,(num>>16)&0xff,(num>>24)&0xff]) +def arr_from_str(txt:str): + t=bytearray(txt.encode(encoding="utf-8")) + t+=arr_byte_copy(0,1) + return t + def crc32(data:bytearray): temp=0 @@ -57,8 +62,13 @@ def creat(): d+=arr_from_int(0x55aa6699) d+=arr_byte_copy(0x00,1024*16-len(d)) - print("crc32 of all data:",hex(crc32(d))) - print("crc32 for 0x1000:",hex(crc32(d[4096:]))) + crc_all=crc32(d) + crc_app=crc32(d[4096:]) + print("crc32 of all data:",hex(crc_all)) + print("crc32 for 0x1000:",hex(crc_app)) + d+=arr_from_int(crc_all) + d+=arr_from_int(crc_app) + d+=arr_from_str(OUT_PATH) with open(OUT_PATH,"wb+") as f: f.write(d) diff --git a/source/ReadMe.txt b/source/ReadMe.txt index da659ca..6944490 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -194,3 +194,7 @@ 2023.10.9 解决任务重试会导致返回数据长度增加的问题 修改jwt读取空闲判线算法以自适应返回电流挡位,未验证 +2023.10.10 + 自适应回复电流挡位,boot与app中均通信正常 + 全流程升级验证成功 + 拟实现主机发开始检测之后等待300ms再启动检测,防止主机未收到回应 diff --git a/source/elec_det/driver/EWDriver.c b/source/elec_det/driver/EWDriver.c index 1bab9f1..ff0697c 100644 --- a/source/elec_det/driver/EWDriver.c +++ b/source/elec_det/driver/EWDriver.c @@ -7,6 +7,7 @@ #include "hardware/power.h" #include "ewdriver.h" #include "hardware/timer_cfg.h" +#include "debug.h" static volatile EWBus_Mod_en bus_mod = OFF_MOD; static volatile CurrentSample_Range_eu buscurrent_range = Current_Max; @@ -474,6 +475,13 @@ static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t static uint16_t us_plus_H,us_plus_H2;//高电平采用次数 static uint16_t us_plus_T,us_plus_T2;//采样周期 uint16_t idle_line = 0; +typedef struct{ + uint16_t cur_idle; + uint16_t cur_idle_ad; + uint16_t cur_high_value; + uint16_t cur_idle_line; + uint16_t cur_max; +}firebus_def; uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) { uint32_t ul_ad_sample; @@ -483,7 +491,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) uint32_t us_dataT_Or;//数据周期 uint32_t us_temp1,us_temp2; uint16_t ad_max = 0,ad_max_temp = 0; - uint16_t ad_high_value=0; + firebus_def fire_dat={0}; + uint8_t ret=0; CurrentSample_Range_eu range = buscurrent_range;//档位保存 Power_SetSampleCurrentRange(R10_2mA_30mA_MC); ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HFAST); @@ -498,6 +507,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) //获取中电平电流 PBout(I2IC_SCL_Pin_Nu) = 1 ; DMod_GetIdle2V(); + fire_dat.cur_idle=SMod_Read_Idle_C; + fire_dat.cur_idle_ad=ADC_GetCurADCFast(); PBout(I2IC_SCL_Pin_Nu) = 0 ; //读取指定长度数据 //读取单字节数据 @@ -513,25 +524,30 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) ad_max = ul_ad_sample; if(ul_ad_sample > SMod_Read_Idle_C) { - us_plus_H++; - ad_high_value=ad_high_value/2+ul_ad_sample/2; + if(ul_ad_sample-SMod_Read_Idle_C>50){ + us_plus_H++; + fire_dat.cur_high_value=fire_dat.cur_high_value/2+ul_ad_sample/2; + }else{ + SMod_Read_Idle_C=ul_ad_sample; + } }else{ us_plus_H = 0; - ad_high_value=0; + fire_dat.cur_high_value=0; } delay_us(2); us_time_out--; } while((us_plus_H < 4) && (us_time_out > 0)); + fire_dat.cur_max=ad_max; if(us_time_out < 1)//等待起始信号超时 { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 1; + ret=1; + goto end; } // 空闲判线以最高电平为基准 - SMod_Read_Idle_C=ad_high_value-50; + SMod_Read_Idle_C=(SMod_Read_Idle_C+fire_dat.cur_high_value)/2; + fire_dat.cur_idle_line=SMod_Read_Idle_C; while(len > 0) { @@ -548,9 +564,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) // idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C; if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0) { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 2; + ret=2; + goto end; } if(us_plus_H2 > (us_plus_T2- us_plus_H2)) { @@ -602,34 +617,37 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out) idle_line = SMod_Read_Idle_C; if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0) { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 4; + ret=4; + goto end; } ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f); us_time_out++; }while(us_time_out < 13); if(ul_check_falg == 0) { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 5; + ret=5; + goto end; } if(us_time_out != 9) { - EW_DIFF_MOD_H; - Power_SetSampleCurrentRange(range); - return 6; + ret=6; + goto end; } ul_data >>= 2; *buf = (uint8_t)ul_data; buf++; len--; } - delay_us(time_out >> 1); + //delay_us(time_out >> 1); + + end: EW_DIFF_MOD_H; Power_SetSampleCurrentRange(range); - return 0; + if(ret){ + DBG_LOG("cur_idle=%d,high_value=%d,idle_line=%d.",fire_dat.cur_idle, fire_dat.cur_high_value,fire_dat.cur_idle_line); + DBG_LOG("cur_max=%d,cur_idle_ad=%d",fire_dat.cur_max,fire_dat.cur_idle_ad); + } + return ret; } @@ -745,7 +763,8 @@ void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag) */ void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag) { - DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8); + //DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8); + DMod_SendBytesSelf(buf,len,200,rw_flag,CheckXOR_8); } diff --git a/source/elec_det/elec_cmd.c b/source/elec_det/elec_cmd.c index 5f2cae4..a8e16ad 100644 --- a/source/elec_det/elec_cmd.c +++ b/source/elec_det/elec_cmd.c @@ -13,6 +13,12 @@ +#define UPDATA_CRC_ALL ((uint32_t *)(MC_CODE_ADDR+16*1024))[0] +#define UPDATA_CRC_APP ((uint32_t *)(MC_CODE_ADDR+16*1024))[1] +#define UPDATA_FILE_NAME ((const char *)(MC_CODE_ADDR+16*1024+8)) + + + // 运行检测方案 static int cmd_check(list_def *argv) { @@ -63,7 +69,9 @@ static int cmd_iic_updata(list_def *argv) checker_runcfg.params[0]=(uint16_t)mtp_addr; checker_runcfg.params[1]=(uint16_t)data_length; checker_runcfg.param_count=2; - crc32=Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024); + //crc32=Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024); + crc32=UPDATA_CRC_ALL; + cmd_print("rom name:%s.",UPDATA_FILE_NAME); boardinfo_un.boardinfo.mc_ICodeCrc32=crc32; cmd_print("crc32=0x%04x.",crc32); diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index d062442..de2e454 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -73,13 +73,13 @@ uint8_t elec_local_addr(void) // 设置led1状态 void elec_led1_power(int power) { - LED1_Out=power?1:0; + LED1_Out=power?0:1; } // 设置led2状态 void elec_led2_power(int power) { - LED2_Out=power?1:0; + LED2_Out=power?0:1; } diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index b5ed6b5..b6b7e64 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -15,17 +15,21 @@ #define UPDATA_PACK_LEN 128 #define UPDATA_BASE_ADDR 0x1000 #define UPDATA_DATA_LEN (12*1024) -#define UPDATA_FLAG_ADDR (0x3c7c) +#define UPDATA_FLAG_ADDR (0x7c) //#define UPDATA_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55}) #define UPDATA_FLAG ((uint8_t []){0xaa,0xbb,0xcc,0xdd}) +#define UPDATA_CRC_ALL ((uint32_t *)(MC_CODE_ADDR+16*1024))[0] +#define UPDATA_CRC_APP ((uint32_t *)(MC_CODE_ADDR+16*1024))[1] + // 擦除 -static uint8_t EW_Erease(void) +static uint8_t EW_bootErease(void) { uint8_t data[3]={0xfe,0x00,0x00}; uint8_t read[4]={0}; uint8_t ret=0; DMod_SendBytesXor(data,2,1); + delay_ms(10); ret=DMod_ReadBytesXor(read,4,100); DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); return ret; @@ -33,14 +37,14 @@ static uint8_t EW_Erease(void) static int cmd_jwt_boot_erase(list_def *argv) { int ret=0; - ret=EW_Erease(); + ret=EW_bootErease(); return ret; } commend_export(jwt_boot_erase,cmd_jwt_boot_erase,"jwt srase in boot") // 跳转 -static uint8_t EW_Jump(void) +static uint8_t EW_bootJump(void) { uint8_t data[3]={0xf9,0x00,0x00}; uint8_t read[4]={0}; @@ -53,19 +57,20 @@ static uint8_t EW_Jump(void) static int cmd_jwt_boot_jump(list_def *argv) { int ret=0; - ret=EW_Jump(); + ret=EW_bootJump(); return ret; } commend_export(jwt_boot_jump,cmd_jwt_boot_jump,"jwt jump in boot") // 充电 -static uint8_t EW_Charg(void) +static uint8_t EW_bootCharg(void) { uint8_t data[4]={0xf8,0x01,0x01,0x00}; uint8_t read[4]={0}; uint8_t ret=0; DMod_SendBytesXor(data,3,1); + delay_ms(2); ret=DMod_ReadBytesXor(read,4,100); DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); return ret; @@ -73,7 +78,7 @@ static uint8_t EW_Charg(void) static int cmd_jwt_boot_charg(list_def *argv) { int ret=0; - ret=EW_Charg(); + ret=EW_bootCharg(); return ret; } commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot") @@ -81,7 +86,7 @@ commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot") // 放电 -static uint8_t EW_DisCharg(void) +static uint8_t EW_bootDisCharg(void) { uint8_t data[4]={0xf8,0x01,0x00,0x00}; uint8_t read[4]={0}; @@ -94,7 +99,7 @@ static uint8_t EW_DisCharg(void) static int cmd_jwt_boot_discharg(list_def *argv) { int ret=0; - ret=EW_Charg(); + ret=EW_bootDisCharg(); return ret; } commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot") @@ -103,7 +108,7 @@ commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot") // 发送数据 // len 最长为128字节 -static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len) +static uint8_t EW_bootWrite(uint16_t addr,uint8_t *d,uint16_t len) { uint8_t ret=0; uint8_t read[4]={0}; @@ -114,26 +119,31 @@ static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len) buf[2]=addr&0xff; buf[3]=addr>>8; rt_memcpy(&buf[4],d,len); + LED2_Out=0; DMod_SendBytesXor(buf,len+2+2,1); + LED2_Out=1; ret=DMod_ReadBytesXor(read,4,100); rt_free(buf); - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + if(ret){ + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + } return ret; } // 校验 -static uint8_t EW_CheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc) +static uint8_t EW_bootCheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc) { uint8_t ret=0; uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8}; uint8_t read[4+4]={0}; DMod_SendBytesXor(cmd,6,1); + delay_ms(10); ret=DMod_ReadBytesXor(read,8,100); if(ret==0){ if(crc){ - *crc=(read[3])|(read[4]<<8)|(read[5]<<16)|(read[6]<<24); + *crc=(read[3]<<24)|(read[4]<<16)|(read[5]<<8)|(read[6]<<0); } } DBG_LOG("addr_start=0x%04x,addr_end=0x%04x.",adr_start,adr_end); @@ -145,9 +155,10 @@ static int cmd_jwt_boot_checkcrc(list_def *argv) { int ret=0; uint32_t crc=0; - ret=EW_CheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc); + ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc); cmd_print("jwt crc32=0x%04x.",crc); - crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + crc=UPDATA_CRC_APP; cmd_print("local crc32=0x%04x.",crc); return ret; } @@ -156,7 +167,7 @@ commend_export(jwt_boot_checkcrc,cmd_jwt_boot_checkcrc,"jwt checkcrc in boot") // 读取 -static uint8_t EW_Read(uint16_t adr,uint8_t *buf,uint16_t len) +static uint8_t EW_bootRead(uint16_t adr,uint8_t *buf,uint16_t len) { uint8_t ret=0; uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len}; @@ -198,11 +209,35 @@ static int cmd_jwt_app_commtest(list_def *argv) commend_export(jwt_app_commtest,cmd_jwt_app_commtest,"jwt commtest in app") + +// app:读取数据 +static int EW_appRead(void) +{ + uint8_t read_buf[4]={0}; + int ret=0; + uint8_t addr=(uint8_t)(UPDATA_FLAG_ADDR/4); + DBG_LOG("addr=0x%02x.",addr); + ret=EW_ReadMTP(1,addr,read_buf,4); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read_buf[0],read_buf[1],read_buf[2],read_buf[3]); +} +static int cmd_jwt_app_read(list_def *argv) +{ + int ret=0; + ret=EW_appRead(); + return ret; +} +commend_export(jwt_app_read,cmd_jwt_app_read,"jwt read in app") + + + + + // 升级 void EW_Updata(void) { Checker_RunCfg_st *cfg=&checker_runcfg; uint8_t ret=0; + uint8_t read_buf[4]={0}; uint8_t *data=(uint8_t *)MC_CODE_ADDR+UPDATA_BASE_ADDR; uint16_t len=UPDATA_DATA_LEN; uint16_t addr=UPDATA_BASE_ADDR; @@ -210,38 +245,57 @@ void EW_Updata(void) uint32_t crc=0; uint32_t crc_module=0; delay_ms(100); - ret=EW_Charg(); + ret=EW_bootCharg(); if(ret) {ret=1;goto err;} delay_ms(6000); - ret=EW_Erease(); + ret=EW_bootErease(); if(ret) {ret=2;goto err;} delay_ms(600); while(len>0){ pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len; - ret=EW_Write(addr,data,pack_len); + LED1_Out=!LED1_Out; + ret=EW_bootWrite(addr,data,pack_len); addr+=pack_len; data+=pack_len; len-=pack_len; if(ret) {ret=3;goto err;} - delay_ms(50); + delay_ms(1); } - crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + crc=UPDATA_CRC_APP; DBG_LOG("local crc:0x%04x.",crc); - ret=EW_CheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module); + ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module); DBG_LOG("module crc:0x%04x.",crc_module); if(ret) {ret=4;goto err;} if(crc!=crc_module){ret=5;goto err;} delay_ms(50); - ret=EW_Jump(); + ret=EW_bootJump(); if(ret) {ret=6;goto err;} - delay_ms(100); + delay_ms(6000); ret=EW_EnWriteMTP(0,1); if(ret) {ret=7;goto err;} - delay_ms(100); - // 数据溢出 -// ret=EW_WriteMTP(0,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4); + DBG_LOG("EW_EnWriteMTP success."); + delay_ms(1); + + ret=EW_WriteMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4); if(ret) {ret=8;goto err;} - delay_ms(100); + DBG_LOG("EW_WriteMTP success."); + delay_ms(1); + ret=EW_ReadMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),read_buf,4); + if(ret) {ret=9;goto err;} + if(memcmp(read_buf,UPDATA_FLAG,4)!=0){ + DBG_LOG("read_buf=0x%02d,0x%02d,0x%02d,0x%02d.",read_buf[0],read_buf[1],read_buf[2],read_buf[3]); + ret=10;goto err; + } + DBG_LOG("EW_ReadMTP check success."); + delay_ms(1); + XTBUS_OFF; + delay_ms(1000); + XTBUS_ON; + delay_ms(6000); + ret=EW_appCommTest(); + if(ret) {ret=11;goto err;} + DBG_LOG("EW_appCommTest success."); err: DBG_LOG("ret=%d",ret); diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index c35c2c9..ccc35b6 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-10-09 22:54:36" +#define BUILD_DATE "2023-10-10 16:36:03" #define SOFT_VERSION "0.03" diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index 23c7055..9bca286 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -19,11 +19,18 @@ typedef struct{ ucport_def u; rt_timer_t timer; + array_def *data; }slave_def; + +static void slave_dolater(ucport_def *u,int delay_ms) +{ + slave_def *s=(slave_def *)u; +} + static void slave_del(ucport_def *u) { slave_def *s=(slave_def *)u;