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 / IfCOM 缓存、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 标识与时间戳:

  1. Runnable 是否执行,写入值是否正确。
  2. RTE API 是否成功,数据是否映射到目标通信对象。
  3. COM 信号与 I-PDU 缓存是否更新,发送模式和 I-PDU Group 是否允许发送。
  4. PduR 是否命中对应路由。
  5. CanIf 是否接收发送请求,CanDrv / 控制器是否可发送。
  6. 总线上是否出现帧;若有,仲裁 ID、DLC、字节和周期是否正确。
  7. 接收 ECU 是否收到帧,解包、超时与有效性状态是否正确。

接收链路按相反方向追踪,并把“没有报文”“有报文但没有信号”“有信号但消费者未更新”分开处理。

4. 常见错误推断

  • Rte_Write 返回成功,所以 CAN 已经发出。 不成立。后续 COM / PduR / 驱动 / 控制器仍可能阻塞或失败。
  • ARXML 能打开,所以配置正确。 不成立。XML 语法、模型引用和配置一致性是不同层次。
  • RTE 生成成功,所以 Runnable 一定会跑。 不成立。还要核对 Event、Runnable-to-Task 映射与 OS 调度。
  • 换生成器选项就能解决链接错误。 未必。先确认符号声明、定义、目标文件和变体是否一致。
  • 所有项目的 API 名称与调用流程都相同。 不成立。Release、供应商扩展与配置选项会影响具体实现。

5. 缺陷记录模板

标题:
ECU / MCU / 软件版本:
AUTOSAR Release / 工具链版本:
配置输入与变体:
现象与期望:
最小复现步骤:
首次出现时间 / 频率:
证据(日志、抓包、寄存器、API 返回值):
最后一个正常的层级:
第一个异常的层级:
根因假设与验证:
修复改动:
回归范围与结果:

相关笔记