AUTOSAR 完全指南:从入门到实践
AUTOSAR 完全指南:从入门到实践
作者:taohuaracing
日期:2026-06-22
版本:v1.0
目录
- AUTOSAR 是什么
- 为什么需要 AUTOSAR
- AUTOSAR 两大平台
- Classic Platform 深度解析
- Adaptive Platform 深度解析
- AUTOSAR 开发流程
- 常用工具链
- 从零开始:一个实际例子
- 学习路线图
- 常见问题 FAQ
1. AUTOSAR 是什么
1.1 官方定义
AUTOSAR = AUTomotive Open System ARchitecture
由宝马、奔驰、大众、福特、丰田、博世、大陆等核心成员在 2003 年发起的全球汽车软件标准化联盟。它不是一款软件,而是一套标准和方法论。
1.2 核心目标
| 目标 | 说明 |
|---|---|
| 标准化接口 | ECU 软件模块之间定义统一接口,不再各自为政 |
| 软硬件解耦 | 应用软件不依赖具体硬件,换芯片不用重写应用 |
| 可复用性 | 模块化设计,模块可在不同项目间复用 |
| 可扩展性 | 新增功能只需开发新模块,无需改动已有模块 |
| 全生命周期 | 从设计到退役,统一管理流程 |
1.3 一句话理解
AUTOSAR 就是汽车界的标准化积木系统 —— 定义了每块积木的形状、接口规则,以及怎么拼在一起。你不关心积木是哪个工厂造的,只关心它能拼出什么。
2. 为什么需要 AUTOSAR
2.1 汽车软件的"黑暗时代"(2000 年代初)
在 AUTOSAR 出现之前,每款车、每个 ECU 都是"定制开发":
┌──────────────────────┐
│ 车窗控制 ECU │ ← 由供应商 A 开发
│ ┌──────────────┐ │
│ │ MCU: TC275 │ │ ← 代码深度绑定此芯片
│ │ 驱动: 自有 │ │
│ │ 协议栈: 自有 │ │
│ └──────────────┘ │
└──────────────────────┘
┌──────────────────────┐
│ 另一个项目,换芯片了 │ ← 几乎全部重写
└──────────────────────┘
问题:
- 换芯片 = 重写所有底层代码
- 换供应商 = 重写应用层逻辑
- 每个项目互相隔离,技术积累困难
- 软件质量参差不齐
2.2 AUTOSAR 的解决方案
┌─────────────────────────────────────┐
│ 应用软件层 (SWC) │ ← 与硬件无关
│ 窗控算法 | 逻辑判断 │
├─────────────────────────────────────┤
│ RTE (运行时环境) │ ← 虚拟总线
├──────────┬──────────┬───────────────┤
│ BSW 模块 | BSW 模块 | MCAL 驱动 │ ← 标准模块
│ (OS/COM) │ (诊断) │ (SPI/I2C/...) │
├──────────┴──────────┴───────────────┤
│ 微控制器 │ ← 换芯片只改 MCAL
└─────────────────────────────────────┘
3. AUTOSAR 两大平台
3.1 概览
| 特性 | Classic Platform (CP) | Adaptive Platform (AP) |
|---|---|---|
| 诞生 | 2005 (AUTOSAR 3.0) | 2017 (AUTOSAR 4.3+) |
| 目标硬件 | MCU (微控制器) | SoC / MPU (高性能处理器) |
| 操作系统 | OSEK OS (实时 OS) | POSIX (Linux/QNX) |
| 编程语言 | C | C++ |
| 更新机制 | 固件刷写 (FOTA 有限) | 动态更新 (OTA 原生支持) |
| 实时性 | 硬实时 (us 级) | 软实时 (ms 级) |
| 典型场景 | 车窗/雨刷/ABS/Airbag | 自动驾驶/智能座舱/V2X |
| 安全等级 | ASIL D 可达 | ASIL B/D (经评估) |
| 架构风格 | 静态配置为主 | 面向服务 (SOA) |
3.2 什么时候用哪个?
车辆功能需求
│
├─ 硬实时控制 (刹车、转向、气囊) → Classic Platform
│
├─ 复杂计算 (视觉感知、路径规划) → Adaptive Platform
│
└─ 混合场景 → CP + AP 协同 (常见于域控制器)
4. Classic Platform 深度解析
4.1 三层架构
┌──────────────────────────────────────────────────┐
│ 应用层 (Application Layer) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SWC-A │ │ SWC-B │ │ SWC-C │ ... │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
├───────┴────────────┴────────────┴──────────────────┤
│ RTE (Runtime Environment) - 虚拟功能总线 │
│ VFB (Virtual Functional Bus) │
├────────────────────────────────────────────────────┤
│ 基础软件层 (BSW) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │服务层 │ │ECU抽象层 │ │MCAL │ │
│ │- OS │ │- 通信 │ │- SPI │ │
│ │- 诊断 │ │- I/O │ │- I2C │ │
│ │- 内存 │ │- 存储 │ │- CAN │ │
│ │- NVM │ │ │ │- LIN │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├────────────────────────────────────────────────────┤
│ 微控制器 (μC) │
└────────────────────────────────────────────────────┘
4.2 关键术语
SWC (Software Component) — 软件组件
- 应用层的基本单元,开发者的主要工作对象
- 类型:
Application SWC(应用)、ECU Abstraction SWC(抽象)、Complex Driver(复杂驱动) - 通过 Ports 和 Interfaces 与其他组件通信
RTE (Runtime Environment) — 运行时环境
- AUTOSAR 的核心创新之一
- 自动生成的"中间人",负责 SWC 之间的数据传输
- SWC 不可直接调用其他 SWC 的函数,只能通过 RTE
VFB (Virtual Functional Bus) — 虚拟功能总线
- 设计阶段的抽象概念,描述所有 SWC 之间的通信
- 独立于具体 ECU 拓扑
BSW (Basic Software) — 基础软件
- 包含操作系统、通信栈、诊断栈、存储栈等
- 通常由工具链供应商提供(Vector、EB、ETAS 等)
MCAL (Microcontroller Abstraction Layer) — 微控制器抽象层
- 直接操作硬件寄存器,是唯一与 MCU 耦合的部分
- 换 MCU 只需要换 MCAL 驱动
4.3 通信机制
SWC-A ────┐
│ RTE Port → Sender-Receiver (Data)
SWC-B ────┤
│ RTE Port → Client-Server (Function Call)
SWC-C ────┘
两种通信模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Sender-Receiver | 发送者→接收者,数据传递 | 传感器值、状态信号 |
| Client-Server | 客户端请求,服务器响应 | 功能调用、配置访问 |
4.4 操作系统 — AUTOSAR OS
基于 OSEK/VDX OS 标准,增加了:
- Schedule Tables — 精确调度周期任务
- Timing Protection — 防止任务超时
- Memory Protection — 隔离内存空间
- OS Applications — 将任务分组,不同安全等级
5. Adaptive Platform 深度解析
5.1 架构概览
┌──────────────────────────────────────────────────┐
│ 应用层 (ARA Applications) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Adaptive │ │ Adaptive │ │ Adaptive │ │
│ │ App A │ │ App B │ │ App C │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
├───────┴──────────────┴──────────────┴──────────────┤
│ ARA (AUTOSAR Runtime for Adaptive) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │执行管理 │ │通信管理 │ │身份管理 │ │
│ │(Execution│ │(com) │ │(Identity)│ │
│ │Mgmt) │ │ │ │ │ │
│ ├──────────┤ ├──────────┤ ├──────────┤ │
│ │日志管理 │ │网络管理 │ │持久化 │ │
│ │(log) │ │(net) │ │(persist) │ │
│ └──────────┘ └──────────┘ └──────────┘ │
├────────────────────────────────────────────────────┤
│ 操作系统 (POSIX: Linux / QNX) │
└────────────────────────────────────────────────────┘
5.2 核心概念
面向服务架构 (SOA)
- 服务通过 SOME/IP 协议在以太网上发布
- 服务发现 (Service Discovery) — 动态查找可用服务
- 支持事件、方法、字段三种交互模式
Execution Management (执行管理)
- 负责应用的启动、停止、状态监控
- 支持 Manifest 配置(类似 Kubernetes YAML)
- 支持 Machine → Process → Thread 层次
Communication Management (通信管理)
- SOME/IP 和 DDS 作为主要通信协议
- 服务发现、序列化、网络绑定
5.3 与 Classic 的交互
┌────────────────┐ ┌────────────────┐
│ Adaptive App │ │ Classic SWC │
│ (感知算法) │◄───►│ (执行控制) │
└────────┬───────┘ └────────┬───────┘
│ │
│ SOME/IP over ETH │ CAN/LIN
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 域控制器 │ │ ECU (TC3xx) │
│ (Orin/Snap) │ │ │
└──────────────┘ └──────────────┘
│ │
└──────────┬───────────┘
│
网关 (Gateway)
6. AUTOSAR 开发流程
6.1 V-模型开发流程
需求分析 系统测试
▲ │
│ │
系统设计 ◄──────────────── 集成测试
▲ │
│ │
SWC 设计 ◄─────────────── SWC 测试
▲ │
│ │
代码开发 ◄─────────────── 单元测试
▲
│
代码生成 (工具自动)
6.2 详细步骤
Step 1: 系统配置 (System Configuration)
在工具中(如 Vector DaVinci Developer)完成:
- 定义 SWC — 多少个组件,各自做什么
- 定义 Ports & Interfaces — 每个组件用哪些端口
- 定义 Communication Matrix — 数据走哪个总线(CAN/LIN/ETH)
- 定义 ECU Extracts — 每个 ECU 负责哪些 SWC
输出:ARXML 文件(AUTOSAR XML,所有配置的核心文件)
Step 2: ECU 配置 (ECU Configuration)
- 配置 BSW 模块(OS、通信栈、诊断栈…)
- 配置 MCAL(PWM、ADC、SPI、CAN…)
- 配置 RTE(生成代码模板)
输出:RTE 代码 + BSW 配置代码
Step 3: SWC 代码开发
开发者在 RTE 生成的模板中填充业务逻辑:
/* RTE 生成的模板文件 */
void MySWC_Runnable(void)
{
Std_ReturnType status;
uint8 sensor_value;
uint8 actuator_command;
/* 从 RTE 读取传感器值 */
status = Rte_Read_SensorPort_SensorValue(&sensor_value);
/* 业务逻辑:你的代码在这里 */
if (sensor_value > THRESHOLD) {
actuator_command = ACTIVATE;
} else {
actuator_command = DEACTIVATE;
}
/* 通过 RTE 发送指令 */
status = Rte_Write_ActuatorPort_Command(actuator_command);
}
Step 4: 集成与编译
- 工具自动生成 RTE 层和 BSW 配置
- 编译器将 SWC + RTE + BSW + MCAL + OS 编译链接
- 生成二进制文件(ELF / HEX)
Step 5: 测试
| 阶段 | 测试方式 | 工具举例 |
|---|---|---|
| 单元测试 | SWC 在 PC 上模拟运行 | VectorCAST, Tessy |
| 集成测试 | BSW + SWC 联合测试 | CANoe, vTESTstudio |
| HIL 测试 | 真实硬件闭环 | dSPACE, NI |
| 整车测试 | 实车路试 | — |
7. 常用工具链
7.1 主流供应商
| 公司 | 工具 | 主要特点 |
|---|---|---|
| Vector | DaVinci Developer / Configurator | 市场占有率最高,教程多 |
| CANoe / CANalyzer | 总线分析,实测必备 | |
| vTESTstudio | 自动化测试 | |
| ETAS | ISOLAR-A / B | 与 MATLAB/Simulink 集成好 |
| RTA-OS / RTA-BSW | 轻量级运行时 | |
| EB (Elektrobit) | EB tresos Studio | 成熟稳定,客户群广 |
| KPIT | K-SAR | 印度公司,性价比高 |
| Mentor (Siemens) | Volcano VSTAR | 支持 CP + AP |
| ARCCORE | Arctic Studio | AP 平台起步早 |
7.2 开源方案 (学习可用)
| 项目 | 说明 | 地址 |
|---|---|---|
| arccore/free | ARCCORE 的免费试用版 | arccore.com |
| COMASSO | AUTOSAR CP 验证参考实现 | autosar.org |
| openAUTOSAR | 部分开源 BSW 实现 | GitHub (搜索) |
⚠️ 注意:商用 AUTOSAR 工具非常昂贵(单工具年费可达 10-50 万 RMB)。学习阶段建议:
- 使用 Vector 的免费试用版(有功能限制)
- 利用大学/公司提供资源
- 先用文字/MATLAB 模拟架构概念
8. 从零开始:一个实际例子
8.1 场景:车窗防夹功能
假设我们要实现一个 车窗自动升降 + 防夹功能:
需求:
- 按键上升 → 电机正转 → 车窗上升
- 按键下降 → 电机反转 → 车窗下降
- 上升时检测到阻力增大 → 立即停止 + 反转 200ms(防夹)
- 电流阈值可配置
8.2 Step 1: 系统设计
SWC 划分:
┌─────────────────────────────────────────┐
│ SWC: WindowControl │
│ ┌─────────────────────────────────┐ │
│ │ Runnable: MainControl │ │
│ │ - 读取按键状态 │ │
│ │ - 读取电流/霍尔传感器 │ │
│ │ - 输出电机控制指令 │ │
│ │ - 检测堵转(防夹) │ │
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ SWC: ConfigurationManager │
│ - 存储堵转电流阈值 │
│ - 支持 CAN 在线配置 │
├─────────────────────────────────────────┤
│ SWC: Diagnostics │
│ - 上报防夹触发次数 │
│ - 存储故障码 │
└─────────────────────────────────────────┘
8.3 Step 2: 定义接口
窗口控制端口:
├─ RPort: ButtonStatus ← 按键信号 (CAN 输入)
├─ RPort: MotorCurrent ← 电机电流 (ADC 输入)
├─ RPort: WindowPosition ← 位置传感器 (Hall/霍尔)
├─ PPort: MotorCommand ← 电机控制 (PWM 输出)
└─ PPort: StatusLED ← 状态指示 (GPIO)
8.4 Step 3: SWC 代码实现
// WindowControl SWC - MainControl Runnable
// 运行周期:10ms
#define FALLBACK_TIME_MS 20 // 防夹反转时长
#define CURRENT_RISING_TIME 50 // 电流检测窗口
static uint8 current_rpm_counter = 0;
void MainControl_Runnable(void)
{
uint8 btn_up, btn_down;
uint16 current_ma;
static uint8 state = STATE_IDLE;
static uint16 anti_trap_timer = 0;
/* 1. 读取输入 */
Rte_Read_ButtonStatus_Up(&btn_up);
Rte_Read_ButtonStatus_Down(&btn_down);
Rte_Read_MotorCurrent_Value(¤t_ma);
/* 2. 状态机 */
switch (state) {
case STATE_IDLE:
if (btn_up) {
set_motor(MOTOR_UP);
state = STATE_RISING;
current_rpm_counter = 0;
} else if (btn_down) {
set_motor(MOTOR_DOWN);
state = STATE_FALLING;
}
break;
case STATE_RISING:
if (!btn_up) { // 按键释放,停止
set_motor(MOTOR_STOP);
state = STATE_IDLE;
} else if (check_anti_trap(current_ma)) {
// 堵转检测 → 防夹
set_motor(MOTOR_REVERSE);
anti_trap_timer = FALLBACK_TIME_MS;
state = STATE_ANTI_TRAP;
Rte_Write_Diagnostics_AntiTrapEvent(1);
}
break;
case STATE_ANTI_TRAP:
if (--anti_trap_timer == 0) {
set_motor(MOTOR_STOP);
state = STATE_IDLE;
}
break;
case STATE_FALLING:
if (!btn_down) {
set_motor(MOTOR_STOP);
state = STATE_IDLE;
}
break;
}
}
static uint8 check_anti_trap(uint16 current)
{
uint16 threshold;
Rte_Read_ConfigurationManager_AntiTrapThreshold(&threshold);
/* 防抖:连续采到超阈值才触发 */
if (current > threshold) {
if (++current_rpm_counter >= CURRENT_RISING_TIME / 10) {
return 1;
}
} else {
current_rpm_counter = 0;
}
return 0;
}
static void set_motor(uint8 cmd)
{
Rte_Write_MotorCommand_Value(&cmd);
}
8.5 Step 4: 配置 BSW
BSW 模块配置:
├─ OS: 配置任务 MainControlTask 周期 10ms
├─ COM: 配置 CAN 报文 ID 和数据映射
├─ MCAL:
│ ├─ PWM: CH1 输出电机控制频率 20kHz
│ ├─ ADC: CH3 采集电机电流
│ ├─ DIO: PB1 读取按键状态
│ └─ CAN: 100kbps
├─ NVM: 存储阈值配置
└─ DEM: 故障码 DTC: C123456 - AntiTrapExceeded
8.6 Step 5: 工具操作流程
Vector DaVinci Developer:
1. 创建项目
2. 添加 3 个 SWC (WindowControl, ConfigManager, Diag)
3. 定义 Component Type
4. 定义 Ports 和 Interfaces
5. 定义 Runnable 和 Timing Event
6. 生成 ARXML
Vector DaVinci Configurator:
1. 导入 ARXML
2. 导入 ECU 硬件描述
3. 配置 BSW 模块参数
4. 配置 MCAL 引脚映射
5. 配置 CAN 矩阵
6. 生成代码
编译器(如 Tasking / GCC):
1. 编译 SWC 代码
2. 编译生成的 RTE + BSW + MCAL
3. 链接 → 生成 HEX 文件
4. 刷写 ECU
9. 学习路线图
阶段一:打基础(1-2 个月)
┌────────────────────────────────────────────────────┐
│ 1. 嵌入式 C 基础 │
│ - 指针、结构体、回调函数 │
│ - 状态机实现 │
│ │
│ 2. 车载网络基础 │
│ - CAN 协议 (ID, DLC, Data) │
│ - CAN FD / LIN / 以太网 SOME/IP 概念 │
│ │
│ 3. 实时操作系统基础 │
│ - 任务、中断、优先级 │
│ - OSEK OS 概念 │
└────────────────────────────────────────────────────┘
阶段二:入门 AUTOSAR(2-3 个月)
┌────────────────────────────────────────────────────┐
│ 1. 理解三层架构 │
│ - 多看架构图,弄清每一层的职责 │
│ │
│ 2. 看懂 ARXML │
│ - 打开一个 ARXML 文件,理解标签结构 │
│ - 重点:SWC、Port、Interface、Runnable │
│ │
│ 3. 学习 BSW 模块基本功能 │
│ - COM (通信栈) │
│ - NVM (非易失存储) │
│ - DEM (诊断事件管理) │
│ - DCM (诊断通信管理) │
│ │
│ 4. 动手用工具 │
│ - 申请 Vector DaVinci 试用版 │
│ - 做一遍"点灯"教程 (LED on/off 跑通 RTE) │
└────────────────────────────────────────────────────┘
阶段三:项目实战(3-6 个月)
┌────────────────────────────────────────────────────┐
│ 1. 实现一个完整小功能 │
│ - 如上面"车窗防夹"例子 │
│ - 从设计到刷写,跑通全流程 │
│ │
│ 2. 掌握配置技巧 │
│ - 熟悉各种配置参数对行为的影响 │
│ - 学会排查配置错误 │
│ │
│ 3. 学习诊断栈 │
│ - UDS on CAN (ISO 14229) │
│ - OBD II │
│ - 诊断刷写流程 │
│ │
│ 4. 学习 Adaptive Platform │
│ - C++ 基础 │
│ - SOME/IP 服务设计 │
│ - ARCCORE 或 Vector 的 AP 工具 │
└────────────────────────────────────────────────────┘
阶段四:高级进阶(持续)
┌────────────────────────────────────────────────────┐
│ 1. 多 ECU 系统集成 │
│ - 理解系统级配置 │
│ - 排错 CAN 信号冲突 │
│ │
│ 2. 功能安全 (ISO 26262) │
│ - ASIL 等级分解 │
│ - AUTOSAR 安全机制 (E2E, Wdg, 内存保护) │
│ │
│ 3. AUTOSAR AP 深度 │
│ - 服务编排和部署 │
│ - DDS 和 SOME/IP 混合通信 │
│ - 容器化和 OTA │
│ │
│ 4. 方法论理解 │
│ - 为什么 AURIX 那么多核还要 AUTOSAR │
│ - 如何设计可复用的 SWC 架构 │
└────────────────────────────────────────────────────┘
10. 常见问题 FAQ
Q1: 没有工具怎么学 AUTOSAR?
A: 优先理解概念和架构,工具是辅助。可以:
- 阅读 AUTOSAR 官方标准文档(免费下载)
- 自学 SIMULINK + Embedded Coder 理解代码生成流程
- 用开源 MCAL(如 MCAL for STM32)配合 FreeRTOS 模拟 AUTOSAR 分层
Q2: AUTOSAR 代码量有多大?
一个典型 BSW 配置后生成的代码量:
- 小型 ECU(门控、天窗):5~20 万行
- 中型 ECU(BCM、GW):30~80 万行
- 大型 ECU(域控、ADAS):200 万行以上
注意:99% 是工具生成的,开发者只需写业务 SWC。
Q3: AUTOSAR 是不是太重了?
分场景看:
- 简单功能(雨刷、车窗)→ 确实有点重,有轻量替代方案(如 Classic AUTOSAR 的 SC3 子集)
- 复杂系统(ADAS、V2X、OTA)→ 不重,恰恰是救星
Q4: AUTOSAR 会被淘汰吗?
不太可能。 原因:
- 已经形成完整生态(40% 以上汽车 ECU 使用 AUTOSAR)
- 主要 Tier-1(博世、大陆、安波福)全面绑定
- SDV (Software Defined Vehicle) 趋势反而在推动 AP 发展
- AP 还在快速进化(AUTOSAR 20-11 到 24-11 大量新特性)
Q5: 国产车厂用 AUTOSAR 吗?
用,而且越来越多:
- 比亚迪、蔚来、小鹏、理想、吉利、长城等主流厂都在用
- 国产工具链也在兴起(如经纬恒润、上汽零束、中汽数据等)
- 趋势是 AP + CP 混合架构
附录 A:AUTOSAR 核心规范
| 规范编号 | 内容 | 适用平台 |
|---|---|---|
| AUTOSAR_EXP_MOD | 基础概念和方法论 | CP |
| AUTOSAR_SWS_RTE | RTE 规范 | CP |
| AUTOSAR_SWS_COM | 通信栈 | CP |
| AUTOSAR_SWS_DCM | 诊断通信管理 | CP |
| AUTOSAR_SWS_DEM | 诊断事件管理 | CP |
| AUTOSAR_SWS_NVM | 存储管理 | CP |
| AUTOSAR_AP_EXP | Adaptive 平台概念 | AP |
| AUTOSAR_AP_SWS_CM | 通信管理 | AP |
| AUTOSAR_AP_SWS_EM | 执行管理 | AP |
| AUTOSAR_AP_SWS_PH | 持久化 | AP |
完整规范在 autosar.org 免费下载(需注册)
附录 B:推荐资源
书籍
- 《AUTOSAR 基础与实践》— 国内经典教材
- 《Automotive Software Architectures》— 英文好读物
- 《AUTOSAR 规范深度解析》— 适合进阶
网站
- autosar.org — 官方标准文档
- vector.com — Vector 知识库
- elearning.autosar.org — 官方在线课程
学习建议
不要一开始就钻工具。
先理解为什么要有 VFB?为什么要有 RTE?
把架构思想吃透了,工具就是细节问题。
内容基于 AUTOSAR R20-11/R21-11 标准,结合行业实践经验。如有出入,请以 AUTOSAR 官方标准为准。
更多推荐



所有评论(0)