当前位置: 首页 > news >正文

汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程,经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时,可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取,来勾勒出汽车软件开发模式的特殊性和变迁性。

01.车载与非车载软件的分类及差异

汽车软件是非常复杂的,种类繁多自是预料之内,首先需要解决分类这个最基本的问题。

1.1 带物理盒子的车载软件

最正宗的汽车软件当属ECU(Electronic Control Unit,电子控制器单元)里的软件,也就是车载软件。直观来看,就是固定在车上,并通过线束与电气系统或其他ECU连接起来的物理盒子。

ECU已经在汽车行业存在了近60年,但直到现在,ECU仍然是谈论汽车软件时的主要对象。只不过随着汽车电子电气架构的演变,ECU的功能越来越集中化——即现在炒得热火朝天的域控或中央计算。

无论如何,形式上来看,ECU或DCU(Domain Controller Unit,域控制器)都是嵌入在物理盒子里的车载软件产品

1.2 车载软件的内涵

除了形式,再看功能内涵。首先,基于这两年广泛流传的博世五域划分,可以将车上的电子软件功能进行分区,即动力域(车辆运动)、底盘域(安全)、车身域(车身电子)、座舱域(娱乐信息)和自动驾驶域(驾驶辅助)

这五域划分可以给出大框架的参考,但对于区分开发模式来说并不够友好。进一步的,车载软件可以划分为四类:

  • 第一类:与整车高度耦合或安全等级较高的模块,如发动机控制、电机控制、刹车控制、电子助力转向控制、车身稳定控制系统ESP、混动系统控制、安全气囊控制、电池热管理等。
  • 第二类:功能独立且安全等级较低的车身控制模块,如网关、照明控制、雨刮控制、车门车窗控制、无钥匙启动、天窗控制、座椅记忆控制、后视镜控制、功放控制等。
  • 第三类:智能驾驶,ADAS、AD及附属的雷达或摄像头传感器等。
  • 第四类:智能座舱或说车机,主要是以各类大屏为承载的软件。

1.3 非车载软件

除了车载软件,非车载类软件也广泛地存在于汽车行业的各个领域。包括云平台(如数据埋点后台、电池状态远程监控、OTA运营平台)、工具链软件、生产用下线电检软件(EOL,End Of Line)以及手机车联app车机上的第三方app

其中,云平台与app和互联网软件比较接近,车载软件和互联网软件则是完全不同类别的东西,谈论主体的不一致经常是两个行业背景的人产生分歧的原因之一。

当然,现在这些非车载软件还没有形成稳定及具规模的生态,所以本文仍然主要基于车载软件展开,但是V2X(Vehicle to Everything,车用无线通信技术)作为热点趋势仍值得被关注。

02.从代码到整车的5层集成

汽车软件种类繁多、模块众多,而且需要装在整车上跨模块、跨域体现功能,所以只要电子电气架构的集中化没有走到中央计算和云计算,只要供应链各方的软硬件自主权没有被收归一统,多层集成就不可避免。

按照当下的架构发展阶段可以把汽车软件的集成分为5个层次:

  • 将软件单元集成到一起
  • 将软件集成到硬件上
  • 将硬件集成到机械壳体上
  • 将ECU 集成到子系统中
  • 将子系统集成到整车上

03.联调与整车级评价

汽车软件开发是个各模块或功能域协作的过程。一直以来,大家习惯于在各自的电脑上、台架上完成开发与验证,然后在集成点处进行确认。“各人自扫门前雪”的协作惯例能让分工清晰,也会让几乎不可避免的问题延后暴露。

因此,部分与整车环境依赖关系比较紧密的模块(第一类)会提前进行联调,比如说安全气囊控制器:整车碰撞试验会花费高额的成本,一旦试验失效会造成时间和金钱的巨大浪费,前期的联调非常必要,比如安装方向、传感器位置、线束连接、电阻范围、DTC状态、软件版本及对手件响应等的联调确认。当然安全气囊太成熟、太传统,软硬耦合程度太深了,对于与其他模块或整车耦合程度没那么高的模块(第二类),其联调必要性就会减弱,比如简单的天窗控制模块和方向盘加热模块,可能台架上连接一个电机和加热垫就绰绰有余。智驾和座舱逐渐脱离了传统汽车软件开发模式,而二者之间也有些不同。

智驾的开发验证可以依赖一部分仿真模拟,但终归需要整车的调试标定,尤其需要运动控制部分的功能完善。智舱集成了大量的人机交互内容,无论是控制指令的发出还是反馈信息的投屏,大屏正在变成人与车的I/O口,这让座舱的开发颇为困难,所谓联调或者协同验证的意义和必要性也十分显著。

总之,这一趋势正逐渐显现:联调正伴随着架构的集成化逐渐演变为对整车整体的评价。

04.开发验证受制于实车环境

仿真是个非常古老的概念,其发展看起来始终有些缓慢,汽车开发的各层级开发验证,都难以离开真实的物理环境,也就是车。车很贵,工程车尤其贵,退而求其次,大家用模拟信号与负载、用简易台架加ECU、用白车身、用拼凑的实车......而求其次自然会求来软件版本不对齐、验证负载不充分、暴露问题不及时等等各类次的问题。

受制于样件和实车的环境是汽车开发的特点,特别地,在架构融合的过渡阶段,更耦合的功能、更多的交互,会让这种单一仿真环境凸显出更大的问题。

05.考虑生产

一切软件都需要进入整车,从整车层面解决客户需求,而进入的第一步和主要步骤还是通过生产装配,特别是对于第一类(与整车高度耦合或安全等级较高的模块)软件,所以汽车软件要关注制造、关注生产。原因有二:

  • OTA技术、流程和监管还不足够成熟,还不能自由OTA。
  • 现有的标准化生产方式仍然足够安全可靠。

同时,ASPICE还会一定程度地回归,会随着行业生态的恢复和产品方案的成熟逐渐体现出其必要的规范性意义,其分层意义可能会随着架构集中的进一步发展而减弱。

06.全文小结

本文因汽车软件所在行业与产品特殊性,首先区分了汽车软件的分类,最典型的当属车载软件,按照开发模式的差异性分成了4类,而行业的方向正在向非车载软件延展。

对于分布式架构和协同供应链下的车载软件,多层集成是其非常直接的特点,大体来看,从代码到整车可分为5层。

每个集成点都是一个接口,接口之间需要联调,尤其对于跨模块、多接口的复杂系统。而随着架构的集中化,这种趋向整车级的评价会是越来越突出的趋势。

在仿真足够真实之前,出于成本的考虑,开发始终会受制于实车环境。同样的,在OTA足够可靠之前,汽车软件不得不考虑其对生产的影响和生产对其的影响。

总得来说,汽车软件的特点与两个概念密切相关:软件架构的软硬耦合和整车电子电气架构的分布式。而伴随着软硬解耦和架构集中化,汽车软件的特异性会逐渐地演变,乃至消亡。

原文链接:汽车软件开发模式的7个特点

相关文章:

汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程,经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时,可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取,来勾勒出汽车软件开发模式…...

双屏联动系统在展厅设计中的互动类型与效果

随着各项多媒体技术的快速发展,让展厅中的各类展项得到技术升级,其中作为电子设备中最基础的显示技术,不仅优化了内容的展示质量,还实现了更具互动性的创新技术,如双屏联动系统就是当前展厅设计中最常见的技术类型之一…...

STM32F407移植OpenHarmony笔记5

继上一篇笔记,搭建好STM32的编译框架,编译出来的OHOS_Image.bin并不能跑不起来。 今天要在bsp里面添加一些代码,让程序能跑起来。 先从裸机点亮LED灯开始,准备以下3个文件:startup和system文件可以用OHOS官方代码。 /device/boar…...

点击其他区域隐藏弹出框效果

一般下拉框或者选择框,持久展示时会给用户显示的隐藏方式,如点击事件后。也可以添加隐式的隐藏方式,如点击弹出框之外的区域。 CSS方法-focus伪类 当触发的元素是可以focus,以输入框为例。 可以将弹出框出现的时机设置在input:…...

Python一些可能用的到的函数系列123 ATimer2-时间偏移

说明 之前确定了时间轴(千年历),以及时间的转换方法。其中时间轴的数据将会存储在集群,以及通过RedisOrMongo保存部分常用的数据。 本次讨论时间偏移的度量问题。 内容 1 两种形式 我们提到时间时,通常会有两种方…...

企业微信主体变更 怎么操作?

企业微信变更主体有什么作用?当我们的企业因为各种原因需要注销或已经注销,或者运营变更等情况,企业微信无法继续使用原主体继续使用时,可以申请企业主体变更,变更为新的主体。企业微信变更主体的条件有哪些&#xff1…...

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例:比特币的可扩展性挑战8.1.3 拓展案例 1:以太坊的可扩展性改进8.1.4 拓展案例 2:侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例:比特币交易的安全性8.…...

基于STM32的云上OneNET智慧大棚(包含程序设计报告)

目录 概要 作品介绍 设计原理 设计作品结构 软件部分 概要 为了解决传统农业生产效率低下,消耗大量的人力物力,不能精确的对农作物实现监控的问题,从而最大限度的提高农业生产力,实现优质、高产、低耗、环保的可持续发展物联…...

11.scala函数进阶

目录 概述函数scala函数和方法的区别第一种第二种方法转函数 函数柯里化 结束 概述 函数 vs 方法 1.定义 方法:def函数:> 2.方法本质上是一个特殊的函数3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值…...

在WebSocket中使用Redis出现空指针异常解决方案

文章目录 在WebSocket中使用Redis1.问题描述2.原因3.解决步骤1.新建一个SpringUtil.java类,通过getBean的方法主动获取实例2.在WebSocketSingleServer.java中导入 在WebSocket中使用Redis 1.问题描述 在controller 和 service中都可以正常使用Redis,在…...

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体

问题:第十三届全国人民代表大会第四次会议召开的时间是()。 A. 2018年3月3日至3月11日 B. 2019年3月5日至3月11日 C. 2020年3月5日至3月11日 D. 2021年3月5日至3月11日 参考答案如图所示 问题:顾客满意是顾客对一件产品满足…...

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)

文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例:区块链在金融领域的发展10.1.3 拓展案例 1:区块链在供应链管理中的应用10.1.4 拓展案例 2:区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…...

JVM工作原理与实战(三十一):诊断内存泄漏的原因

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、诊断原因 二、MAT内存泄漏检测的原理 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线…...

#{}和${}的区别

#{}和${}的区别 .本质区别:使用注意事项防止SQL注入排序like查询 . 在使用mybatis操作数据库的时候,我们在编写sql语言的时候,会遇到一个问题,就是在传参的时候,有两个符号#,$.这两个符号有什么异同呢,接下来,我就会带着大家对这个问题进行简单的探讨 本质区别: #执行的是预编…...

【数据结构】(三)树Tree

目录 1、基本概念 2、二叉树Binary Tree 3、树、森林与二叉树的转换 4、赫夫曼树Huffman Tree与赫夫曼编码Huffman Coding 1、基本概念 (1)树(Tree)是 n(n ≥\geq 1)个节点的有限集,n 0时称…...

扩展坞 接两个显示器

笔记本电脑如何外接两个显示器,达到三个屏同时显示? 3 笔记本有 2 个显示扩展接口 目前笔记本中最常见的就是 1 个 HDMI 口 1 个支持 DP 协议的 Type-C 口或 2 个支持 DP 协议的 Type-C 口,此时使用 HDMI 线和 Type-C 转接线分别直连两台显…...

鸿蒙 ArkTS 从数组内查找指定的数据

let arr [1, 2, 3, 4, 5]; let target 3; let result arr.filter(item > item target); let a String(result) 将数字转换成文本型 console.log(a); 亲爱的读者: 首先,我要感谢您抽出宝贵的时间阅读这篇文章。我深知,您的每一分每一…...

qemu 抓取linux kernel vmcore

一、背景 在qemu调试linux kernel时 有时我们会遇到dump 情况,这时可以通过gdb 方式连接分析dump, 但实际中我们用得更多的是离线dump 分析,分析的文件通常是vmcore(linux kernel panic 生成的coredump文件)或者ramdu…...

RabbitMQ 死信队列应用

1. 概念 死信队列(Dead Letter Queue)是在消息队列系统中的一种特殊队列,用于存储无法被消费的消息。消息可能会因为多种原因变成“死信”,例如消息过期、消息被拒绝、消息队列长度超过限制等。当消息变成“死信”时,…...

除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?

作为一位长期养猫的铲屎官,我深刻理解只有养猫人才懂的困扰,那就是家里到处都是猫毛和异味。我发现自从开始养猫之后,家里的空气质量变得不佳。猫毛和皮屑飞扬,而且室内空气中的污染物也越来越多。这种低质量的空气对我们的健康有…...

有趣的css - 好看的呼吸灯效果

整体效果 这个效果主要用 css3 的 animation 属性来实现的。 这个效果可以用作在网站的整体 Loading&#xff0c;也可以放在网站首屏当一个 banner 的背景也是非常棒的&#xff01; 代码部分 html 部分代码&#xff1a; <div class"app"><span class&quo…...

二叉树-堆应用(1)

目录 堆排序 整体思路 代码实现 Q1建大堆/小堆 Q2数据个数和下标 TopK问题 整体思路 代码实现 Q1造数据CreateData Q2建大堆/小堆 建堆的两种方法这里会用到前面的向上/向下调整/交换函数。向上调整&向下调整算法-CSDN博客 堆排序 整体思路 建堆&#xff08;直…...

猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…...

线程池相关的类学习

Executor public interface Executor {//执行任务void execute(Runnable command); }ExecutorService public interface ExecutorService extends Executor {//关闭线程池&#xff0c;不能再向线程池中提交任务&#xff0c;已存在与线程池中的任务会继续执行&#xff0c;直到…...

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以&#xff0c;我们要重视所有可能影响 Redis 性能的因素&#xff08;如命令操作、系统配置、关键机制、硬件配置等&#xff09;。 影响 Redis 性能的 5 大方面的潜在因素分别是&#xff1a; Redis 内部的阻塞式操作C…...

如何在 JavaScript 中使用 map() 迭代数组

简介 从经典的 for 循环到 forEach() 方法&#xff0c;JavaScript 中有各种技术和方法用于遍历数据集。其中最流行的方法之一是 .map() 方法。.map() 通过在父数组的每个项目上调用特定函数来创建一个数组。.map() 是一个非变异方法&#xff0c;它创建一个新数组&#xff0c;而…...

学习JavaEE的日子 Day19 常用类

Day19 1.包装类的使用 理解&#xff1a;8种基本数据类型对应类 出现原因&#xff1a; ​ Java为纯面向对象语言(万物皆对象)&#xff0c;8种基本数据类型不能new对象&#xff0c; ​ 就破坏Java为纯面向对应语言的特征&#xff0c;Java又为8种基本数据类型分别 ​ 匹配了对应的…...

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…...

漏洞01-目录遍历漏洞/敏感信息泄露/URL重定向

目录遍历漏洞/敏感信息泄露/URL重定向 文章目录 目录遍历敏感信息泄露URL重定向 目录遍历 敏感信息泄露 于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; ---通过访问url下的目录&#xff0c;可以直接列出目录下…...

软件工程知识梳理4-详细设计

详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统&#xff0c;也就是说.经过这个阶段的设计工作.应该得出对目标系统的精确描述.从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。 详细设计的的目标不仅仅是逻辑上正确地实现每个模块地功能&a…...