收到广播命令时重新初始化定时器,can总线添加发送时长超时判断
This commit is contained in:
@@ -135,13 +135,20 @@ static uint32_t GetCanFilter(YeCanID_un yeid)
|
||||
@param 发送数据长度
|
||||
@rtv 0 成功 1 失败
|
||||
*/
|
||||
uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, uint16_t len)
|
||||
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;
|
||||
uint32_t time_out = 0;
|
||||
int 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);
|
||||
|
||||
//can_transmission_stop(CAN1,0);
|
||||
/* initialize transmit message */
|
||||
transmit_message.ExtId = 0x00;
|
||||
@@ -155,19 +162,6 @@ 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(srcaddr == 0x00 || srcaddr == 0x1f)
|
||||
{
|
||||
time_out = 0;
|
||||
while(time_out < 5)
|
||||
{
|
||||
elec_led1_power(0);
|
||||
rt_thread_mdelay(50);
|
||||
elec_led1_power(1);
|
||||
rt_thread_mdelay(50);
|
||||
time_out++;
|
||||
|
||||
}
|
||||
}
|
||||
if(can_tx_mutex != RT_NULL)
|
||||
{
|
||||
if(RT_EOK != rt_mutex_take (can_tx_mutex,500))
|
||||
@@ -182,13 +176,13 @@ uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, u
|
||||
memcpy(transmit_message.Data,txdata,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 --;
|
||||
time_out -=20;
|
||||
rt_hw_us_delay(20);
|
||||
}
|
||||
if(time_out == 0)
|
||||
// if(time_out <= 0)
|
||||
if((timer->read(timer)-tick_start)>=delay_ms)
|
||||
{
|
||||
uc_rtv = 1;
|
||||
goto can0_tx_end;
|
||||
@@ -214,10 +208,11 @@ uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, u
|
||||
time_out = 5000;
|
||||
while( CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0)
|
||||
{
|
||||
time_out --;
|
||||
time_out -=20;
|
||||
rt_hw_us_delay(20);
|
||||
}
|
||||
if(time_out == 0)
|
||||
// if(time_out <= 0)
|
||||
if((timer->read(timer)-tick_start)>=delay_ms)
|
||||
{
|
||||
uc_rtv = 1;
|
||||
goto can0_tx_end;
|
||||
@@ -229,16 +224,15 @@ uint8_t YeCan_SendFrame(uint8_t srcaddr,uint8_t dstaddr,const uint8_t* txdata, u
|
||||
transmit_message.DLC = len;
|
||||
transmit_message.ExtId = yeid_un.Exide;
|
||||
mailbox_number = CAN_Transmit(CAN1, &transmit_message);
|
||||
time_out = 5000;
|
||||
while(CAN_TxStatus_Ok != CAN_TransmitStatus(CAN1,mailbox_number) && time_out > 0)
|
||||
{
|
||||
|
||||
time_out --;
|
||||
time_out -=20;
|
||||
rt_hw_us_delay(20);
|
||||
}
|
||||
if(time_out == 0)
|
||||
// if(time_out <= 0)
|
||||
if((timer->read(timer)-tick_start)>=delay_ms)
|
||||
{
|
||||
|
||||
uc_rtv = 1;
|
||||
}
|
||||
|
||||
@@ -345,12 +339,12 @@ static int read(uart_def *u,uint8_t *b,int len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static int write(uart_def *u,const uint8_t *b,int len)
|
||||
static int write(uart_def *u,const uint8_t *b,int len,int timeout_ms)
|
||||
{
|
||||
uint8_t src=elec_local_addr();
|
||||
uint8_t dst=0;
|
||||
uint8_t ret;
|
||||
ret=YeCan_SendFrame(src,dst,b,len);
|
||||
ret=YeCan_SendFrame(src,dst,b,len,timeout_ms);
|
||||
if(ret==0) return len;
|
||||
else return 0;
|
||||
}
|
||||
@@ -427,11 +421,11 @@ static int h_read(uart_def *u,uint8_t *b,int len)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static int h_write(uart_def *u,const uint8_t *b,int len)
|
||||
static int h_write(uart_def *u,const uint8_t *b,int len,int timeout_ms)
|
||||
{
|
||||
h_self_def *h=&g_hself;
|
||||
uart_def *s=h->dev[h->dev_index];
|
||||
return s->write(s,b,len);
|
||||
return s->write(s,b,len,timeout_ms);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user