再来请教 CAN :数据 会重发 一般是怎么引起的?

2020-01-01 17:56发布


如图

2019-09-26_183315.png (5.1 KB, 下载次数: 0) 下载附件 2019-9-26 18:34 上传

蓝 {MOD} 帧在前面已经发过了,结果又重新传了一次,DATA5是一个计数器,发一次加1

这样排除了软件中重新调用的可能;

===

发送方式用的是 自动重发

以下是发送函数
                MailBox =  CAN_Transmit(CANx, &CanToCanTxMsg[CanTxMsgOut].CanTransStruc);
                if(MailBox==CAN_TxStatus_NoMailBox)
                {
                        return;//break;
                }
       
                i = 0;
                while((CAN_TransmitStatus(CANx, MailBox)==CAN_TxStatus_Failed)&&(i<0XFFF)) i++;
                if(i >= 0XFFF)
                {
                        return;
                }

=====
想到一种可能性,不知道有多大
假设开始时在邮箱1中发送不成功,下次发送转到邮箱2中发送

过了一会儿 邮箱1又发送成功,这样2个邮箱都发送了才出现偶尔发送2次的情况
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
q457344370
1楼-- · 2020-01-02 20:55
有没有多任务或者中断调用发送
isakura
2楼-- · 2020-01-02 21:47
q457344370 发表于 2019-9-26 19:47
有没有多任务或者中断调用发送

没有,就是裸奔
isakura
3楼-- · 2020-01-02 23:35
lnskngdc 发表于 2019-9-26 19:42
自己做的板子,如果接收邮箱满了,你是怎么处理的?

还有很重要的一个问题,你用的是什么样的线?太细的 ...

接收邮箱满了,就返回,不发送,下一次再查询。。。
q457344370
4楼-- · 2020-01-03 04:08
 精彩回答 2  元偷偷看……
shiva_shiva
5楼-- · 2020-01-03 08:15
1、发送用了几个邮箱?
2、两个节点,一收一发?

如果只有100ms一包数据,通讯负荷很清,基本不会出现邮箱忙的情况。
关于以后
6楼-- · 2020-01-03 13:22
这么算么,一帧can,按照100bit来算(实际可能到123bit),如果是100k的波特率,相当于 1ms发一帧数据。
如果是500k的波特率,相当于1ms,can总线上可以发 5帧数据。
所以100ms,理论上能发 快500帧数据了啊。 不会是邮箱满了。
考虑接线吧,是不是接线没接好之类的。

一周热门 更多>