vector autosar配置一个CAN接收报文,RTE层发现并未接收到信号,怎样查这个问题

vector autosar配置一个CAN接收报文,RTE层发现并未接收到信号,com层IPDU的callout函数也未触发,想知道数据传递到哪一层了,要观测哪个函数?怎样查这个问题

AUTOSAR + Vector MICROSAR 架构里,CAN 报文接收路径是分层的。

你现在的现象是:

  • RTE 未收到信号

  • COM 层 I-PDU Callout 未触发

这说明 问题大概率出在 COM 之前(或 COM 未识别该 PDU)


一、标准接收路径(Vector MICROSAR)

CAN 报文从总线到 RTE 的完整路径:

复制代码
CAN总线
 → CanDrv (CanIf_RxIndication)
   → PduR_CanIfRxIndication
     → Com_RxIndication
       → Com_RxProcessing_RxPduSigEvent
         → Rte_Write / Rte_Receive

你现在需要确认:数据到底卡在哪一层。


二、排查顺序(推荐按顺序查)


✅ 第一步:确认 CanIf 是否收到报文

重点函数:

复制代码
CanIf_RxIndication()

怎么查:

  1. 在该函数打断点

  2. 或开启 CANIF DET/DEBUG

  3. 查看是否进入该函数


如果根本没进 CanIf_RxIndication

说明问题在:

  • 硬件滤波(HRH配置错误)

  • CanDrv 未配置对应 CAN ID

  • 波特率不匹配

  • CAN 控制器未启动


✅ 第二步:确认是否传递到 PduR

关键函数:

复制代码
PduR_CanIfRxIndication()

如果 CanIf_RxIndication 进了,但 PduR 没进:

👉 检查 CanIfRxPduCfg 里是否配置了:

  • 正确的 RxPduId

  • 正确的 HRH 绑定


✅ 第三步:确认是否到达 COM

关键函数:

复制代码
Com_RxIndication()

如果 PduR 进了,但 Com_RxIndication 没进:

👉 说明 PduR 路由表错误

检查:

复制代码
PduR_RoutingPath

是否从:

复制代码
CanIf → COM

三、你说的 Callout 没触发,说明什么?

COM 的 I-PDU Callout 是在:

复制代码
Com_RxIndication()

内部被调用的。

如果 callout 没进,只有两种可能:

  1. 根本没到 COM

  2. IPDU 未被识别(RxPduId 不匹配)


四、最关键的观测函数(按优先级)

建议你按这个顺序打断点:

优先级 函数
⭐⭐⭐⭐ CanIf_RxIndication
⭐⭐⭐⭐ PduR_CanIfRxIndication
⭐⭐⭐ Com_RxIndication
⭐⭐ Com_RxProcessing_RxPduSigEvent
Rte_Write_xxx

五、Vector 特有排查技巧

1️⃣ 打开 CANoe Trace 看 CAN ID 是否正确

确认:

  • ID

  • DLC

  • 数据长度

  • 是否标准帧/扩展帧


2️⃣ 检查 CanIf 配置

看:

复制代码
CanIfRxPduCfg

重点看:

  • CanIfRxPduCanId

  • CanIfRxPduDlc

  • CanIfRxPduHrhRef


3️⃣ 检查 HRH 是否匹配

很多时候问题是:

CAN 控制器滤波没有放行该 ID

检查:

复制代码
CanHardwareObject

是否配置为:

复制代码
BASIC CAN
FULL CAN

六、常见问题总结(80% 出在这里)

问题 现象
CAN ID 配错 CanIf 不触发
HRH 没绑定 CanIf 不触发
PduR 未路由 COM 不触发
IPDU ID 不一致 Callout 不触发
DLC 不一致 COM 丢弃
字节序配置错 RTE 收到 0

七、快速判断法(最有效)

你现在的现象说明:

大概率没进入 Com_RxIndication()

所以:

👉 先断在 CanIf_RxIndication

如果都没进,那问题 100% 在:

  • 硬件滤波

  • CAN 控制器配置


八、终极定位法(一步到位)

如果项目允许:

在:

复制代码
CanIf_RxIndication
PduR_CanIfRxIndication
Com_RxIndication

都加一行 GPIO 翻转或 log

看哪个触发。


相关推荐
寻寻觅觅☆2 小时前
东华OJ-基础题-122-循环数(C++)-难度难
开发语言·c++
Zachery Pole2 小时前
JAVA_04_判断与循环
java·开发语言
懒惰成性的2 小时前
11.Java的String类
java·开发语言
傻啦嘿哟2 小时前
Python列表排序:用key参数掌控排序规则
java·开发语言
你的冰西瓜2 小时前
C++ STL算法——修改序列算法
开发语言·c++·算法·stl
froginwe113 小时前
装饰器模式
开发语言
枫叶丹43 小时前
【Qt开发】Qt界面优化(三)-> Qt样式表(QSS) 设置方式
c语言·开发语言·c++·qt·系统架构
-小麦子-3 小时前
Python 变量组包、解包及星号扩展机制详解
开发语言·python
tod1133 小时前
Redis - 客户端基本介绍
开发语言·数据库·redis·缓存