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

看哪个触发。


相关推荐
程序边界8 小时前
顶刊级论文配图全流程:用 Python 复刻 Nature/Science 风格图表
开发语言·python
普通人68 小时前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
G018_star sky♬9 小时前
nodeJS他是如何用JavaScript封装C++的呢
开发语言·javascript·c++
wyhwust9 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
云和数据.ChenGuang9 小时前
python sorted函数详细剖析
开发语言·人工智能·windows·python·1024程序员节
外收内放9 小时前
FastAPI猜字谜实战(4):让AI主持人开口
开发语言·python·学习·fastapi
云和数据.ChenGuang9 小时前
Python map() 函数详解:从语法、原理到实战用法
开发语言·人工智能·python·langchain·1024程序员节
秋名RG9 小时前
(二)存储、CPU 与指令执行——程序为什么快,又为什么慢
java·开发语言
Highcharts.js9 小时前
Highcharts甘特图开发带导航功能的项目管理图示例
开发语言·前端·javascript·甘特图·highcharts·项目管理图
kyle~9 小时前
C++ 原子操作、内存模型与无锁并发编程
linux·开发语言·c++·操作系统