单片机学习小组
直播中

李燕

7年用户 1529经验值
私信 关注

M453单片机的CAN中断接力发送时发送报文数量丢失怎么解决?

1、我使用新唐M453单片机,使用CAN1进行实验,将CAN1的后4个报文缓存RAM做为发送缓冲区来使用。通过线程启动报文的发送,在中断中通过查询发送请求寄存器来判断哪个发送缓冲区空闲,再进行发送处理。发送相关函数使用SDK。例如我发送30个不同ID的报文,通过CAN盒获取只收到4个标识符,发送间隔有100ms,250ms,500ms,1s。
2、目前猜想是没发送出去的报文是由于该报文处于准备发送状态,但是在发送过程中由于我使用查询发送请求寄存器来判断是否发送完成,该步骤可能有问题,导致待发送出去的报文被后来更新的报文覆盖了。
3、请问是否还有其他什么原因导致问题出现的。

回帖(1)

杨杰

2024-4-8 18:10:29
可能的解决方案如下:

1. 改进查询发送请求寄存器的方法。可以在发送完成中断中处理发送缓冲区状态,并标记哪个缓冲区空闲。

2. 调整发送顺序。可以先发送重要的报文,再发送较不重要的报文,保证重要报文能够及时发送出去。

3. 增加发送缓冲区的数量。如果可以使用更多的缓冲区,可以避免发送过程中被覆盖的可能性。需要注意的是,增加缓冲区数量也会增加中断处理的负担,需要考虑系统的整体性能。

4. 优化发送间隔。根据具体的场景和要求,可以调整发送间隔来避免报文丢失。在保证总发送时间不超过某个限制的前提下,适当增加间隔时间可能会有帮助。

5. 检查硬件连接和信号质量。如果以上方法都无法解决问题,可以检查硬件连接和信号质量,确保信号可靠地传输。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分