金牌会员
 
- 积分
- 1115
- 金钱
- 1115
- 注册时间
- 2016-8-1
- 在线时间
- 235 小时
|
20金钱
本帖最后由 rindy 于 2016-9-17 18:45 编辑
试验过程中我们需要用发送一个5k大小的数组,然后每包只能发8个字节,但是每包之间必须加5ms的延时接收方才不会丢失数据,否则就会丢失大量数据,但是加延时就会变得非常慢,这要怎么办啊?下面是我的发送函数u8 Can_Send_Msg(u8* msg,u8 len)
{
u8 mbox;
u16 i=0;
CanTxMsg TxMessage;
TxMessage.StdId=Ext_ID; // 标准标识符
// TxMessage.ExtId=Ext_ID; // 设置扩展标识符
TxMessage.IDE=CAN_Id_Standard; // 标准帧
TxMessage.RTR=CAN_RTR_Data; // 数据帧
TxMessage.DLC=len; // 要发送的数据长度
for(i=0;i<len;i++)
TxMessage.Data=msg;
mbox= CAN_Transmit(CAN1, &TxMessage); //如果有空邮箱,就会返回空邮箱号(0,1,2),否则返回CAN_TxStatus_NoMailBox(4)
printf("mbox=%d\r\n",mbox);//打印空邮箱号 if(mbox==CAN_TxStatus_NoMailBox) {printf("没有空邮箱\r\n");}
i=0;
while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;
printf("CAN_TransmitStatus(CAN1, mbox)=%x\r\n",CAN_TransmitStatus(CAN1, mbox)); //打印发送是否成功的状态,如果返回0x01,代表发送成功
if(i>=0XFFF)
{printf("chaoshi1\r\n");}
printf("执行can发送一条id=0x%x数据r\n",TxMessage.StdId);
return 0;
}
for(i=0;i<10;i++)//不加延时发送了10个报文,会丢失报文,但是把这个5ms延时加上去以后就不会丢失报文,但是这个延时当数据量一大以后就感觉特别长,所以该怎么解决呢
{
Can_Send_Msg(can_buf_test,8);//发送一个报文
//delay_ms(5);
}
然后从打印的情况分析的话,在发送端这方,可以看到每次发送都是有空邮箱的(返回的空邮箱号是0),并且发送状态是1(1就代表是发送成功的),这里是不是说明发送方就是没问题的,但是呢接收方却没打印出全部数据(数据包丢失),就是这里不知道问题出在哪里,希望遇到过这类问题的小伙伴提点一下,该从哪里下手。
|
-
发送方发送了10个报文
-
接收方只接收了8个报文
|