ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AUTOSAR从入门到实战:车载底层嵌入式学习路线与核心模块解析

AUTOSAR从入门到实战:车载底层嵌入式学习路线与核心模块解析 1. 先从全局读懂AUTOSAR别急着写代码我一直觉得很多新手学车载底层嵌入式软件开发最大的问题不是不努力而是方向一开始就跑偏了。百度一搜“AUTOSAR”出来的全是标准文档、分层架构图、几千页的PDF看两天就劝退了。但其实吧AUTOSAR这套东西本质上就是一个汽车电子软件的分层标准和接口规范它解决的核心问题是ECU电子控制单元里的软件越来越复杂OEM和Tier1之间要协作大家必须用同一种语言说话用同一种架构搭软件。换句话说你把AUTOSAR理解成一套“装修标准”就能通了硬件是毛坯房MCU是水电线路AUTOSAR就是规定了每个房间的门尺寸、开关高度、插座类型、线缆颜色的一套国家施工规范。你作为底层嵌入式工程师负责的不是设计整车而是按这套规范给一个ECU把地基打好——这个地基就是BSWBasic Software基础软件层。那这玩意儿为什么值钱因为现在哪怕一个车窗升降控制器里面跑的都可能是一个带CAN通信、诊断功能、网络管理、Bootloader的完整AUTOSAR协议栈。加上智能座舱、智驾域控这些动辄十几块甚至几十块MCU的域架构懂AUTOSAR底层的人可以说是缺得很。你打开招聘软件搜“AUTOSAR工程师”“嵌入式底层开发车载”薪资基本都很有竞争力。所以这篇文章我只说一件事一个零基础的新手怎么系统、高效、少踩坑地把车载底层嵌入式特别是AUTOSAR方向这门技能学到能干活、能面试、能上项目的程度。全文不整虚的全部是我带新人和自己转行时实际验证过的路子。2. 学习路线规划先建认知框架再补技术细节2.1 AUTOSAR四层架构到底在说什么我见过太多人一上来就啃规范什么SWS_CAN_00001SWS_Com_00010读得头大如斗。对新手来说第一步根本不需要精读规范原文而是先在脑子里搭一张图。AUTOSAR的软件架构是分层的从上往下分别是应用层Application Layer写业务逻辑的地方比如车窗防夹算法、雨量感应策略。内部全是SWC软件组件通过RTE互相通信。RTE层Runtime Environment运行时环境相当于一个“软件总线”应用层的组件通过它发送和接收数据不需要关心底层是CAN还是LIN还是以太网。BSW层Basic Software基础软件层这一层才是咱们底层工程师的主战场又分为服务层Services、ECU抽象层ECU Abstraction、MCU抽象层MCU Abstraction和复杂驱动Complex Drivers。MCU微控制器芯片本身比如英飞凌TC275、瑞萨RH850、NXP S32K1系列。BSW里具体有哪些模块每个模块干什么我把核心的列成一张表模块全称作用说人话MCALMicrocontroller Abstraction Layer包住芯片寄存器的“驱动库”比如GPIO、ADC、PWM、SPI、CAN收发芯片厂的活EcuCECU Configuration存放ECU的“身份证信息”比如引脚分配、CAN通道数量、波特率几乎所有模块都要读它的配置CanIfCAN Interface上层的统一CAN接口不管下面挂的是哪个MCAL驱动CanIf一律用统一API访问CanTpCAN Transport Protocol负责把大数据拆成多帧CAN报文传输诊断刷写就靠它PduRPDU Router路由中枢把诊断报文、网络管理报文、应用报文分发给对应模块ComCommunication把信号从报文中解包/打包应用层看到的是信号值它管底层字节Nm如CanNmNetwork Management网络管理协调ECU何时睡眠、何时唤醒省电的关键BswMBSW Mode Manager模式管家根据NM、ECU状态等条件仲裁让哪个模块进入什么模式比如下电流程DemDiagnostic Event Manager诊断事件管理也就是故障码DTC的记录和管理DcmDiagnostic Communication Manager诊断通信管理处理UDS协议比如0x10、0x22、0x2E服务OsOperting System符合AUTOSAR OS规范的操作系统任务调度、中断处理这张表我建议新手直接保存学的时候就对照这张表今天我搞懂了CanIf明天搞懂了CanTp后天搞懂了Nm。每攻克一个模块就在表上打个勾。比漫无目的地看规范不知道效率高多少倍。2.2 从“CAN通信”切入手性价比最高很多新手纠结第一个项目学什么方向。我的建议非常明确**第一站直接切CAN通信链路把线通起来把数据发起来把报文收下来。**原因有三第一CAN总线是车载网络的基本盘。不管以后你是做诊断刷写、网络管理、SOME/IP以太网还是域控底层都逃不开CAN/CAN FD这套物理基础。把CAN吃透了后续所有协议栈模块都有抓手。第二CAN通信链路是AUTOSAR中最直观、最容易验证的模块。配置几组报文用CANoe或者PCAN收一下立刻能看到结果这种“看得见的反馈”对建立信心很重要。第三CAN协议栈涉及的模块恰好覆盖了AUTOSAR的精华EcuC通道参数、CanMCAL驱动、CanIf接口层、PduR路由、Com信号打包解包。一条链路下来你对BSW分层的理解直接上一个台阶。具体怎么实践买个开发板后面会讲怎么选用Vector的DaVinci Configurator或者ETAS的EB tresos做配置生成代码然后烧录到板子上配合CANoe或PCAN收发数据。我第一次把“0x123”这个报文通过自研的AUTOSAR栈发出去再用PCAN收回来看到那组数据的时候才真正理解了什么叫“配置驱动开发”——和以前纯手写寄存器完全不是一回事。2.3 别忘了三个关键基础C语言、MCU、工具链说实话AUTOSAR本身的门槛不高真正卡住大家的往往是一个小学数学题你的C语言功底扎不扎实对MCU的认知到不到位工具链熟不熟练。**C语言这个没什么好说的必须过硬。**这里不是指会写几个循环结构而是要理解指针与内存、结构体与联合体、函数指针、链表这些在嵌入式里的实际应用。AUTOSAR生成的代码满眼都是结构体、指针、函数指针表比如postBuild配置、宏定义。如果你看到如“CanIf_Private.h”里的一堆数组和指针还发怵说明C语言还没过关先回去补《C Primer Plus》或者《嵌入式C语言的自我修养》别急着碰AUTOSAR。MCU基础方面你不需要把一款芯片的全部外设背下来但必须搞懂几个核心概念时钟树时钟怎么来的、怎么分频的、中断系统NVIC、中断优先级、中断嵌套、GPIO复用、定时器/PWM、CAN控制器、Flash与RAM的地址空间。推荐从英飞凌TC2xx系列开始入门因为它是目前量产车里用得最多的车规MCU之一学习资料相对丰富。再不济先用STM32F103练练手也完全可行——关键是掌握MCU的通用逻辑别被具体型号框住。工具链这一块Vector全家桶是行业事实标准。DaVinci Developer用来做软件组件设计和RTE配置DaVinci Configurator Pro用来配置BSW模块CANoe用来做总线仿真和测试还有CANape做标定和测量。整套工具的价值你得明白在量产级开发中你写的主要不是业务代码而是“配置”。把工具用熟了你的生产力直接翻倍。ETAS的EB tresos或者EB tresos Studio也值得了解很多国内Tier1用这套。新手阶段能熟练用其中一套就够了另一个做到“听得懂、能上手”即可。**我的建议是先把工具安装好哪怕用试用版/学习版也要逼迫自己完成一次“从配置到生成代码再到下载验证”的完整流程。**这套闭环一旦跑通AUTOSAR就不再是黑盒了。3. 按模块逐个击破BSW核心模块的底层逻辑3.1 CanIf、CanTp、PduR报文的“物流系统”先来打个比方。如果把ECU里的报文比作快递包裹那PduR就是快递分拣中心CanIf是小区门口的快递驿站CanTp则是专门管大件快递的“拆了送、送了拼”的物流专线。PduRPDU Router是AUTOSAR通信栈的枢纽模块。所有PDUProtocol Data Unit协议数据单元你可以理解为一篮子数据从上层下来要发到哪里从底层上来要交给谁它都一清二楚。新手必须理解PduR的路由表RoutingTable是怎么配置的什么报文走CanIf直接转发什么报文走CanTp做多帧传输。CanIfCAN Interface是统一收发入口。不管底层MCAL驱动是NXP的还是英飞凌的还是瑞萨的上层模块调用的接口都是CanIf_Transmit()、CanIf_RxIndication()这一套。这里建议新手重点理解几个概念HOHHardware Object Handle硬件对象句柄L-PDU链路层PDU以及发送确认TxConfirmation和接收指示RxIndication的上报机制。CanTpCAN Transport Protocol是AUTOSAR通信栈里非常经典的一个模块。它做的事情一句话总结把大于8字节CAN FD是64字节的数据拆分成多帧发送收端再按顺序重新拼起来。这就像寄一台冰箱要先拆成几个大件分别运送到了目的地再组装。它包含单帧SF、首帧FF、连续帧CF、流控帧FC这四种帧类型以及各种超时机制。UDS诊断刷写、Bootloader下载全靠CanTp在底下扛着。实操心得学习这三个模块时别只纸上谈兵。推荐用Vector官方的AUTOSAR示例或者一些开源方案比如基于Arduino Due的AUTOSAR学习项目烧录到板子上然后打开CANoe的Trace窗口看真实的物理报文里怎么出现0x00、0x10、0x21这些类型字节。亲眼看到那种变化比背10遍规范都有用。3.2 诊断通信理解UDS和Dcm工作流程诊断是车载底层里绕不开的大头也是面试必问的内容。整车生命周期里产线下线检测、4S店售后排查、软件远程升级OTA全都要靠诊断协议在底下支撑。AUTOSAR里负责诊断的模块主要有两个DcmDiagnostic Communication Manager和DemDiagnostic Event Manager。两者分工明确Dcm负责“会话管理”收到诊断请求比如UDS 0x10服务请求切换会话解析服务ID、子功能、参数分发给对应的应用层或底层处理再把响应发出去。Dem负责“事件记录”收到故障信号后通过配置好的故障码DTC比如P0101是空气流量计故障执行存储、老化、快照记录等操作。这俩模块都依赖底层的传输层CanTp和路由层PduR所以你在3.1提到的那条链路基础在这里就接上了。新手学习诊断模块我给的路径是先学UDS统一诊断服务ISO 14229本身再学它如何映射到AUTOSAR模块。UDS的精髓在于理解会话Session、安全访问Security Access、服务IDSID这几个概念。等你熟练地用CANoe发送了一串“10 01”进入默认会话编程会话之后再看Dcm配置一切就顺理成章了。另外诊断这块还有几个高频面试点务必掌握否定响应NRC的返回逻辑比如服务不支持返回0x11、子功能不支持返回0x12、条件不满足返回0x24DTC状态掩码Bit7从testFailed到Bit0 testNotCompleted是怎么置位的以及故障的“确认”和“老化”机制。面试时能把这些讲清楚面试官基本认可你有诊断底子。3.3 网络管理状态机和BswM下电配置这一节我要重点拎出来讲因为“AUTOSAR BswM下电是怎么配置的”这一热搜词说明大家卡在这块的最多。先说网络管理的意义。整车电源是有限的尤其对12V小电瓶的燃油车和48V的混动车来说每个ECU一直满功耗运行根本不现实。于是AUTOSAR定义了网络管理机制让ECU在总线上通过周期性的“心跳”报文比如CanNm发送的NM报文来告诉自己“我还需要工作”所有ECU都安安静静了就统一进入睡眠省电。CanNm就是干这个的。而BswMBSW Mode Manager是一个“仲裁者”或“管家”。它接收到来自CanNm的状态信息比如RepeatMessage、NormalOperation、ReadySleep、BusSleepMode这些状态再结合ECU本身的条件比如有没有本地唤醒事件、有没有诊断请求通过内部的“模式仲裁”和“模式切换”机制决定下一步该让谁进入什么模式。下电Power Down / Shutdown是BswM里比较复杂的场景。常见的过程大概是钥匙OFF或整车状态进入OFF应用层请求进入低功耗模式CanNm进入ReadySleep状态等待网络静默BswM检测到NM进入ReadySleep且没有其他“阻止睡眠”的条件BswM发送指令给EcuMECU状态管理或其他服务模块执行关闭通信、停止某些任务、关外设、进入睡眠模式。实操配置要点在DaVinci Configurator Pro里BswM有三种类型的逻辑规则——Mode Request Port接收来自NM等模块的请求、Mode Condition条件判断、Mode Arbitration仲裁优先级。新手配置BswM最常犯的错就是“条件没加对ECU永远不睡”例如漏掉了一个“应用层没有请求持续通信”的条件导致总线一直醒着。一条独家经验BswM的配置本质是个“事件驱动的状态机编程”你脑子里的逻辑要非常清晰。我习惯在配置之前先画一张逻辑图启动条件是什么、退出条件是什么、超时时间多少、出错走哪条分支。画清楚了再进工具里配比打开配置界面边想边配成功率高得多。3.4 AUTOSAR OS与任务调度原理最后一个硬核模块是OS。AUTOSAR OS是一个静态配置的、优先级抢占式的实时操作系统它和桌面Linux、Windows最大的区别是**任务数量固定、优先级固定、调度时序在编译前就已确定。**任务没有动态创建、销毁这一说一切都是“静态配置”。AUTOSAR OS核心概念包括Task分为基础任务Basic Task和扩展任务Extended Task。基础任务不能阻塞等待只能跑完或被打断扩展任务可以调用WaitEvent等待事件。看一个Task是否用对了关键在于它内部有没有等待需求。ISR中断服务例程。AUTOSAR OS中中断分为两类CAT1不经过OS处理和CAT2由OS接管可以有优先级理解这个区别对护士长级别的实时系统特别重要。Alarm闹钟/Counter计数器用来实现周期性任务或延迟调度的机制。底层依赖硬件定时器比如系统定时器tick。Schedule Table调度表一组按时间轴排好的任务列表常用于需要严格周期执行的场景比如发动机控制里的10ms任务、100ms任务。为什么AUTOSAR OS是“配置出来的”因为在配置工具里比如DaVinci Configurator Pro里的Os模块你要定义任务的名字、优先级、调度策略抢占/协作、栈大小、启动方式甚至每个任务被哪个触发源触发。配置完成后工具会生成schedule.c、Os_Cfg.c这些代码你在OSEK OIL文件里描述一切然后工具生成可编译的C代码。这和手动裸机开发时直接写中断和任务函数是完全不同的思路。分享一个新手容易踩的坑**任务栈大小的分配。**BswM、Dcm、CanTp这些栈用多少不是拍脑袋拍出来的要靠工具和静态分析或实测。栈设小了会溢出系统随机死机排查起来极费劲栈设大了浪费宝贵的RAM。我一般会先用编译器生成的内存映射map文件和厂商推荐值做基准再结合看门狗和运行时错误检测做逐步修正。4. 动手实操一份可行的新手从零到一上手路径4.1 硬件和工具怎么选择想学好AUTOSAR光看规范不碰硬件等于耍流氓。但新手买什么开发板很多人纠结。我按不同预算和路线给个推荐类型推荐型号适合人群优点缺点入门综合板STM32F103/407 一块CAN收发器板TJA1050/TJA1043预算有限、只想过一遍CanIf/CanTp流程的便宜、资料多、上手快不是车规MCU很多车规特性没有车规主流板英飞凌TC275/TC397套件准备面试量产岗位、想接触主流量产MCU的引擎厂和Tier1常用面试含金量高贵资料相对少性价比方案野火/NXP的S32K1系列 车载以太网扩展想同时接触CAN和以太网方向S32K1资料好、工具链也成熟以太网部分需要额外板子工具链方面最理想的组合是DaVinci Configurator Pro DaVinci Developer CANoe 一块英飞凌或NXP的开发板。这里面CANoe比较贵但你可以先用PCAN、周立功CAN卡等平替关键是理解总线逻辑不必一步到位上最昂贵的商业套装。EB tresos也是可以选的路线配合TC275的学习套件很多人就是这么上手量产的。4.2 手把手过一遍“最小CAN通信系统”我给新人的第一个完整闭环练习就是在目标板子上配出一个“最小可通信系统”。过程大致如下第一步搭建环境。装好DaVinci Configurator Pro或EB tresos、代码编译器比如GHS、Tasking或IAR、下载调试工具比如PLS UDE、Lauterbach Trace32把开发板的例程工程跑起来。第一次点亮LED说明工具链通了。第二步配置MCAL和EcuC。在工具里新建一个工程选择MCU型号配置好时钟、引脚复用、CAN控制器通道的波特率比如500kbps和收发器唤醒逻辑。生成代码后下载到板子用一个CAN工具发一个测试报文看MCU能否中断接收。这一步的目标是物理层通了。第三步启用CanIf和PduR。在配置工具里增加CanIf模块把CanMCU产生的通道和CanIf的HOH硬件对象句柄关联起来再配置一个PDU路由规则。通过代码里的CanIf_Transmit()函数主动向总线上发一组固定的报文。用上位机软件看到这帧报文恭喜你已经理解AUTOSAR通信栈的核心套路了。第四步引入Com。配置信号长度、字节序、初始值在代码里通过Com_SendSignal()更新某个信号值然后观察CAN报文里对应的比特位是否随之变化。亲手看到“信号—报文—总线字节”的映射比任何理论讲解都深刻。第五步接入CanTp和诊断。配置一个基于CAN的诊断通道使用UDS的0x22读数据或0x2E写数据服务通过Dcm和CanTp在Canoe里发诊断请求看看响应是否正常。这一段跑通你已经具备了“诊断链路基本开发”的能力很多Tier1的初级岗位要的也就是这个。4.3 如何用Vector工具链做网络管理和BswM实验四步基础通信跑通之后下一个进阶实验就是网络管理和下电这个求职时非常值钱。实验目标配置CanNm和BswM让ECU能发送NM报文、能进入ReadySleep状态、能通过BswM完成睡眠前的通信关闭流程。过程概要在配置工具里开启CanNm设置节点标识符、NM报文ID、重复消息时间Repeat Message Time、等待总线睡眠时间Wait Bus Sleep Time等参数。开启BswM创建两条Mode Arbitration规则一条根据CanNm状态先进入ReadySleep之后BusSleep触发ECU的通信关闭另一条根据应用层写的一个“允许睡眠”标志位做条件判断。把BswM的输出链接到EcuM的Sleep模式或者PduR关闭通信的接口上。在CANoe里模拟总线网络并观察ECU的NM报文周期、睡眠流程对比“阻止睡眠”条件比如诊断请求存在时BswM是否正确地拒绝了睡眠请求。说实话这一步比较复杂会用到模式请求端口Mode Request Port的数值映射、条件表达式AND/OR/NOT的设置、仲裁优先级的排序等。新手大概率会在条件判断上栽跟头——我这边的经验是先把所有输入条件列成一张真值表再照着表配置能减少一半的返工。5. 面试准备与职业路线量化你的技能包5.1 高频面试题盘点学了半天最终要落到求职上。我整理了一下面试中真正高频的AUTOSAR车载底层题目供大家自查请画一下AUTOSAR分层架构图说明每层的作用和接口关系。CanTp的四种帧类型各自的作用是什么发送侧和接收侧的超时时间各有哪些PduR在通信栈里扮演什么角色一个IPDU可以路由到不同的下层吗UDS的0x10服务中Default/Programming/Extended三种会话有什么区别0x27安全访问Security Access的种子和密钥是怎么交互的NRC 0x78Response Pending响应待定出现的典型场景是什么怎么处理重发刷写这种耗时操作时0x78的作用很关键。CanNm中Repeat Message State、Normal Operation State、Prepare Bus-Sleep Mode、Bus Sleep Mode的迁移条件是什么BswM的Mode Arbitration和Mode Condition有什么区别配置一个低功耗下电流程需要关注哪些参数AUTOSAR OS中Basic Task能用WaitEvent吗扩展任务和基础任务的根本区别是什么介绍一下你做一个诊断Bootloader的经验实现/测试刷写时怎么保护Flash、怎么校验A/B分区。Dem里DTC的“老化Aging”和“确认Confirmation”是什么意思这两个概念无数人栽过。这些问题如果你能不看笔记答上来八成说明知识框架已经立住了。5.2 从“会配置”到“能解决问题”的三级跳很多新手学完一轮配置觉得“AUTOSAR就是点点鼠标生成代码”要真这么简单公司也不用高薪招人了。想从“会用工具”到“能解决问题”有三层关键的进阶第一层能读懂生成的代码。配置工具生成成千上万行代码你不是CTRLF搜索一个函数名就能完事而是能顺着调用链理解一条消息从进MCU中断到应用层的大致路径。比如当CanIf_RxIndication()被调用后后面的函数是哪几层、做了什么事、返回了什么错误码这些都要能沿着代码说清楚。第二层能通过Trace和测试工具定位问题。一个通信故障到底是MCAL没配好PduR没路由CanTp超时还是应用层没收信号你需要用CANoe的Trace窗口、代码的运行时断言如函数返回值检查、以及调试器的断点一步步缩小问题范围。这个能力要靠项目经验积累没有捷径。第三层能修改配置和手写补丁。某些复杂场景比如部分网络唤醒、特殊诊断时序配置工具生成的标准代码不一定满足需求你需要手工在相应模块的Custom Hook函数许多模块都有预留的定制点里加代码或者结合MCAL提供的回调做扩展。这要求你对数据结构和协议本身有很深的掌握。说句掏心窝的话第一层和第二层决定了你能不能胜任入门级车载底层岗位第三层决定你中期能不能往高级工程师或架构师走。6. 常见问题与排查技巧实录我自己学习和带人过程中遇到过不少带共性的问题列出来大家少走弯路。6.1 配置生成了但代码编译不过这个太常见了新手几乎必踩。原因五花八门但我总结下来80%出在以下三点工具版本和编译器版本不匹配。AURIX工程用TASKING或GHS你对编译器版本选错或者参数设置错误就会报一些莫名其妙的语法错误。解决办法是严格按开发板例程的工程设置来。MCAL配置和芯片型号不匹配。比如选错了对应的MCAL驱动库TC275和TC277的库是有区别的或者外设时钟配置不对导致宏定义找不到。这种情况下仔细核对你的MCAL包版本和芯片型号。缺少定义或重复定义。常见于新增模块时没有正确包含对应的配置头文件或者某个宏被重复定义。这种就先看编译错误第一个报错优先解决。经验遇到编译不过先把“工具链版本、编译参数、头文件搜索路径”这三样挨个核对一遍能解决大部分问题。6.2 报文发不出去/收不到CAN通信链路不通真按下面这张排查表来应对现象排查方向具体排查动作完全无波形物理层/配置层用示波器或CAN卡看总线波形确认CAN_H/CAN_L有无信号、终端电阻120Ω是否正常检查MCAL的CAN通道波特率配置和收发器的STB待机引脚是否拉低波形正常但收不到报文配置/中断/过滤检查报文ID是否被硬件过滤器遮蔽检查接收中断是否开启用工具生成CanIf的HOH时是否配置了正确的接收对象发送返回错误码PDU配置/句柄查看返回值如CanIf_Transmit返回CANIF_BUSY检查是否在持续发送时没等发送完成就再次触发检查PDU的Txcredit发送信用数量多帧报文CanTp只收到首帧流控帧/超时查CanTp的流控帧参数BlockSize、STmin是否和对方匹配查超时时间是否太长或太短重点提示遇到收不到报文别第一反应查代码先看总线上有没有波形、有没有ACK应答。物理层不通协议栈再正确也白搭。我在CANoe里不知道看到过多少次“CAN Frame lost”最后发现是终端电阻没接好。6.3 BswM睡眠流程异常ECU无法休眠这个其实前面提过这里再给一份速查思路第一步查NM状态是否已到BusSleepMode。如果NM一直在Normal Operation说明网络上还有节点在发NM报文。用CANoe的IG模块停掉所有节点发送再观察。第二步查BswM的条件。打开配置工具的BswM规则看Mode Condition引用的所有状态位是否都满足。尤其注意“应用层请求保持唤醒”这个条件很多ECU在应用层有个标志位一直置1导致永远不能睡眠。第三步查EcuM的睡眠流程。检查EcuM状态机是否被正确调用比如EcuM_GoDownNvm()、EcuM_GoHalt()这些接口是否走到。第四步查睡眠后的电流。如果ECU睡了但休眠电流还很大大概率是某个外设比如CAN收发器、SBC芯片、传感器供电没有真正断电或被配置为仍使能这是硬件侧也要一起排查的。6.4 学完就忘怎么对抗遗忘最后说一个不那么技术、但特别影响学习效果的问题。AUTOSAR知识面太宽条款太多学了后面忘前面太正常了。我自己用下来有效的方法有三个第一建立自己的知识体系文档。每学完一个模块用一张笔记可以是表格、思维导图、或者一篇博客把“它解决了什么问题、关键配置项有哪些、常见坑有哪些”记下来。用自己的话写一遍记忆深度远超看文档十遍。第二刻意输出。找机会给同事、群友或者面试官讲一遍。讲不出来的地方就是还没懂的地方。我很多在面试中回答得特别顺的知识点都是之前硬着头皮给新人培训时逼出来的。第三适时回到规范。规范不是拿来通读的是当字典查的。当你对某个模块有了实践认知后再回去翻对应的SWS章节往往发现原来是这个意思。那时候的理解深度完全不一样。7. 写在最后一点个人的体会做了这些年嵌入式看着一批又一批新人从“连CAN报文长什么样都不知道”到能独立负责一个ECU的诊断栈说实话很有成就感。如果你问我新手最该具备什么素质我的答案不是聪明而是“肯耐着性子把一条链路完整打通”的坚持。AUTOSAR这套东西确实庞杂但它的每一块都有迹可循。把“CAN通信、诊断、网络管理、BSW模块、OS”这几个核心吃透了你在车载底层这条路上就站稳了。后面不管是转以太网SOME/IP、做域控制器还是做SOA软件架构一路都有老本可吃。如果你正卡在某个模块学不明白别硬憋着。找一块板子找一个工具哪怕是最简单的PCAN和一包杜邦线亲手把报文发出去把状态机跑起来再把上文提到的那张排查表贴在屏幕旁边。看十遍不如错一次错一次不如把它修好一次。动手是穿越AUTOSAR这个庞然大物最好的通行证。
返回列表