比亚迪嵌入式二面总结

1. 请详细介绍一下你在项目中遇到的最难的问题,是如何解决的?

参考答案:在智能小车项目中,遇到电机控制稳定性问题,高速抖动、低速响应迟钝。首先用示波器观察PWM波形,发现毛刺干扰。硬件方面:增加滤波电容和磁环抑制干扰。软件方面:实现PID控制算法替代开环控制,用Ziegler-Nichols方法整定初始参数后实测微调。加入软启动和限幅保护机制,最终稳定性提升80%以上。这个过程让我学会系统性分析问题、硬件软件协同调试,以及从理论到实践的完整开发流程。

2. 你对AUTOSAR有了解吗?

答案:AUTOSAR是汽车开放系统架构标准,分为Classic Platform(传统ECU)和Adaptive Platform(高性能计算)。分层架构:应用层、RTE运行时环境、基础软件层(BSW)、微控制器抽象层(MCAL)。核心概念:软件组件(SWC)通过虚拟功能总线(VFB)通信,实现软硬件解耦。BSW包含:操作系统、通信栈(CAN/LIN/以太网)、诊断、内存管理、加密等服务。配置工具:使用ARXML文件描述系统配置,通过配置工具生成代码。优势:提高软件复用性、降低开发成本、便于供应商协作、支持OTA升级。

3. CAN总线的报文格式是怎样的?标准帧和扩展帧有什么区别?

答案:标准帧(CAN 2.0A):帧起始1位 + 仲裁段(11位ID+RTR) + 控制段6位 + 数据段0-8字节 + CRC段16位 + ACK段2位 + 帧结束7位。扩展帧(CAN 2.0B):帧起始1位 + 仲裁段(11位基本ID+SRR+IDE+18位扩展ID+RTR) + 控制段6位 + 数据段0-8字节 + CRC段16位 + ACK段2位 + 帧结束7位。主要区别:标准帧ID为11位(2048个),扩展帧ID为29位(5.37亿个),扩展帧增加了SRR和IDE位用于区分。仲裁机制:ID值越小优先级越高,标准帧优先级高于相同ID的扩展帧。应用场景:标准帧用于传统车身控制,扩展帧用于复杂系统如诊断、网关等需要更多节点的场景。

4. 如何保证CAN通信的可靠性?

答案:硬件层面:差分信号传输抗干扰、120Ω终端电阻匹配消除反射、良好接地和屏蔽设计、隔离保护电路防止损坏。协议层面:15位CRC校验检测传输错误、帧格式校验、ACK应答确认接收、位填充防止长时间同电平导致同步丢失。错误检测:位错误、填充错误、CRC错误、格式错误、应答错误五种检测机制。错误处理:错误计数器管理节点状态(主动错误、被动错误、总线关闭),自动重传机制。软件层面:超时检测和重发、报文序列号管理防止丢失、接收缓冲区管理、错误日志记录、总线负载监控防止过载。

5. 什么是OTA?如何实现软件的在线升级?

答案:OTA(Over-The-Air)是通过无线网络对设备固件/软件进行远程升级的技术。系统架构:云端服务器(存储升级包、版本管理)+ 通信模块(4G/5G/WiFi) + 本地存储(双分区A/B设计) + Bootloader(引导管理)。Bootloader设计:分区管理(应用区、备份区、Boot区)、升级标志检查、固件完整性校验、回滚机制、安全启动验证。升级流程:版本检查→下载升级包→完整性校验(MD5/SHA256)→写入备份分区→切换启动分区→验证新版本→失败自动回滚。安全机制:数字签名验证防篡改、TLS/SSL加密传输、防回滚保护、断点续传、电源管理防止升级中断电。差分升级:只传输变化部分减少流量和时间,使用bsdiff/courgette算法生成差分包。

6. 请解释一下功能安全ISO 26262,ASIL等级是什么?

答案:ISO 26262是汽车功能安全国际标准,针对道路车辆电气/电子系统的功能安全要求。ASIL等级:QM(无安全要求)< ASIL A < ASIL B < ASIL C < ASIL D(最高),等级越高开发要求越严格。等级确定:基于S(严重度0-3)、E(暴露度0-4)、C(可控性0-3)三个参数的风险评估矩阵确定。开发要求:ASIL D需要最严格的开发流程、独立安全审核、完整文档追溯、高测试覆盖率(MC/DC)、冗余设计和故障检测。应用示例:转向/制动/安全气囊为ASIL D,动力系统ASIL C,车身控制ASIL B,娱乐系统QM。V模型开发:需求分析→系统设计→软硬件设计→实现→集成测试→系统测试→验证,每个阶段都有对应的安全活动。

7. 什么是BMS?BMS需要实现哪些功能?

答案:BMS(Battery Management System)是对动力电池进行监测、评估、保护和均衡管理的系统。电池状态监测:单体电压采集(精度±5mV)、总电压/电流采集(精度±0.5%)、多点温度采集、绝缘电阻检测。SOC估算:采用安时积分+卡尔曼滤波+OCV校准组合算法,精度要求±3%,实时评估剩余电量。SOH估算:通过容量衰减、内阻增长、循环次数统计评估电池健康状态和老化程度。热管理:温度监控、冷却/加热系统控制、温度均衡,保证电池工作在最佳温度范围。均衡管理:被动均衡(电阻放电)或主动均衡(能量转移),消除单体差异延长寿命。安全保护:过压/欠压、过流、过温/低温、短路、绝缘故障、碰撞断电等多重保护。通信功能:CAN通信与VCU/充电机交互、UDS诊断协议、数据记录和故障码存储。充电管理:充电需求计算、CC/CV策略控制、充电安全监控、充电时间预测。

8. 如何估算电池的SOC?

答案:开路电压法(OCV):利用静置后电压与SOC的对应关系,简单直观但需长时间静置,主要用于初始SOC标定。安时积分法:SOC = SOC0 + ∫(η·I·dt)/C,实时性好计算简单,但存在累积误差需定期OCV校准。卡尔曼滤波法:融合等效电路模型(RC模型)和测量数据,精度高能自适应,但计算复杂需要准确模型。扩展卡尔曼滤波(EKF):处理非线性系统,状态方程考虑温度、老化等因素,观测方程建立电压-SOC关系,精度可达±2%。神经网络法:以电压、电流、温度、历史数据为输入,通过训练得到SOC估算模型,适应性强但需大量数据。实际应用:采用安时积分+卡尔曼滤波+OCV校准的组合算法,加入温度补偿、老化补偿、SOC-OCV曲线自学习提高精度。

9. BLDC电机的控制原理是什么?

答案:BLDC(无刷直流电机)由永磁转子、三相定子绕组、位置传感器(霍尔/编码器)或无感控制组成。方波控制(六步换相):根据转子位置按AB-AC-BC-BA-CA-CB顺序给三相通电,每60°换相一次,两相导通一相悬空,简单成本低但转矩脉动大噪音大。FOC控制(磁场定向控制):Clarke变换(三相→两相α-β)→Park变换(静止→旋转坐标系d-q)→电流解耦(Id控制磁场Iq控制转矩)→PI调节→反Park变换→SVPWM生成三相PWM,转矩平稳效率高噪音小。无感FOC控制:通过反电动势法(中高速)、高频注入法(低速/静止)、滑模观测器或扩展卡尔曼滤波估算转子位置和速度,省去位置传感器降低成本。控制框图:速度给定→速度环PI→转矩给定→电流环PI→FOC算法→SVPWM→逆变器→电机,位置/速度反馈形成闭环。应用场景:电动汽车驱动、无人机、工业伺服、家电(空调、洗衣机)等需要高效率高性能的场合。

10. 如何进行嵌入式软件的单元测试?

答案:测试目的:验证代码功能正确性、提高代码质量、便于重构维护、符合功能安全要求(ASIL C/D需MC/DC覆盖)。白盒测试:语句覆盖、分支覆盖、条件覆盖、路径覆盖、MC/DC覆盖,关注代码内部逻辑结构。黑盒测试:等价类划分、边界值分析、错误推测法、因果图法,关注输入输出关系不考虑内部实现。测试框架:Unity(C语言轻量级)、Google Test(C++功能丰富)、CppUTest(嵌入式友好)、Ceedling(自动化工具链)。Mock和Stub:使用CMock等工具模拟硬件接口、隔离外部依赖、控制测试环境,实现纯软件测试。测试用例设计:正常输入、边界值、异常输入、错误处理、性能测试,确保全面覆盖各种场景。自动化测试:集成到CI持续集成、自动化测试脚本、回归测试、测试报告生成,提高测试效率。硬件在环测试(HIL):真实硬件环境、实时仿真、故障注入、长时间测试,验证软硬件集成。静态分析:PC-Lint、Coverity、MISRA C检查、代码复杂度分析,在编译前发现潜在问题。

11. 你对MISRA C编码规范有了解吗?

答案:MISRA C是汽车行业C语言编码规范,提高代码安全性和可靠性,功能安全项目必须遵守。版本演进:MISRA C:2004(142条规则)→MISRA C:2012(143条规则+16条指令)→MISRA C:2023(最新版)。类型安全:避免隐式类型转换、明确指定变量类型、使用stdint.h定义类型(uint8_t等)、避免char进行数值运算。指针使用:避免指针运算、不使用多级指针(超过2级)、检查空指针、避免指针与整数转换。控制流:避免使用goto、switch必须有default、if-else必须使用大括号、避免复杂条件表达式。函数规范:函数参数不超过6个、函数长度限制、避免递归、明确返回值类型。预处理器:避免使用宏函数、#include规范使用<>或""、避免#undef、条件编译规范。内存管理:避免动态内存分配、数组边界检查、初始化所有变量、避免内存泄漏。并发安全:共享资源保护、避免竞态条件、中断安全设计。检查工具:PC-Lint Plus、Polyspace、PRQA QA·C、Coverity、Klocwork,集成到CI自动检查。

12. 如果让你设计一个电动汽车的充电管理系统,你会如何设计?

参考答案:硬件架构:主控MCU(32位双核)、电压/电流/温度采集电路(隔离设计)、继电器控制(充电接触器)、CAN/以太网通信、充电接口(GB/T、CCS、CHAdeMO)、安全保护电路(过压过流绝缘检测)。充电协议层:支持GB/T 27930国标、ISO 15118国际标准、CHAdeMO、特斯拉超充协议、即插即充(PnC)功能。充电策略层:恒流充电(CC)、恒压充电(CV)、脉冲充电、涓流充电、温度补偿、SOC分段优化策略。安全保护层:电压监控(单体/总压)、电流限制、温度保护、绝缘检测、连接确认、紧急停止机制。通信层:与BMS通信获取电池状态、与充电桩通信握手协商、与VCU通信整车状态、云端通信数据上传。充电流程:物理连接检测→握手通信→参数协商(电压电流)→充电准备(预充绝缘检测)→充电执行(CC/CV控制)→充电结束→断开流程。安全设计:双重保护(硬件+软件)、故障降级策略、看门狗监控、冗余设计、失效安全(Fail-Safe)、电气隔离、防雷保护。测试验证:单元测试、集成测试、充电桩兼容性测试、极限工况测试、EMC测试、功能安全测试、长时间可靠性测试。优化方向:快充技术(800V平台)、智能充电(削峰填谷)、V2G车网互动、无线充电、电池预热预冷、充电时间预测、用户体验优化。

13. 你为什么想加入比亚迪?

参考答案:技术领先:比亚迪是新能源汽车行业领军企业,刀片电池、DM-i超级混动、e平台3.0等技术创新处于行业前沿,我希望在技术领先企业学习成长。产业链优势:比亚迪垂直整合能力强,从电池、电机、电控到整车都有完整产业链,作为嵌入式工程师可以接触完整系统开发流程,对职业发展非常有帮助。行业前景:新能源汽车是未来发展方向,符合国家双碳战略,我希望参与到这个有意义的事业中,为环保和可持续发展贡献力量。企业文化:比亚迪注重技术创新和人才培养,有完善的培训体系和晋升通道,我相信能充分发挥专业能力实现个人价值。技能匹配:我的专业背景和技能与岗位需求高度匹配,熟悉嵌入式开发、通信协议、电机控制等技术,有相关项目经验,相信能快速融入团队为公司创造价值。

全部评论

相关推荐

前言&nbsp;在之前推出的项目中,有很多粉丝私信我,到底什么是bootloader?什么是APP?是手机APP那种吗?有什么用?解决什么问题等等。因此,笔者再发一次详细版。1.为什么要用固件升级功能?我尽量一句话说清楚:目的就是为了产品发布以后想要对产品中的固件程序进行更新,那就需要重新烧录程序,但是产品一般都封装完好,不能拆开进行烧录调试,此时就需要IAP通过预留的通信接口(包括但不仅限于串口、IIC、SPI、CAN等通信方式),将所要更新的程序传入设备,以达到快速更新程序。比如汽车的OTA更新,如果不用OTA更新,只能去线下把汽车拆开再烧程序了,非常麻烦。其中,IAP全称是In&nbsp;Application&nbsp;Programing,即在程序中编程,意思就是说把需要更新的程序传入原来的程序中,原来的程序接收到了更新程序,就跳转到更新程序去执行。2&nbsp;.什么是bootloader和APP程序(高频考点)?Bootloader叫做引导加载程序。在嵌入式系统上电复位后首先运行引导加载程序,它的功能主要是负责系统的上电自检、必要的硬件初始化、建立储存空间映射,并加载和启动操作系统。Bootloader一般储存在bootROM中,当前使用最多的类型是NOR&nbsp;flash&nbsp;rom,在大多数的嵌入式系统中,flash里边不仅储存了bootloader,还储存了用户程序代码。Bootloader有两种工作模式,一种是启动加载模式,另一种是下载模式;而提到的固件升级就属于bootloader的下载模式。比如博主的整个烟机项目就是一个巨大的bootloader程序,因为它能接收固件并进行跳转执行。3.为什么不做一个只有更新功能的bootloader,非要在bootloader里边实现如此多的功能呢?因为在产品中固件更新功能只是为了以防万一,有需要更新的时候才进行更新,不需要更新的时候用原来的功能就够了。接下来说一下什么是APP程序。APP指的就是需要传输的更新固件,不是手机APP,通常以.bin文件形式发送。又有粉丝问,那为什么要用bin文件,而不用hex文件呢?因为hex文件是包含地址信息的ASCII文本文件,可直接用于烧录;bin文件是纯二进制数据文件,不含地址信息,烧录时需要指定起始地址。刚好APP区域的划分是由我们自行划分的,起始地址只能自己指定,APP程序自然是要烧录到APP区域执行,因此需要未指定起始地址的bin文件。4.&nbsp;固件升级的工作原理是什么?固件升级的工作原理实际上就是:先将整个Flash划分成boot区和APP区(前提为flash升级),boot区专门用于执行bootloader,APP区专门执行APP程序;然后将bootloader烧录到boot区,接下来通过上位机传入固件,此时bootloader接收固件并跳转到APP区域执行固件。上述这段话是一个总结,接下来从STM32的上电启动流程、bootloader到底干了什么以及APP程序如何跳转三个层面来进行具体分析。(1)STM32上电启动流程(以下是高频考点)当STM32发生复位时,此时硬件会强制PC寄存器指向一个固定地址0X00000000(或者是由boot引脚映射的0x08000000),该地址存放的是主堆栈指针(MSP)的初始值,内核会读取该值并进行堆栈初始化,以创建好C环境以及安全调用中断服务函数。其次,PC寄存器会执行到0x00000004地址,取出该地址存放的复位中断处理函数,并跳转过去执行;在复位函数中,首先完成系统时钟的初始化,其次调用__main函数,完成数据的初始化,如将Flash中的data段数据拷贝到RAM中,然后将未初始化的全局变量(bss段)清零。最后,__main函数调用main函数,进入到main函数执行。(2)bootloader程序在固件升级中到底干了什么?一句话说清楚这个问题。实际上,在固件升级功能中,bootloader就干了三件事情:1、接收上位机传输的固件保存到RAM中;2、将RAM上的固件拷贝到Flash;3、跳转到APP执行。(3)APP程序怎么跳转的?跳转APP程序操作实际上就一行代码--调用jump2app()。那为什么调用这个函数就行了呢?答案是jump2app是一个函数指针,直白点,它就是一个地址0x00000004+M(M是偏移量,或者说是boot区与APP区的分界线);这个地址看起来很熟悉对吧?因为才在上电启动流程里边见过,不同的是多了一个M,这代表的意思是在APP区里重新创建了一个新的中断向量表(依然0x00000000+M存放堆栈指针MSP、0x00000004+M存放复位向量)。理解了这行地址代表的含义之后,我们再来看jump2app()的含义。这实际上就是取地址操作(这里我不多解释了,如果你不明白,说明你C语言基础还要补),而这个地址里存放的是APP区的复位向量。因此,此处代表的意思就是取出复位向量并跳转执行,也就是执行到了APP区的复位中断服务函数中,然后再次执行系统时钟的初始化、调用__main函数初始化数据,最后调用APP的main函数执行。到此处,开始执行APP程序的main函数功能,跳转APP程序执行成功。
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3288次浏览 43人参与
# HR最不可信的一句话是__ #
1035次浏览 32人参与
# 巨人网络春招 #
11493次浏览 224人参与
# 春招至今,你的战绩如何? #
15022次浏览 140人参与
# AI面会问哪些问题? #
905次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2763次浏览 52人参与
# MiniMax求职进展汇总 #
24954次浏览 321人参与
# 沪漂/北漂你觉得哪个更苦? #
1322次浏览 40人参与
# 你做过最难的笔试是哪家公司 #
1152次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2715次浏览 50人参与
# XX请雇我工作 #
51149次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7971次浏览 43人参与
# 简历第一个项目做什么 #
32089次浏览 359人参与
# 简历中的项目经历要怎么写? #
310939次浏览 4260人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152851次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187561次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64564次浏览 866人参与
# 如果重来一次你还会读研吗 #
229978次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178279次浏览 891人参与
# 你怎么看待AI面试 #
180682次浏览 1298人参与
# 正在春招的你,也参与了去年秋招吗? #
364223次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160826次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务