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

目录

问题描述

问题原因分析

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黑神话之总目录(持续更新)_大表哥汽车人的博客-CSDN博客


根据测试,我们可以观测到CAN总线发送报文丢失的问题。经过分析,可能是硬件对象忙碌导致的,这可能是因为写硬件对象时发生了错误或者硬件对象一直被占用。对于FULL类型的发送邮箱来说,在检查是否可用时,如果被占用,则会反馈BUSY,解除占用是在中断处理函数Can_17_McmCan_IsrTransmitHandler-->Can_17_McmCan_lTxEventHandler-->Can_17_McmCan_lTxEventProcessingHandler中完成的。但是临界保护函数中没有将中断挂起,导致该问题的发生

你可能感兴趣的:(AUTOSAR)