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

看哪个触发。


相关推荐
李妍.7 小时前
02Numpy基础(上)
开发语言·python
TheBestRucy7 小时前
Python 九阳神功之贰:面向对象(下)
开发语言·python
AI_小站8 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
felixking8 小时前
C++20 协程
开发语言·c++·协程
Zane19941210 小时前
CAS 与原子类:Java 如何实现无锁编程
java·开发语言
码农颜11 小时前
6.3 主函数流程剖析
开发语言·php
TheBestRucy11 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
研☆香11 小时前
聊一聊前端的常见字 关键字
开发语言·前端·javascript
草莓橙子碗12 小时前
Claude 使用指南
开发语言·python
longxiaozhang612 小时前
C# Array类:数组其实没那么难
开发语言·c#