【工作生活】汽车电子嵌入式开发简介

news2024/11/17 12:28:08

目录

1. 目标

2. 要分享什么

3.1 行业知识

3.1.1车载行业知识:

3.1.2项目:

3.1.3开发测试工具:

3.2 硬件平台

3.3 基础知识

3.4 工作生活

3. 我们是谁


1. 目标

随着新能源汽车的快速崛起,汽车电子行业开始快速发展,而汽车软件对功能安全要求很高,对工程师的需求和要求也越来越大。且汽车ECU开发标准,规范众多,AUTOSAS这座大山更是望其项背,本人从0到1学习汽车ECU开发,深知其中的辛苦。基于这样的背景,想建立一个汽车电子软件知识系统分享的平台,从原理分析到代码分析最后再到实际项目应用,让初入行的汽车工程师少走弯路,同资深的工程师相互学习。作者也需要吃饭,部分内容付费,不喜勿喷!

2. 要分享什么

如上图所示,分享的内容包括汽车电子软件工程师所需要掌握的基础知识,硬件平台,行业知识,以及职业软实力知识。希望形成一条主线,在这条主线上删繁就简逐步建立属于自己的知识体系框架。

3.1 行业知识

3.1.1汽车电子行业知识:

AUTOSAR:这里先介绍Class Platform AUTOSAR,Adaptive Platform AUTOSAR还没接触过,暂不介绍。

图片

  对于车载或者电控MCU平台的项目,AUTSAR能够帮助我们快速开发和迭代项目。基于个人对AUTOSAR的学习经验,学习AUTOSAR不能只停留在文档阅读上面,一定要基于源码来阅读,然后付诸于实践,特别是在应用层使用AUTOSAR方法论(port,interface, composition,data type.....)的时候一定要基于实际项目来理解,这样才能真正掌握。

  在学习当中要总结一套自己的阅读技巧,比如我开始学习的时候就记录了一下我的学习步骤:

step1: 总体预览下这个模块实现的功能,看文档的功能概述

step2: 浏览下模块中的各种概念定义

step3: 看代码的模块配置定义文件,对照着配置实现代码,不懂的概念到文档中查找理解

step4: 看懂所有的配置后再去看函数实现,文档有函数的功能说明。

note1: 对于每个模块,看它实现了什么功能,调用下层什么模块,被哪个上层模块在什么场景下使用。

note2: 先抓主线,然后在整体框架上去看模块某个具体的功能是怎么是实现的!-- 以COM模块为例,主线就是Com的收发机制,底部收到CAN数据到COM层怎么更新数据;COM层怎么发送数据;COM和RTE的交互实现。搞清楚这个主线之后,在去分析COM模块中的Sequence Control或者Update-Bits是怎么实现的!

图片

以CAN协议栈为例。分析CAN TRANCEIVE-->CAN DRIVER-->CANIF-->PDUR / CANTP/CANNM/CANSM整个协议栈,形式上从文档出发,结合开源源码和工具分析CAN协议栈的具体实现和使用,然后最好能以Demo的形式给出示例。 

复杂驱动:

图片

  电控类项目(BMS, BCM, VCU)如BMS的单体采样控制、车身域/BCM的高低驱输出控制,动力域/VCU的刹车或上下电控制以及整个ECU的电源管理对采样的精度和电源的可靠性要求很高,都会使用特殊的芯片来实现。而对这些特殊芯片的操作AUTOSAR没有定义规范,就需要复杂驱动来实现。

  对于复杂驱动,正向功能的开发当然很重要,但是对于其诊断和自恢复功能的实现也特别重要(VCU要是突然异常掉电了,要是没有证据证明不是自己的问题,那你就完蛋了。。。)。而对于复杂驱动的学习,最重要的就是看Datasheet,然后多和硬件工程师讨论,最后疯狂的测试。

  对于这部分的学习,将结合具体的应用场景从Datasheet出发,一步一步的实现一个可用的复杂驱动,最后最好能总结出一个驱动框架。

网络管理:

图片

  网络管理最重要的功能就是保证整车上的所有ECU同睡同醒,最大程度上的节约用电(理想很丰满,现实很骨感,一旦一个ECU的网络管理出现问题,整车所有的ECU都不会休眠或掉电。。。)。而网络管理一般用OSEK网络管理和AUTOSAR网络管理,目的都是一样。对于这部分的学习,将从概念到源码再到实践,要在仿真器上实现OSEK网络管理建环,AUTOSAR网络管理睡眠。

诊断UDS:

  诊断部分最重要的两个协议就是传输层ISO-15765协议和应用层ISO-14229协议,协议实现的载体一般是CAN通信服务。传输层实现数据的类型校验和数据的上传下达、流控的实现、各种定时器的实现。应用层则实现具体的服务,比如DTC的读写,IO的诊断控制,诊断刷写升级ECU等。

将从CAN邮箱中断收到物理寻址或功能寻址报文开始,一步一步分析整个UDS协议栈的具体实现。

BootLoader:

  BootLoader最重要的功能就是实现ECU的升级。一般独立的ECU(BMS,VCU...)使用CAN诊断的0x27协议实现刷写更新程序,而MCU和SOC共存的ECU会通过串口UART使用X/YModel协议实现ECU的升级。而其中最主要的指标就是刷写的成功率,以及失败后的应急方案。

  ECU升级一般要求得99.99%以上的成功率,不然一旦ECU刷写失败会导致很多的异常问题。通过双分区的办法来保证刷写失败后ECU能回退到刷写前的版本。其中的具体实现还有很多的细节考虑,比如刷写数据的校验机制,异常断电导致失败的重新刷写机制,以及防异常的写Flash代码拷贝机制等等。

EOL:

  EOL也就是End Of Line下线检测,对于汽车ECU一般在单件工厂会有一次下线检测,在整车集成后的整车下线也会有一次下线检测。而下线检测的内容一般是常见的DTC清除,各种外设的正常输入输出等等。一般会制定一个详细的下线检测流程,也就是对已经实现的功能增加一个诊断Session的功能来接管控制操作一下,看是不是我们想要的输入输出。

  EOL看似简单,就是对已实现的功能的检测,但是涉及生产无小事,因为一旦生产出问题,整个产品线就会停滞,BOSS可不会管你的,劈头盖脸的质量人员就会招呼来了。。。

标定:

图片

  标定,顾名思义就是对一些我们不能确定的参数通过实际路试情况统计得出并写到ECU的ROM当中。一般采用XCP协议实现,协议载体一般还是CAN通信协议栈。对于标定协议和具体应用我们可以思考一下的几个问题:

-- 标定的数据具体怎么定义?如果不使用Matlab定义标定数据怎么样生产A2L文件?

-- 怎么样修改我们的链接文件给我们的标定数据开闭一块特定的标定数据域?

-- 使用什么样的上位机来实现数据标定?

-- 整个XCP协议在AUTOSAR工具中是怎么配置的?

这些都是我们应该学习和考虑清楚的。

功能安全:

  功能安全属于属于锦上添花的事情,和装修房子一样你想花多少钱(时间/精力/复杂度)都可以。通俗的来讲就是通过头脑风暴的方式得出各种工况下的异常场景,然后通过具体规则划分优先级和必要性,最后指定具体的异常处理措施,将软件的可靠性做到更优。

开发流程:

  小公司可能就是一个人在战斗,基本没有开发流程这回事。但是大公司,这个还是很重要的,一旦涉及到多人开发,没有一个成熟的开发流程,各种浑水摸鱼已经异常问题就出现。

  对于汽车电子产品,常见的开发流程关键词为:自上而下,自下而上,V字型,ASPICE等等。

  不管使用哪一种,有几个关键点都是一样的:

-- 各个阶段(ET阶段,PT阶段,SOP阶段)的详细开发计划(一级,二级,三级)

-- 开发计划下的每个功能的具体负责人,及dealine时间

-- 开发节点应该提交的输出物(需求文档,需求文档评审/修改记录,详细设计文档,详细设计文档评审/修改记录,代码,测试报告)

-- 功能增长表(风险分析控制表)

-- BUG管理和追踪

-- 项目代码管理和提交/修复追踪,版本管理 控制等

3.1.2项目

项目很多,我们要学会以不变应万变,摸索一套能够套用的项目开发流程。我们首先可以从公司的第一级开发计划中筛选出二级部门计划,然后软硬件芯片选型,根据已有资源工具和人力制定详细的三级ECU开发计划。

从功能上划分,第一层可分为ASW应用层功能需求和BSW基础软件功能需求。第二层ASW需求又可分为车身控制系统、整车控制系统、智能配电系统、热管理控制系统。BSW需求又可分为MCALL需求、IOHWAB需求、CDD需求、NVM需求、UDS需求、COM需求、OS需求、WatchDog需求、ECUM需求等。第三层ASW需求就是具体的应用实现功能。

完成了具体的功能模块需求后,ASW需要根据具体的开发设计输入文档进行架构设计,输出ARXML文件,导入Matlab进行应用层需求开发。

BSW需求则使用BSW工具根据具体需求开始配置,CDD功能和IOHWAB功能需要根据实际情况调用MCAL接口手动实现。

3.1.3开发测试工具:

Davince:

  MCAL工具配置生成动态MCAL配置代码,不同芯片配置成统一的MCAL驱动程序接口。每一个MCAL接口,AUTOSAR文档已经明确定义,但每一个接口的具体实现不同的芯片又不一样,以MCU模块为例,要配置MCU模块就得对芯片的时钟十分清楚,因为MCU模块会调用统一的MCAL接口完成时钟的初始化。MCAL的配置会影响硬件的特性,这就需要我们对芯片特性和MCAL需求特别熟悉,不然就会产生很多奇怪的问题。

ISOLAR:

  ISOLAR包括四个部分的功能,BSW的配置,OS的配置,RTE的配置,ASW的配置。BSW主要配置通信协议栈,存储协议栈,诊断协议栈。OS配置任务调度表,优先级等。RTE配置SWC之间及SWC与BSW间的运行时环境。ASW配置各个SWC的接口。如果是自底向上的开发流程,需要在ISOLAR当中完成SWC的架构配置,生成ARXML文件导入到simulink进行应用层开发。

MATLAB:

  使用MATLAB/SIMULINK功能开发应用程序。使用AUTOSAR BLOKSET进行AUTOSAR架构的应用层软件开发。使用自定向下的开发模式的话,直接导入各个SWC的ARXML文件,生成模型进行应用层软件的开发。使用MBD的开发模式,模型配置,代码生成配置,模型验证配置也需要熟练掌握。

Vector系列工具:

  CANoe可以进行多ECU仿真分析,CAN报文纳秒级的分析,实车数据录制,在分析问题的时候,几乎无可替代。

  CANape完成标定功能。

  CANlalyzer是CANoe的简化版。

3.2 硬件平台

  现在行业内都在鼓吹软件定义汽车,其实某种程度上来看硬件才是定义汽车的基础。强大计算力的GPU才能支持复杂计算的自动驾驶,车载以太网的量产才能使SOA落地。而硬件中的核心就是MCU/CPU。每款芯片都会有自己IP核(ARM,PowerPc,X86)和指令集,围绕IP核各大厂商就会集成自己的外围设备生产特定功能用途的芯片(S32K, RH850等)。我们学习硬件平台需要了解从板子上电后从哪里运行第一条指令?在跑到main函数前我们的CPU到底做了哪些准备工作?这些准备工作是必须的吗?我们在项目开发过程中会去修改这些地方吗,如何修改?连接器脚本到底是怎么回事?这些都需要我们去探索实践发现。

3.3 基础知识

  《程序员的自我修养》中说到:CPU体系结构,汇编,C语言(包括C++)和操作系统,永远都是编程大师们的护身法宝,就如同少林寺的《易筋经》,是最为上乘的武功;学会了《易筋经》,你将无所不能。可见基础的重要性。

  基础不牢,地动山摇。没有遇到问题前,可能都用不到,但是一旦发生问题了,好的基础知识就能帮你快速的定位问题。

  基础牢固,学习新东西要快的多。如果你熟悉C++,学习Python基础简直就是砍瓜切菜一般。

  何谓基础,有的前辈说每个行业的基础不一样,我们不讨论这个问题。我们将讨论如何巩固学习基础知识并用于实际项目。

  C/C++,嵌入式行业的产品基本都是这C/C++写的,必须精通,这个精通包括语法知识的深入理解以及常用C/C++程序框架和技巧的熟练掌握。

  OS操作系统,一般包括实时操作系统(RTA_OS)和非实时操作系统(Linux)。对于实时操作系统如RTA_OS,我们需要深入理解实时操作系统的调度机制、优先级实时响应机制、多核多任务间数据一致性、RTA_OS的Autosar概念的具体实现。对于非实时系统如Linux,我们起码要深入理解几个常见驱动框架(IIC, Uart, Spi)的具体实现。

  计算机组成原理,汽车电子或者说嵌入式产品本身即是一个微型计算机,由存储单元,计算单元,传感器/执行器单元等物理器件构成。怎么理解这些物理器件间的功能区分又紧密合作就需要计算器组成原理来支撑。

  算法与数据结构,复杂的树或者图数据结构用的很少,但常用的栈和队列以及链表在工作中用的很多,设计到一些策略实现的时候机会用得上。如果要分享OS的源码,数据结构和面向对象的编程思想必须数量掌握。

3.4 工作生活

  梦想还是要有的,一直追求工作就是工作,生活就是生活,但随着生活角色的变化以及工作中承担的任务越来越重,二者完全解耦还是挺困难的。

我可以分享我们从初入职场的战战兢兢到面对问题后的宠辱不惊这一路成长的心路历程。

生活中角色的变化,怎么和工作达成最好的平衡?

何谓成长?跳入坑中叫挫折,爬出坑来叫成长。

新入公司,该怎么奠定江湖地位?

上面的每一句话都是亲身经历后思考的问题,后辈可以参考避坑,资深全当扯蛋瞎聊。

3. 我们是谁

  投身于新能源汽车软件行业的打工人,就职于各大TOP OEM和Tier1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1295278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次xss通杀挖掘历程

前言 前端时间,要开放一个端口,让我进行一次安全检测,发现的一个漏洞。 经过 访问之后发现是类似一个目录索引的端口。(这里上厚码了哈) 错误案例测试 乱输内容asdasffda之后看了一眼Burp的抓包,抓到的内容是可以发现这是一个…

GRE与顺丰圆通快递盒子

1. DNS污染 随想: 在输入一串网址后,会发生如下变化如果你在系统中配置了 Hosts 文件,那么电脑会先查询 Hosts 文件如果 Hosts 里面没有这个别名,就通过域名服务器查询域名服务器回应了,那么你的电脑就可以根据域名服…

15.Eclipse常用基本配置设置

在使用Eclipse进行Java开发之前,经常需要进行一些配置,其中有些配置甚至是必须的,即使开始不编辑之后开发过程中也会出一些因配置导致的小问题。本文梳理了一下Eclipse使用中常用的配置 1 编码配置 1.1 设置工作空间编码格式 打开Eclipse&…

第 7 部分 — 增强 LLM 安全性的策略:数学和伦理框架

一、说明 增强大型语言模型 (LLM) 安全性的追求是技术创新、道德考虑和实际应用的复杂相互作用。这项努力需要一种深入而富有洞察力的方法,将先进的数学模型与道德原则和谐地融合在一起,以确保LLM的发展不仅在技术上稳健,而且在道德上合理且对…

来自Sui的温馨建议:保护您的Web3私钥

当您安装一个钱包并创建Sui账户时,钱包包含一个公钥和一个私钥。保护好私钥的安全非常重要,从而可以保护您的Sui资产,包括钱包中的任何tokens。 公钥加密技术是几十年前开发的,是当今互联网上大多数安全交易的基础,包…

Python----多态

1、什么是多态 多态指的是一类事物有多种形态。 定义:多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果。 ① 多态依赖继承 ② 子类方法必须要重写父类方法 首先定义一个父类…

配电室无人值守改造

配电室无人值守改造是通过运用先进的技术和设备,将传统的需要人工值守的配电室改造成可以远程监控和管理的智能化配电室,从而实现无人值守。这种改造可以提高配电室的安全性、可靠性和效率,降低运维成本。 建立智能监控系统:通过安…

十二、MapReduce概述

1、MapReduce (1)采用框架 MapReduce是“分散——>汇总”模式的分布式计算框架,可供开发人员进行相应计算 (2)编程接口: ~Map ~Reduce 其中,Map功能接口提供了“分散”的功能&#xff…

spring boot 3.2 整合 keycloak

背景 项目中用到 keycloak,因此其他所有管理页面要集成 keycloak 做统一登录认证。 Keycloak 侧配置 容器方式启动 keycloak 服务端 docker run -d --name mykeycloak -p 8080:8080 -e KEYCLOAK_ADMINadmin -e KEYCLOAK_ADMIN_PASSWORDadmin ke…

Python ItsDangerous库:构建安全可靠的数据传输

更多资料获取 📚 个人网站:ipengtao.com ItsDangerous是Python中一个轻量级的库,旨在提供安全且简单的数据传输和签名功能。本文将深入介绍ItsDangerous的核心特性、基本用法以及在实际应用中的一些示例,通过丰富的示例代码&…

【思路代码详解】2023mathorcup大数据复赛B题妈妈杯高校数学建模挑战赛电商零售商家需求预测及库存优化问题

2023 年 MathorCup 高校数学建模挑战赛——大数据竞赛 赛道 B复赛:电商零售商家需求预测及库存优化问题 问题一 目标:制定补货计划,基于预测销量。 背景:固定库存盘点周期NRT1, 提前期LT3天。 初始条件:所有商品…

Qt12.8

使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为…

线程池的使用及实现

使用多进程进行并发编程,会频繁的创建销毁进程,效率比较慢,所以引入了线程,线程使用复用资源的方式提高了创建销毁的效率,但是随着创建线程的频率进一步提高,开销仍然无法忽略不计了。 要想办法优化此处线…

防火墙是什么?聊聊部署Web应用防火墙的作用

数字经济时代,也是一个应用爆炸的时代。在享受应用带来的便利同时,当前却出现许多热点威胁,如供应链安全、零日漏洞、数据泄露等,都给现代化应用带来严峻挑战。有了WAF防火墙的帮助,就可以拦截一系列企图通过入侵系统来…

区块链如何影响数字营销的各个方面?

在过去的几年里,由于区块链等新技术和趋势的进步,数字营销领域发生了各种变化和发展。区块链是加密货币爱好者和投资者当前的流行语。然而,它的可能性已经超出了加密货币的世界,今天,来自不同行业的组织正在获得他们的…

目标检测器技术演进简史

引言 目标检测算法的发展已经取得了长足的进步,从早期的计算机视觉方法开始,通过深度学习达到了很高的准确度。在这篇博文中,我们将一起回顾一下这些算法的发展阶段以及现代目标检测系统中使用的主要方法。 我们首先回顾早期传统的目标检测…

服务器端模板注入 (SSTI) 漏洞实战与技巧,网络高级工具透明代理的几种实现方式

服务器端模板注入 (SSTI) 漏洞实战与技巧,网络高级工具透明代理的几种实现方式。 SSTI(Server-Side Template Injection)从名字可以看出即是服务器端模板注入。比如python的flask、php的thinkphp、java的spring等框架一般都采用MVC的模式,用户的输入先进入Controller控制器,…

内网渗透基础

内网 内网指的是内部局域网,常说的LAN(local area network)。常见家庭wifi网络和小型的企业网络,通常内部计算机直接访问路由器设备,路由器设备接入移动电信的光纤实现上网。 内部局域网可以通过交换机/防火墙组成多个…

华清远见嵌入式学习——QT——作业2

作业要求&#xff1a; 代码运行效果图&#xff1a; 登录失败 和 最小化 和 取消登录 登录成功 和 X号退出 代码&#xff1a; ①&#xff1a;头文件 #ifndef LOGIN_H #define LOGIN_H#include <QMainWindow> #include <QLineEdit> //行编辑器类 #include…

《深入理解计算机系统》学习笔记 - 第四课 - 机器级别的程序

Lecture 05 Machine Level Programming I Basics 机器级别的程序 文章目录 Lecture 05 Machine Level Programming I Basics 机器级别的程序intel 处理器的历史和体系结构芯片的构成AMD 公司(Advanced Micro Devices&#xff0c;先进的微型设备) C, 汇编, 机器代码定义汇编/机器…