AUTOSAR Classic 平台学习路线与面试题
1. 学习路线:从模型到运行时
flowchart TD A["全局架构:CP / AP、VFB、分层"] --> B["数据与模型:ARXML、Data Type、SWC"] B --> C["接口与执行:Port、Interface、Runnable、Event"] C --> D["RTE:API、映射、生成阶段"] D --> E["通信栈:COM → PduR → CanIf → CanDrv"] D --> F["OS:Task、Alarm、Event、时序"] E --> G["诊断:Dcm / CanTp / PduR"] E --> H["网络管理:ComM / CanNm"] D --> I["存储:NvM / MemIf / Fee 或 Ea"] G --> J["集成、测试、故障定位"] H --> J I --> J F --> J
建议每学一个模块,都输出四类笔记:
- 职责卡:模块解决什么问题,不负责什么。
- 调用链卡:上下游模块、关键 API、回调和异步边界。
- 配置卡:关键参数、依赖约束、生成输入和版本差异。
- 故障卡:现象、证据采集点、定位路径和回归测试。
2. 必须能够画出来的三条链路
- 信号发送:Runnable → RTE API → COM Signal / I-PDU → PduR → CanIf → CanDrv → CAN Controller。
- 诊断请求:CAN / CanIf → PduR → CanTp → Dcm;响应方向由对应传输与路由配置返回。
- 非易失存储:使用者 → NvM → MemIf → Fee 或 Ea → 底层存储驱动。具体介质和模块组合由项目决定。
3. 面试问题与回答框架
Q1:RTE 是什么?它是不是普通中间件?
RTE 是 CP 中 VFB 的 ECU 级实现,为 SWC 提供生成的通信 API,并衔接 SWC、BSW 与 OS。它依赖 SWC 描述、系统连接、ECU 映射和配置输入生成;不等同于独立 OS,也不意味着所有通信都走物理总线。
Q2:Rte_Write 成功但对端没有收到,怎么排查?
- 确认 Runnable 执行、写入值和 API 返回值。
- 检查 SWC 连接和 ECU 映射。
- 检查 COM 信号、I-PDU、发送模式、I-PDU Group 和触发条件。
- 检查 PduR 路由、CanIf、CanDrv 与控制器状态。
- 抓包确认帧是否发送,再排查接收侧解包与超时。
- 每层用计数器、返回值、日志或波形形成证据链。
Q3:COM 与 PduR 的职责有什么区别?
COM 面向信号,负责信号打包 / 解包、发送模式、更新与超时等行为。PduR 面向 PDU,按静态配置在上层模块与下层接口 / TP 模块间路由。不要混淆信号语义与 PDU 路由职责。
Q4:ARXML 合法是否代表可以成功生成代码?
不代表。XML 语法 / Schema 校验、模型引用完整性、配置约束、ECU Extract 与映射、工具支持范围、生成器输入集合是不同层次,应结合日志逐层定位。
Q5:Runnable 与 Task 是什么关系?
Runnable 是 SWC 内的可运行实体;Task 是 OS 的调度执行上下文。Runnable 通常通过 RTE Event、映射和生成代码进入 OS 调度,不应把 Runnable 直接等同于 Task。
Q6:Explicit 与 Implicit 数据访问有什么区别?
Explicit 由 Runnable 显式调用读写 API;Implicit 使用 RTE 提供的隐式访问语义。实际缓存、拷贝和一致性行为依配置与生成实现,不应描述成始终零拷贝或绝对一致。
Q7:为什么要区分 CP 与 AP?
CP 面向资源受限、强调静态配置与实时控制的 ECU 软件;AP 面向高性能计算、服务化通信与动态部署等需求。二者执行环境、API 和架构假设不同,不能把 CP 的 RTE / BSW 机制直接套用到 AP。
4. 工程化回答模板
回答 AUTOSAR 问题时,按以下顺序组织:
- 定义:一句话说明模块职责。
- 位置:它在架构和调用链中的位置。
- 输入 / 输出:模型、配置、API、PDU 或信号。
- 运行过程:调用链、同步 / 异步边界和调度关系。
- 关键配置:需要核对的参数类别与约束。
- 故障定位:观察点、证据和验证步骤。
- 版本边界:AUTOSAR Release、供应商工具和项目配置的影响。