AUTOSAR 故障排查手册:从现象到证据链
排查原则
沿着“模型与配置 → 生成代码 → 调度执行 → 模块 API → 硬件 / 网络 → 对端行为”建立证据链。先确认故障在哪一层,再修改对应配置,避免一次改动多个模块。
1. 收集可复现证据
- 软件版本、AUTOSAR Release、供应商工具与生成器版本、ECU / MCU、编译器和变体。
- 输入 ARXML / ECUC / OS 配置的版本或提交号。
- 复现步骤、期望行为、实际行为、出现频率与触发条件。
- 关键 API 返回值、错误码、时间戳、任务运行计数、抓包或调试器观察。
- 完整生成器日志、编译 / 链接日志、相关配置 diff。
2. 典型问题矩阵
| 现象 | 可能边界 | 第一轮证据 | 下一步 |
|---|---|---|---|
| Runnable 从不执行 | Event、映射、OS 调度 | Runnable 计数、Task 激活情况 | 检查 Event 关联、Task 映射、OS 配置与生成入口 |
| Rte_Read 失败或读到旧值 | SWC / RTE 数据访问 | API 返回值、更新状态、读取周期 | 检查 Port / Interface、初始化值、队列策略和生产者 |
| Rte_Write 成功但对端未变化 | RTE / COM / PduR / If | COM 缓存、I-PDU 计数、总线抓包 | 检查映射、I-PDU Group、发送模式、路由和控制器状态 |
| 总线上没有报文 | COM 到 CanDrv 路径 | Tx 请求、PduR 路由、CanIf 结果 | 分层确认 PDU 是否到达每一层,检查模式与驱动返回 |
| 收到报文但信号错误 | 解包、映射、数据语义 | 原始帧、起始位、长度、端序 | 对照 ARXML / 数据库检查位布局、缩放、偏移和无效值 |
| UDS 请求无响应 | Dcm / XxxTp / PduR / CanIf | 请求是否到达、寻址、TP 状态 | 检查 P2 / P2*、会话、安全条件、长度与路由 |
| NvM 读写异常 | NvM / MemIf / Fee 或 Ea | 请求结果、Job 回调、块状态 | 检查块配置、长度、CRC、写保护、异步作业与启动恢复 |
| 生成成功但链接缺符号 | 生成文件与构建系统 | 声明、定义、目标文件、链接命令 | 检查输出、源文件列表、变体及遗漏 / 重复目标文件 |
| 上电初始化不稳定 | EcuM / BswM / OS / Driver | 初始化顺序、模式、返回值 | 对照项目启动序列与模块依赖 |
| 多核下偶发不一致 | 并发 / IOC / 缓存 / OS | 核分配、访问上下文、时间线 | 检查跨核配置、Exclusive Area、共享内存与时序 |
上表是定位入口而不是根因清单。供应商的 API、回调和内部状态命名可能不同。
3. 通信栈逐层打点
flowchart LR A["Runnable"] --> B["RTE"] B --> C["COM Signal / I-PDU"] C --> D["PduR"] D --> E["CanIf"] E --> F["CanDrv"] F --> G["CAN Controller / Bus"]
按层记录进入次数、返回值、PDU 标识与时间戳:
- Runnable 是否执行,写入值是否正确。
- RTE API 是否成功,数据是否映射到目标通信对象。
- COM 信号与 I-PDU 缓存是否更新,发送模式和 I-PDU Group 是否允许发送。
- PduR 是否命中对应路由。
- CanIf 是否接收发送请求,CanDrv / 控制器是否可发送。
- 总线上是否出现帧;若有,仲裁 ID、DLC、字节和周期是否正确。
- 接收 ECU 是否收到帧,解包、超时与有效性状态是否正确。
接收链路按相反方向追踪,并把“没有报文”“有报文但没有信号”“有信号但消费者未更新”分开处理。
4. 常见错误推断
- Rte_Write 返回成功,所以 CAN 已经发出。 不成立。后续 COM / PduR / 驱动 / 控制器仍可能阻塞或失败。
- ARXML 能打开,所以配置正确。 不成立。XML 语法、模型引用和配置一致性是不同层次。
- RTE 生成成功,所以 Runnable 一定会跑。 不成立。还要核对 Event、Runnable-to-Task 映射与 OS 调度。
- 换生成器选项就能解决链接错误。 未必。先确认符号声明、定义、目标文件和变体是否一致。
- 所有项目的 API 名称与调用流程都相同。 不成立。Release、供应商扩展与配置选项会影响具体实现。
5. 缺陷记录模板
标题:
ECU / MCU / 软件版本:
AUTOSAR Release / 工具链版本:
配置输入与变体:
现象与期望:
最小复现步骤:
首次出现时间 / 频率:
证据(日志、抓包、寄存器、API 返回值):
最后一个正常的层级:
第一个异常的层级:
根因假设与验证:
修复改动:
回归范围与结果: