【AUTOSAR】 Classic Platform 分层软件架构入门
【AUTOSAR】 Classic Platform 分层软件架构入门刚开始看 AUTOSAR CP 的代码和配置最先要搞清楚的就是这套分层结构谁在上、谁在下、谁可以调谁。本文按这个顺序讲一遍结论以官方规范为准。主要参考的几份规范AUTOSAR_CP_EXP_LayeredSoftwareArchitecture.pdf— 分层架构总览建议先看这份AUTOSAR_CP_SWS_RTE.pdf— RTE 软件规范AUTOSAR_CP_TPS_SoftwareComponentTemplate.pdf— 软件组件模板AUTOSAR_CP_TPS_SystemTemplate.pdf— 系统模板AUTOSAR_CP_SWS_ECUStateManager.pdf— ECU 状态管理AUTOSAR_CP_SWS_BSWGeneral.pdf— 基础软件通用规范文中的图统一约定蓝色实线箭头是调用方向绿色虚线是回调或返回箭头上写的是真实的接口函数名。目录架构总览与设计原则逐层拆解接口体系与调用规则多核、分区与安全隔离软件集群开发方法学与规范索引常见问题1. 架构总览与设计原则1.1 为什么会有这套架构传统 ECU 开发里应用逻辑和驱动代码是混在一起的算法函数里直接出现某个 MCU 的寄存器名板级外设的操作散落在业务代码中间。这样写出来的东西有两个绕不开的问题——换个芯片基本要重写不同供应商的模块也拼不到一起。ECU 数量一多、功能一合并集成和测试成本就压不住了。AUTOSARAUTomotive Open System ARchitecture就是为解决这件事成立的联盟标准OEM、Tier-1、芯片厂和工具商一起定了套 ECU 软件的分层结构和接口规范。Classic PlatformCP是其中面向深度嵌入式、强调实时性和确定性的那一支。1.2 三条设计原则CP 的思路可以概括成一句话基础设施标准化应用功能自定义Standardize the Infrastructure, Customize the Application。落到具体做法上是三条硬件无关应用层不直接碰 MCU 和板级硬件寄存器操作被压在 MCAL 里。位置可重分配写 SWC 的时候不用管它最后落在哪颗 ECU 上映射是配置阶段的事。工具生成代码系统拓扑、端口连接、BSW 参数都写在 ARXML 里RTE 和 BSW 之间的桥接代码由工具生成不手写。第三条经常被低估。它的实际含义是工程里真正需要人写的是 SWC 内部逻辑剩下的层间胶水代码全是配置产物。1.3 两个视角顶层视角最粗三层软件叠在一颗微控制器上。粗粒度视角把 BSW 再拆开服务层、ECU 抽象层、MCAL 依次相邻复杂度驱动CDD横在旁边不受这个次序约束。后面两章就按这两张图自上而下展开。2. 逐层拆解2.1 应用层SWC、端口与 VFB2.1.1 软件组件应用层由一个个 AUTOSAR 软件组件SWC组成它是应用逻辑的最小封装单元原子软件组件Atomic SWC不可再拆具体算法写在这里。传感器/执行器软件组件与本地硬件信号绑得比较紧的一类 SWC通常固定映射在某颗 ECU 上。组合软件组件Composition把若干相关 SWC 在逻辑上打包本身不含实现代码。2.1.2 端口与接口SWC 之间、SWC 与 BSW 服务之间不允许直接读写全局变量或者直接调函数必须经由端口PortP-Port提供端口向外输出数据或提供服务。R-Port需求端口向内要数据或请求服务。端口要挂在某种接口Interface上接口决定数据长什么样、怎么传Sender-ReceiverS/R数据元素的异步传递接近广播/订阅的思路。Client-ServerC/S服务调用客户端发请求服务端执行并回结果同步异步都支持。Mode Switch模式切换通知比如工作模式、休眠模式。2.1.3 VFB设计阶段的一层抽象VFBVirtual Functional Bus不是某个模块而是设计阶段的一个约定架构师把 SWC 挂在一条虚拟总线上连起来此时不需要回答“SWC 落在哪颗 ECU”“信号走 CAN 还是以太网”这两个问题。系统配置阶段把 SWC 分配到具体 ECU 之后这条虚拟总线才被消解成真实代码同一颗 ECU 内的通信变成 RTE 里的内存拷贝或指针传递跨 ECU 的通信由 RTE 调用 BSW 的 COM 模块经总线发出去。关键点是上层 SWC 的代码在这几种情况下完全一样差别只体现在 RTE 的实现里。这就是“位置透明”的实际含义。2.2 RTERTE 是应用层和 BSW 之间的那层薄胶水有两点容易忽略它是生成代码不是静态库。RTE 由 RTE 生成工具Vector DaVinci、EB tresos 等按 ECU 的 ARXML 描述生成换一颗 ECU 就要重新生成一份。它保证位置透明。SWC 调Rte_Write_p_o()或Rte_Call_p_o()时不需要知道目标在同核、跨核还是在别的 ECU 上。RTE 的接口分两个方向向上给 SWC 的是Rte_前缀的标准 API向下BSW 收到总线数据后通过回调Callback通知 RTE由 RTE 触发对应的 Runnable Entity。2.3 基础软件层BSW 从高到低分三个子层。2.3.1 服务层服务层给应用和 BSW 其他模块提供系统级服务按功能分成几组。系统服务模块干什么OS实时操作系统基于 OSEK/VDX 扩展管 Task 调度、Resource 互斥、Event 同步、Counter/Alarm 定时EcuMECU 的上电、初始化、下电、休眠时序BswM仲裁模式请求协调各 BSW 模块的状态切换WdgM程序流监控看逻辑顺序和执行时间是否正常Det收集开发阶段的 API 误用和断言错误Dem诊断事件管理负责 DTC 存储和冻结帧存储服务模块干什么NvM非易失数据管理同步/异步读写、CRC 校验、冗余备份通信服务模块干什么Com信号级通信打包解包、大小端转换、传输属性控制PduRPDU 路由总管在 Com、CanTp、CanIf、Dcm 之间转发DcmUDSISO 14229诊断协议栈2.3.2 ECU 抽象层ECU 抽象层的任务是屏蔽板级硬件的连接方式。同一个 LED可能是 MCU 的 GPIO 直连也可能挂在外扩的 SPI 芯片上对上两者都表现为 IoHwAb 的同一个接口对下直连的调Dio_WriteChannelSPI 扩展的调Spi_SyncTransmit。这一层主要有三组I/O 硬件抽象IoHwAb板级数字量、模拟量的抽象。通信硬件抽象CanIf、CanTp、CanTrcv、CanNm、CanSm 等。CanIf 是这一层的枢纽屏蔽具体的 CAN 控制器和收发器CanTp 夹在 PduR 和 CanIf 之间做 ISO 15765-2 的分片与重组不同资料把 CanTp 归到服务层或 ECU 抽象层都有位置上它就是这两者中间的一层。存储硬件抽象MemIf / Fee / EaFlash、EEPROM 的抽象。2.3.3 MCALMCAL 在 BSW 最底层直接读芯片寄存器驱动由芯片原厂提供代码强依赖芯片架构TriCore、ARM Cortex-M/R 等换芯片必须换这一层但向上暴露的 API 是 AUTOSAR 规范里写死的标准 C 函数。主要模块MCU、GPT、WDG 这类微控制器驱动PORT、DIO、ADC、PWM 这类 I/O 驱动CAN、SPI、ETH 这类通信驱动以及 FLS 这类存储驱动。2.4 复杂度驱动CDD2.4.1 什么情况下用它CDD 是唯一可以直通 RTE 和硬件的模块。AUTOSAR 留这个口子主要是为了三类场景高实时性控制比如喷油、电机高频闭环逐层经过 MCAL → IoHwAb → RTE 的调用深度会带来不可接受的延迟。非标硬件规范里没有定义的特殊外设。老代码搬迁把原来非 AUTOSAR 的代码快速接进来。2.4.2 代价和限制用 CDD 就等于放弃移植性代码和具体硬件、具体应用绑死。另外两条也要记住CDD 向应用层暴露接口同样要走 RTE 的 Port不能自己开一条路让 SWC 直接调。CDD 如果要调其他 BSW 模块的 API得先确认那个 API 是可重入的因为 CDD 经常被多个上下文同时调用。3. 接口体系与调用规则3.1 四类接口AUTOSAR 里“接口”这个词用得很满实际上有四类区分依据是“谁调谁”和“名字谁定”!接口类型谁调谁名字谁定AUTOSAR 接口AUTOSAR InterfaceSWC → SWC经 RTE工程师在 ARXML 里按端口命名生成的 API 名随配置变如Rte_Write_*标准化 AUTOSAR 接口Standardized AUTOSAR InterfaceSWC → BSW 服务模块规范固定如Rte_Call_NvMService_*标准接口Standardized InterfaceBSW 模块 → BSW 模块直接的 C 函数调用规范固定形参和返回值由 SWS 定义如PduR_ComTransmit硬件依赖接口Hardware Dependent InterfaceMCAL → MCU 寄存器芯片原厂定没有统一形式这张表最实际的用处是看到Rte_Write_x_y就知道它是配置生成物换个端口名函数名就变了看到Com_SendSignal就知道这个名字是规范写死的换哪家 BSW 都叫这个名字。3.2 垂直与水平调用规则分层的可维护性靠调用链规约保证规矩不多但要记准垂直方向相邻层之间上下调用是正常的上层调紧邻下层提供的接口。不允许跨层跳跃应用层不能直接调 MCAL更不能直接操作寄存器。这类代码一旦出现换芯片时基本没法自动化处理。存在一条黄线极少数性能敏感的场景典型就是 CDD允许绕过一层但要有明确理由并做过风险评估。水平方向服务层允许横向调用。例如 Dem 要存故障记录时会横着调 NvM。ECU 抽象层允许横向调用。MCAL严格禁止。CAN 驱动不能去调 SPI 或 PORT 驱动的函数硬件之间的依赖协调必须由上层的配置或模块完成。这条也很好理解——MCAL 是芯片驱动一旦互相调用依赖关系会变成一团乱麻芯片厂也没法单独替换某个驱动。4. 多核、分区与安全隔离4.1 多核与 Master/Satellite芯片往多核走Infineon AURIX TC399/TC499 这类之后CP 也扩展了多核支持分布式 BSWCanIf、Dio 这类模块可以在多个核上各跑一份实例。Master/Satellite通信栈Com和状态管理EcuM通常采用主从结构。Master 跑在主核Core 0掌握全局状态、负责仲裁Satellite 跑在辅核只收集本核的请求通过 IOCInter-OS-Application Communication与 Master 通信。IOC 是 OS 提供的跨核通信机制本身不是 BSW 模块。4.2 内存分区防止一个模块越界写指针把整个系统带走靠的是芯片的 MPU内存保护单元AUTOSAR 把它用 OS-Application 的形式管起来Trusted Partition受信任分区不受 MPU 限制可以直接访问硬件和任意内存。BSW 默认放在这里。Non-Trusted Partition非受信任分区受 MPU 监控只能访问自己分区内的内存。应用 SWC 一般放在这类分区里。需要注意的是分区是资源和权限的概念不是“一个 SWC 一个分区”。具体怎么切由项目按安全等级和耦合程度决定。4.3 混合关键度同一颗 ECU 上同时跑 ASIL-D如制动控制和 QM如空调调节是常见情况前提是两者之间做到互不干扰Freedom From Interference隔离具体要管三件事内存不能互踩、CPU 时间不能被对方抢占、外设不能被对方改配置。看门狗是很典型的例子。WdgM、WdgIf 和 Wdg 驱动被单独放进 ASIL 分区这样即使 QM 侧的以太网栈因为内存非法访问崩掉看门狗栈仍然跑得动还能把 ECU 复位拉回来。反过来如果看门狗和 QM 代码混在一个分区里前者就救不了后者。5. 软件集群5.1 为什么要拆传统 CP 镜像是单体编译的改一行 SWC 代码整颗 ECU 就要重新编译、链接、全量刷写。放到 OTA 场景里这没法接受。AUTOSAR 在新版本里引入了软件集群CP Software Clusters把镜像拆成两块Host Software Cluster宿主集群大部分 BSW、OS 和驱动与硬件绑得最紧通常不频繁更新。Application Software Cluster应用集群应用 SWC 加一小截局部 RTE可以独立编译、独立生成镜像单独做 OTA 升级Host 侧不动。5.2 SwCluC 与代理机制跨镜像调用靠 Software Cluster ConnectionSwCluCBinary ManifestBManif集群二进制对象的接口描述里面是导出的函数指针表、内存映射地址等元数据。代理Proxy机制代理模块的作用是顶替应用集群里不存在的 BSW 模块分成两半——High Proxy位于 Application Cluster对外提供被顶替模块的接口把应用侧的调用接住Low Proxy位于 Host Cluster拿到请求后真正去调用底层的 BSW 模块。对调用方来说这个替换是透明的应用代码里写的还是原来那个 BSW 模块的 API 名High Proxy 只是把调用重定向过去。6. 开发方法学与规范索引6.1 工具链流程CP 的开发流程高度依赖工具链输入输出基本全是 ARXML每一步做的事System Description系统描述整车视角的系统描述所有 SWC、拓扑、信号和端口连接都在这里。System Extract of System Description按 ECU 切出来的系统描述视图。ECU ExtractECU 抽取文件单颗 ECU 的视图OEM 把它交给 Tier-1 作为开发输入。ECU ConfigurationECU 配置用 DaVinci、EB tresos 这类工具把 Can、Com、NvM、OS 等模块的参数配完。Generated Code生成代码生成Rte.c、Com_Cfg.c、Os_Cfg.c等代码和手写代码一起编译成镜像。第 2 步和第 3 步经常被混淆System Extract 是给 Tier-1 的视图ECU Extract 是单颗 ECU 的视图两者不是同一份文件。6.2 规范从哪份开始看AUTOSAR 的规范文档很多翻的时候按这张图找![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]思路是先在总览规范里定位模块属于哪一层、和谁交互再去对应模块的 SWS 里查 API 和配置参数。两边描述对不上时以 SWS 为准——总览文档里的图偏示意SWS 才是可实现的细节。7. 常见问题Q1为什么 CDD 不能随便跨核去调 BSW 的函数BSW 内部那些 C 函数标准接口通常不是完全可重入的而且默认自己在同一个核上跑。辅核上的 CDD 如果直接调主核 BSW 的内部函数会撞上多核并发竞态严重时直接内存访问违例。CDD 在辅核上要访问 BSW得经 RTE 的端口走由 IOC 处理跨核同步。Q2AUTOSAR 接口和标准化 AUTOSAR 接口为什么要分开前者用于 SWC 之间的数据交换端口名和数据类型由工程师在 ARXML 里定义生成的 API 名跟着配置变如Rte_Write_DoorState_State后者是 SWC 访问 BSW 标准服务的入口API 名由规范固定如NvM_ReadBlock。分开的实际收益是换一家 BSW 供应商应用代码不用改。Q3VFB 和 RTE 代码差在哪VFB 是设计时的逻辑抽象一行 C 代码都没有RTE 是运行时的代码实体。配置工具把 SWC 映射到具体 ECU 之后RTE 生成器负责把虚拟连接翻译成真实的内存写操作、指针传递或 COM 调用——VFB 在这个阶段就被消解掉了。小结把上面这些收一下平时最常用到的是四点分层先记一句话上层只能调紧邻下层MCAL 内部不许横向调。接口看名字来源Rte_*是配置生成物其他“模块_动作”形式的 API 名基本都是规范固定的。CDD 是口子不是常规手段用它换来实时性和非标硬件支持代价是这块代码不可移植。多核和分区先想清楚谁和谁不能混状态管理走 Master/Satellite安全等级不同的代码靠分区隔开。架构本身不复杂真正花时间的是每个模块的职责边界和配置参数那部分只能对着 SWS 一份一份啃。

相关新闻

Linux运维:swap交换空间、GRUB2引导、救援模式重置root密码、fstab故障排错

Linux运维:swap交换空间、GRUB2引导、救援模式重置root密码、fstab故障排错

swap交换分区 系统启动原理完整笔记 一、swap交换空间swap交换分区:在硬盘上划分一块空间充当内存后备。当物理内存耗尽时,内核会把长时间不访问的内存数据(冷页)写入swap;当程序再次需要该数据时,再从swa…

2026/9/24 3:44:43 阅读更多 →
ADAU1701硬件设计与SigmaStudio工程实战指南

ADAU1701硬件设计与SigmaStudio工程实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 3:44:43 阅读更多 →
AI陪伴机器人单文件H5宣传站-一个人怎么写出项目官网

AI陪伴机器人单文件H5宣传站-一个人怎么写出项目官网

11-单文件H5宣传站-一个人怎么写出项目官网系列:AI 伙伴(AI-Partner)——具身智能陪伴机器人 数据接口部署与二次开发篇(11/12)一、先抛问题:项目官网到底需要多重 AI 伙伴(AI-Partner&#xf…

2026/9/24 3:43:42 阅读更多 →

最新新闻

WorkBuddy能给企业带来什么?从AI工具到业务智能体

WorkBuddy能给企业带来什么?从AI工具到业务智能体

很多公司现在已经在用 AI 了。但你去问员工“平时怎么用”,答案通常都差不多。写个方案的时候让 AI 帮忙改一下,开完会把录音或者文字丢进去整理纪要,销售写客户邮件时让 AI 润色几句。财务手里有一张乱七八糟的 Excel,也可能先让…

2026/9/24 4:29:14 阅读更多 →
为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

Diogo Almeida(迭戈阿尔梅达)这周过得并不轻松。作为TypeSafe的联合创始人兼CEO,他刚刚发布了Jev——一个在整条时间线上刷屏的产品,而他自己形容当下的状态是"情绪上从未这么糟过",像一具被各种突发状况拖垮…

2026/9/24 4:29:14 阅读更多 →
鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

在光缆故障追踪中,一个常见的尴尬是:仪表在机房或井口,人却在另一端敲击光缆,两边沟通全靠对讲机,效率低还容易出错。鼎讯光缆路由追踪仪G-4000B针对这个痛点,加入了手机APP远程控制功能,让单人…

2026/9/24 4:29:14 阅读更多 →
小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

9月23日,小米秋季新品发布会在北京举行。小米18 Pro、小米18 Pro Max正式发布,性能、屏幕、背屏、影像等全面升级;小米平板9系列、小米手环11、小米手表S5以及多款科技家电新品同步亮相。小米18 Pro系列带来多项产品创新。全系搭载超级像素2.…

2026/9/24 4:29:13 阅读更多 →
人声音色怎么克隆

人声音色怎么克隆

如果需要统一视频中同一角色的跨片段声线,或是为旁白配置指定音色,可以借助专业剪辑工具的音色克隆功能完成处理。目前剪映专业版已支持基础的音色克隆与角色音色配置功能,处理前需要确认你使用的音色样本已获得合法授权,本文将基…

2026/9/24 4:29:13 阅读更多 →
LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:28:13 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →