完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、我使用新唐M453单片机,使用CAN1进行实验,将CAN1的后4个报文缓存RAM做为发送缓冲区来使用。通过线程启动报文的发送,在中断中通过查询发送请求寄存器来判断哪个发送缓冲区空闲,再进行发送处理。发送相关函数使用SDK。例如我发送30个不同ID的报文,通过CAN盒获取只收到4个标识符,发送间隔有100ms,250ms,500ms,1s。
2、目前猜想是没发送出去的报文是由于该报文处于准备发送状态,但是在发送过程中由于我使用查询发送请求寄存器来判断是否发送完成,该步骤可能有问题,导致待发送出去的报文被后来更新的报文覆盖了。 3、请问是否还有其他什么原因导致问题出现的。 |
|
相关推荐
1个回答
|
|
可能的解决方案如下:
1. 改进查询发送请求寄存器的方法。可以在发送完成中断中处理发送缓冲区状态,并标记哪个缓冲区空闲。 2. 调整发送顺序。可以先发送重要的报文,再发送较不重要的报文,保证重要报文能够及时发送出去。 3. 增加发送缓冲区的数量。如果可以使用更多的缓冲区,可以避免发送过程中被覆盖的可能性。需要注意的是,增加缓冲区数量也会增加中断处理的负担,需要考虑系统的整体性能。 4. 优化发送间隔。根据具体的场景和要求,可以调整发送间隔来避免报文丢失。在保证总发送时间不超过某个限制的前提下,适当增加间隔时间可能会有帮助。 5. 检查硬件连接和信号质量。如果以上方法都无法解决问题,可以检查硬件连接和信号质量,确保信号可靠地传输。 |
|
|
|
只有小组成员才能发言,加入小组>>
3130 浏览 9 评论
2827 浏览 16 评论
3337 浏览 1 评论
8708 浏览 16 评论
3930 浏览 18 评论
9549浏览 3评论
886浏览 3评论
457浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
457浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2178浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 01:45 , Processed in 0.895169 second(s), Total 79, Slave 60 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号