【AUTOSAR实战】:CAN发送邮箱忙导致报文发送丢帧的问题调试

本文详细分析了在AUTOSAR系统中遇到的CAN发送邮箱导致报文丢帧的问题,从多个角度进行了原因排查和解决尝试,包括调整邮箱配置、优化缓冲区尺寸、修改邮箱类型、优化报文对Buffer的引用、修改中断优先级、增强临界区保护等。最终,问题定位在CAN DRIVER释放发送邮箱的临界区保护上,通过更新IFX_Os.h文件以正确挂起中断,成功解决了丢帧问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

问题描述

问题原因分析

CAN发送邮箱配置不合理

分析:

尝试1:高频报文设置独立邮箱

尝试2:加深发送FIFO深度

尝试3:修改邮箱类型

结论:

CanIf缓冲配置不合理

分析:

尝试4:修改CANIF传冲的尺寸

尝试5:进一步增加CANIF缓冲区1的size

尝试6:取消public buffering的功能

尝试7:增加CAN发送邮箱数量

尝试8:进一步优化buffer size配置

结论:

CANIF中报文引用Buffer不合理导致发送流程调度问题

分析:

尝试9:优化配置报文对buffer的引用

结论:

触发发送配置的问题

分析:

尝试10:

结论:

发送中断优先级较低,被高优先级中断抢占

分析:

尝试11:修改发送中断优先级,高于接收中断

结论:

CANIF和COM临界区保护缺失

分析:

尝试12:修改CANIF\COM的临界保护函数

结论:

将PDU填入CANIF发送缓冲失败

分析:

尝试13:修改发送邮箱类型,观测BUSY状态下的数据传递

结论:

CAN发送邮箱无法被释放

分析:

尝试14:将CAN DRIVER释放发送邮箱的临界区保护打开

结论:

总结

==>传送门:AUTOSAR黑神话之总目录(持续更新)_大表哥汽车人的博客-优快云博客


根据测试,我们可以观测到CAN总线发送报文丢失的问题。经过分析,可能是硬件对象忙碌导致的,这可能是因为写硬件对象时发生了错误或者硬件对象一直被占用。对于FULL类型的发送邮箱来说,在检查是否可用时,如果被占用,则会反馈BUSY,解除占用是在中断处理函数Can_17_McmCan_IsrTransmitHandler-->Can_17_McmCan_lTxEventHandler-->Can_17_McmCan_lTxEventProcessingHandler中完成的。但是临界保护函数中没有将中断挂起,导致该问题的发生。解决方法是使用正确的IFX_Os.h文件替换原来的文件。此外,还需要注意发送缓冲区的类型和状态,以及是否启用了传输缓冲区。如果启用了传输缓冲区,并且传输请求发送失败,则L-PDU可以存储在CanIfTxBuf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大表哥汽车人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值