From bcbd02a72cbe1b37eb700d618bc189d6d7d2eed0 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Mon, 8 Jan 2024 18:04:05 +0800 Subject: [PATCH] =?UTF-8?q?=20=20=20=20V2.13=20=E4=BD=BF=E7=94=A8=E6=96=B0?= =?UTF-8?q?=E7=9A=84can=E5=B8=A7=E5=9B=9E=E5=A4=8D=E6=95=B0=E6=8D=AE=20=20?= =?UTF-8?q?=20=20=20=E8=A7=A3=E5=86=B3ew=E8=87=AA=E6=A3=80=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=208=E5=AF=BC=E8=87=B4=E5=B0=8F=E6=9D=BF=E6=AD=BB?= =?UTF-8?q?=E6=9C=BA=E7=9A=84bug=EF=BC=8C=E8=87=AA=E6=A3=80=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=80=BC=E9=99=A4=E4=BB=A5400=EF=BC=8C=E5=8D=95?= =?UTF-8?q?=E4=BD=8D0.1ms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + checher_slave.uvoptx | 35 +++-- doc/__csmzm_app.bin | Bin 11264 -> 11264 bytes source/ReadMe.txt | 5 + source/codec/codec.c | 4 +- source/dev/dev_flash.c | 2 + source/elec_det/interface/EWChecker.c | 6 +- source/interface/if_can.c | 190 ++++++++++++-------------- source/interface/if_can.h | 17 +++ source/main/compiler_info.h | 4 +- source/prebuild.py | 2 +- source/rt_thread/core_delay.c | 22 +++ source/rt_thread/core_delay.h | 2 + source/soft/debug.c | 2 +- source/task/prot_uc.c | 36 +++-- source/task/tran_for_slave.c | 2 +- 16 files changed, 203 insertions(+), 127 deletions(-) diff --git a/.gitignore b/.gitignore index d2fe1a1..226621e 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ quest_info.txt bootcode.txt *.uvoptx build/ +doc/*.bin diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index 78a5865..50dd3ff 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -377,7 +377,24 @@ - + + + 0 + 0 + 185 + 1 +
134234652
+ 0 + 0 + 0 + 0 + 0 + 1 + .\source\rt_thread\libcpu\arm\cortex-m3\context_rvds.S + + \\checker_slave_app\source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S\185 +
+
0 @@ -388,16 +405,16 @@ 1 - 0 - 0x0803b800 + 1 + 0x20002CE0 0 2 - 1 - 0x200028C8 + 8 + 0x20007088 0 @@ -605,18 +622,18 @@ 0 0 - 108 + 185 1 -
134339522
+
134234652
0 0 0 0 0 1 - D:\work\SVN\鍐夊窛\mcu_program\checker_slave\source\rt_thread\board.c + .\source\rt_thread\libcpu\arm\cortex-m3\context_rvds.S - \\checker_slave_app\source/rt_thread/board.c\108 + \\checker_slave_app\source/rt_thread/libcpu/arm/cortex-m3/context_rvds.S\185
diff --git a/doc/__csmzm_app.bin b/doc/__csmzm_app.bin index ddb338f29939918da25a338b0356e6173ec9f738..201ce2fb7b49067aaf35390474234f780ec0765f 100644 GIT binary patch delta 2301 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 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 4efa6b0..5616df9 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -326,3 +326,8 @@ V2.12 sn为0时如果未写流水号则报错 2024.01.05 收到广播命令时重新初始化定时器,can总线添加发送时长超时判断,超时后自动重发 +2024.1.8 + V2.13 使用新的can帧回复数据 + 解决ew自检模式 8导致小板死机的bug,自检返回值除以400,单位0.1ms + + diff --git a/source/codec/codec.c b/source/codec/codec.c index 2113327..4978ca9 100644 --- a/source/codec/codec.c +++ b/source/codec/codec.c @@ -265,8 +265,8 @@ array_def *protm_decode(protu_def *p,array_def *data) int dst_addrs=arr_get(r,0)|(arr_get(r,1)<<8)|(arr_get(r,2)<<16); if((dst_addrs&(1<<(self_addr-1)))!=0){ p->silent=1; - // p->timer->write(p->timer,0); - p->timer->init(p->timer); + p->timer->write(p->timer,0); + // p->timer->init(p->timer); p->rank=calc_bit_num(dst_addrs,self_addr-1); p->num=calc_bit_num(dst_addrs,32); arr_remove(r,0,3); diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c index ef20de6..0bda2a5 100644 --- a/source/dev/dev_flash.c +++ b/source/dev/dev_flash.c @@ -304,6 +304,8 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len) { DBG_WARN("addr=%08x write/read data not equate.",addr); ret=3; + }else{ + ret=0; } rt_mutex_release(s->mutex); return ret; diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index c6e7041..1b2d8a4 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -438,7 +438,7 @@ void EW_Test_VerifyThreedCode(void) @brief 自检 @param 自检模式 @param1 自检时间ms -@rtv 自检模式0x08的回读数据 +@rtv 自检模式0x08的回读数据(0.1ms) */ void EW_Test_CheckSelf() { @@ -447,8 +447,10 @@ void EW_Test_CheckSelf() uint8_t uc_mode = checker_runcfg.params[0]; uc_rtv = EW_ChecSelf(checker_runcfg.netid,uc_mode,(uint8_t*)&ul_temp); delay_ms(checker_runcfg.params[1]); + // 250ns 除以400 单位0.1ms + ul_temp/=400; Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex); - Checker_SetRtv((uint16_t*)ul_temp,checker_runcfg.rtv_count); + Checker_SetRtv((uint16_t*)&ul_temp,checker_runcfg.rtv_count); } /* diff --git a/source/interface/if_can.c b/source/interface/if_can.c index 853354e..3729c21 100644 --- a/source/interface/if_can.c +++ b/source/interface/if_can.c @@ -4,6 +4,8 @@ #include "rthw.h" #include "elec_det.h" #include "board.h" +#include "core_delay.h" + CanRxMsg receive_message; static YeCanRxFrame_st canrx_st; static uint8_t Can_Device_ID = 0; @@ -61,18 +63,18 @@ void YeCanInit(void) Can_Device_ID = elec_local_addr(); yeid_un.Exide = 0; - yeid_un.yecanid.ACK = 0; - yeid_un.yecanid.FunClass = 0; - yeid_un.yecanid.Reserve1 = 0; - yeid_un.yecanid.Reserve0 = 0; - yeid_un.yecanid.SegFlag = 0; - yeid_un.yecanid.SegNum = 0; - yeid_un.yecanid.srcMACID = 0x00; + yeid_un.yecanid_old.ACK = 0; + yeid_un.yecanid_old.FunClass = 0; + yeid_un.yecanid_old.Reserve1 = 0; + yeid_un.yecanid_old.Reserve0 = 0; + yeid_un.yecanid_old.SegFlag = 0; + yeid_un.yecanid_old.SegNum = 0; + yeid_un.yecanid_old.srcMACID = 0x00; - yeid_un.yecanid.destMACID = 0x1F; + yeid_un.yecanid_old.destMACID = 0x1F; ul_mask = GetCanFilter(yeid_un); ul_can_mask =ul_mask; - yeid_un.yecanid.destMACID = Can_Device_ID; + yeid_un.yecanid_old.destMACID = Can_Device_ID; ul_filter = GetCanFilter(yeid_un); CAN_FilterInitStructure.CAN_FilterNumber = 0; @@ -86,14 +88,14 @@ void YeCanInit(void) CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInit(&CAN_FilterInitStructure); - yeid_un.yecanid.destMACID = 0x1E; - ul_filter = GetCanFilter(yeid_un); - CAN_FilterInitStructure.CAN_FilterNumber = 1; - CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; - CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;; - CAN_FilterInit(&CAN_FilterInitStructure); +// yeid_un.yecanid_old.destMACID = 0x1E; +// ul_filter = GetCanFilter(yeid_un); +// CAN_FilterInitStructure.CAN_FilterNumber = 1; +// CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; +// CAN_FilterInitStructure.CAN_FilterIdLow = ul_filter & 0x0FFFF;; +// CAN_FilterInit(&CAN_FilterInitStructure); - yeid_un.yecanid.destMACID = 0x1F; + yeid_un.yecanid_old.destMACID = 0x1F; ul_filter = GetCanFilter(yeid_un); CAN_FilterInitStructure.CAN_FilterNumber = 2; CAN_FilterInitStructure.CAN_FilterIdHigh = (ul_filter >> 16) & 0x0FFFF;; @@ -135,22 +137,18 @@ static uint32_t GetCanFilter(YeCanID_un yeid) @param 发送数据长度 @rtv 0 成功 1 失败 */ -timer_def *timer=0; + uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len,int delay_ms) { CanTxMsg transmit_message; uint8_t mailbox_number; YeCanID_un yeid_un; - int time_out = delay_ms*1000; + uint32_t time_out = delay_ms*1000; uint8_t uc_rtv = 0; uint32_t tick_start=0; - if(timer==0){ - timer=dev_get("timer"); - } - tick_start=timer->read(timer); + uint8_t pack_len; + tick_start=delay_get_us(); - //can_transmission_stop(CAN1,0); - /* initialize transmit message */ transmit_message.ExtId = 0x00; transmit_message.StdId = 0x00; transmit_message.RTR = CAN_RTR_DATA; @@ -162,87 +160,66 @@ uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, u yeid_un.yecanid.FunClass = 1; yeid_un.yecanid.SegFlag = 0; yeid_un.yecanid.SegNum = 0; - if(can_tx_mutex != RT_NULL) - { - if(RT_EOK != rt_mutex_take (can_tx_mutex,500)) - { - return 1; - } - } + yeid_un.yecanid.Reserve0=1;// 使用新协议 + if(len <= 8) { transmit_message.DLC = len; transmit_message.ExtId = yeid_un.Exide; memcpy(transmit_message.Data,txdata,8); - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - time_out -=20; - rt_hw_us_delay(20); - } - // if(time_out <= 0) - if((timer->read(timer)-tick_start)>=delay_ms) - { - uc_rtv = 1; - goto can0_tx_end; - } - goto can0_tx_end; - } - while(len > 8) - { - memcpy(transmit_message.Data,txdata,8); - len -= 8; - txdata += 8; - - if(yeid_un.yecanid.SegNum == 0) - { - yeid_un.yecanid.SegFlag = 0x01; - }else - { - yeid_un.yecanid.SegFlag = 0x02; - } - transmit_message.ExtId = yeid_un.Exide; - transmit_message.DLC = 8; - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - time_out = 5000; - while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - time_out -=20; - rt_hw_us_delay(20); - } - // if(time_out <= 0) - if((timer->read(timer)-tick_start)>=delay_ms) - { - uc_rtv = 1; - goto can0_tx_end; - } - yeid_un.yecanid.SegNum ++; - } - yeid_un.yecanid.SegFlag = 0x3; - memcpy(transmit_message.Data,txdata,len); - transmit_message.DLC = len; - transmit_message.ExtId = yeid_un.Exide; - mailbox_number = CAN_Transmit(CAN1, &transmit_message); - while(CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0) - { - - time_out -=20; - rt_hw_us_delay(20); - } - // if(time_out <= 0) - if((timer->read(timer)-tick_start)>=delay_ms) - { - uc_rtv = 1; - } + }else{ + while(len > 0) + { + pack_len=8; + if(len8){ + yeid_un.yecanid.SegFlag = 0x02; + }else{ + yeid_un.yecanid.SegFlag = 0x03; + } + len -= pack_len; + txdata += pack_len; + transmit_message.DLC = pack_len; + transmit_message.ExtId = yeid_un.Exide; + while(mailbox_number = CAN_Transmit(CAN1, &transmit_message),mailbox_number==CAN_TxStatus_NoMailBox) + //while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number)) + { + rt_hw_us_delay(20); + if(delay_check(tick_start,time_out)) + { + uc_rtv = 1; + goto can0_tx_end; + } + } + yeid_un.yecanid.SegNum ++; + } + } can0_tx_end: CAN0_TX_BUSY_Flag = 0; - rt_mutex_release(can_tx_mutex); return uc_rtv; } + + + + + + + + + + + + + typedef struct{ void (*end_irq)(void *t,uint32_t len); void *t; @@ -257,25 +234,38 @@ static self_def g_self; static void save_data(void) { YeCanID_un yeid_un; + uint8_t seg,seg_num,dstaddr; + yeid_un.Exide = receive_message.ExtId; + ul_exid = yeid_un.Exide << 3; + ul_exid &= ul_can_mask; + if(yeid_un.yecanid.Reserve0==0){ + seg=yeid_un.yecanid_old.SegFlag; + seg_num=yeid_un.yecanid_old.SegNum; + dstaddr=yeid_un.yecanid_old.destMACID; + }else{ + seg=yeid_un.yecanid.SegFlag; + seg_num=yeid_un.yecanid.SegNum; + dstaddr=yeid_un.yecanid.destMACID; + } + if((dstaddr!=elec_local_addr())&&(dstaddr!=0x1f)){ + return; + } if(receive_message.DLC > 0) { - yeid_un.Exide = receive_message.ExtId; - ul_exid = yeid_un.Exide << 3; - ul_exid &= ul_can_mask; - if(yeid_un.yecanid.SegFlag == 00) + if(seg == 00) { memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC); canrx_st.rx_index = receive_message.DLC; g_self.end_irq(g_self.t,canrx_st.rx_index); } - else if(yeid_un.yecanid.SegFlag == 0x01) + else if(seg == 0x01) { canrx_st.seg_num = 0; memcpy(canrx_st.rx_databuf,receive_message.Data,receive_message.DLC); canrx_st.rx_index = receive_message.DLC; - }else if(yeid_un.yecanid.SegFlag == 0x02) + }else if(seg == 0x02) { - if((canrx_st.seg_num+1) == yeid_un.yecanid.SegNum ) + if((canrx_st.seg_num+1) == seg_num ) { canrx_st.seg_num++; memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC); @@ -284,7 +274,7 @@ static void save_data(void) }else{ //error } - }else if(yeid_un.yecanid.SegFlag == 0x03) + }else if(seg == 0x03) { memcpy(canrx_st.rx_databuf+canrx_st.rx_index,receive_message.Data,receive_message.DLC); canrx_st.rx_index += receive_message.DLC; diff --git a/source/interface/if_can.h b/source/interface/if_can.h index a5b7ebc..06023ca 100644 --- a/source/interface/if_can.h +++ b/source/interface/if_can.h @@ -4,6 +4,8 @@ //#include "define.h" #include "stm32f10x_can.h" + + typedef struct{ uint32_t Reserve1 :3; uint32_t srcMACID :5; @@ -14,11 +16,26 @@ typedef struct{ uint32_t SegFlag :2; uint32_t SegNum :8; +}YeCanID_st_old; + + + +typedef struct{ + uint32_t SegNum :8; + uint32_t Reserve0 :2; + uint32_t ACK :1; + uint32_t FunClass :6; + uint32_t SegFlag :2; + uint32_t destMACID :5; + uint32_t srcMACID :5; + uint32_t Reserve1 :3; + }YeCanID_st; typedef union{ uint32_t Exide; YeCanID_st yecanid; + YeCanID_st_old yecanid_old; }YeCanID_un; diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 520f238..cc15846 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,8 +6,8 @@ -#define BUILD_DATE "2024-01-05 18:59:06" -#define SOFT_VERSION "2.12" +#define BUILD_DATE "2024-01-08 16:28:07" +#define SOFT_VERSION "2.13" diff --git a/source/prebuild.py b/source/prebuild.py index 8ea4956..e474221 100644 --- a/source/prebuild.py +++ b/source/prebuild.py @@ -7,7 +7,7 @@ import mycopy # 定义软件版本号 -SOFT_VERION = "2.12" +SOFT_VERION = "2.13" diff --git a/source/rt_thread/core_delay.c b/source/rt_thread/core_delay.c index f981743..462afe7 100644 --- a/source/rt_thread/core_delay.c +++ b/source/rt_thread/core_delay.c @@ -46,7 +46,29 @@ static uint32_t delay_get_tick(void) } +// 获取当前微妙数 +uint32_t delay_get_us(void) +{ + return ((uint32_t)DWT_CYCCNT/(get_sys_clocks_freq()/1000000)); +} +// 判断延时是否到,返回1已到,0未到 +int delay_check(uint32_t old,uint32_t wnd) +{ + uint32_t now=delay_get_us(); + if(now>=old){ + if((now-old)>=wnd){ + return 1; + } + }else{ + if((UINT32_MAX - old + now)>=wnd){ + return 1; + } + } + return 0; +} + +// 最长可以延时59s // 低于1ms的精确延时 void delay_us(uint32_t us) { diff --git a/source/rt_thread/core_delay.h b/source/rt_thread/core_delay.h index 7363b82..587f033 100644 --- a/source/rt_thread/core_delay.h +++ b/source/rt_thread/core_delay.h @@ -12,7 +12,9 @@ int delay_init(void); void delay_us(uint32_t us); +uint32_t delay_get_us(void); +int delay_check(uint32_t old,uint32_t wnd); diff --git a/source/soft/debug.c b/source/soft/debug.c index bc761f5..295419d 100644 --- a/source/soft/debug.c +++ b/source/soft/debug.c @@ -28,7 +28,7 @@ #define DBG_DEV_WRITE(d,len)\ {\ if(g_data.uart){\ - g_data.uart->write(g_data.uart,d,len);\ + g_data.uart->write(g_data.uart,d,len,1000);\ }\ } diff --git a/source/task/prot_uc.c b/source/task/prot_uc.c index c7a0276..9a2f0fe 100644 --- a/source/task/prot_uc.c +++ b/source/task/prot_uc.c @@ -13,6 +13,7 @@ #include "dev_flash.h" #include "mymisc.h" #include "elec_det.h" +#include "commend.h" @@ -251,7 +252,7 @@ protu_def *protu_creat(uart_def *uart) p->cmd=0xff;// 命令字不可能是0xff protu_set_endecode_fun(p); sprintf(name,"protu_t#%d",count); - rt_thread_t rt_t=rt_thread_create(name,protu_run,p,1024,5,20); + rt_thread_t rt_t=rt_thread_create(name,protu_run,p,1024,6,20); rt_thread_startup(rt_t); int bsp=sys_param()->uartbsp; if(bsp==9600) @@ -287,8 +288,8 @@ array_def *t; static void protu_send_later(void *ptr) { send_pkt_def *s=ptr; - protu_send(s->p,s->t,50); - arr_delete(s->t); + protu_send(s->p,s->t,1000); + // arr_delete(s->t); } static send_pkt_def g_send_pkt; @@ -318,7 +319,7 @@ static int protu_send_ontime(protu_def *p,send_pkt_def *s) //later_execute(protu_send_later,s,delay); while(p->timer->read(p->timer)<(tick+delay)); // protu_send_later(s); - return protu_send(s->p,s->t,wnd_tick-2); + return protu_send(s->p,s->t,wnd_tick-1); }else{ // 单播命令直接发送 @@ -327,12 +328,29 @@ static int protu_send_ontime(protu_def *p,send_pkt_def *s) } } - -static int protu_send_ontime_loop(protu_def *p,send_pkt_def *s) +static int g_send_failed_times; +static int protu_send_ontime_loop(protu_def *p,send_pkt_def *s,int retry) { - while(protu_send_ontime(p,s)==0); + // g_send_failed_times=0; + for(int i=0;it); return 0; } +static int send_failed(list_def *argv) +{ + cmd_print("send failed times=%d",g_send_failed_times); + return 0; +} + +commend_export(send_failed,send_failed,"print send_failed times") + @@ -348,7 +366,7 @@ void protu_reply_call(protu_def *p,array_def *data) if(t){ g_send_pkt.p=p; g_send_pkt.t=t; - protu_send_ontime_loop(p,&g_send_pkt); + protu_send_ontime_loop(p,&g_send_pkt,3); } } @@ -371,7 +389,7 @@ void protu_send_call(protu_def *p,uint8_t cmd,array_def *data) if(t){ g_send_pkt.p=p; g_send_pkt.t=t; - protu_send_ontime_loop(p,&g_send_pkt); + protu_send_ontime_loop(p,&g_send_pkt,3); } } diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index 31cfc1b..e68faed 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -392,7 +392,7 @@ static int write_data_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *er addr=g_updata.flash_addr+offset; ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len); array_def *r=arr_creat(); - arr_append(r,(ret!=0)); + arr_append(r,ret); emit tran_reply_signal(u->p,arr_temp(r)); return 0; }