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

看哪个触发。


相关推荐
LDR0062 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术2 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob2 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享2 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.2 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..2 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽2 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下2 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1112 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言