0. 前言
如果你是初入汽车电子行业从事软件开发的同学,面对Autosar这个庞大繁杂的架构,是否会两眼迷茫,无从下手?如果你已经从业了一到两年,有了一定的实战经验,是否也会感觉到对模块还是一知半解,不知如何精进?这篇文章将从汽车电子行业从过来人的角度对于Autosar的学习方法提一下自己的一些经历及拙见,请静下心花三分钟时间,相信肯定对大家有帮助。
在最开始进入Autosar也是两眼一抹黑,做过的模块能实现基本功能,但一旦出现问题就无从下手,或者说一旦遇到别人挑战你为什么要这样而不是那样就解释不清,也就是知其然不知其所以然,这个可能也跟我这个人比较懒有关系,开发之初只想着实现功能并没有想去深入了解。经历了痛苦与挣扎后,我总结了模块的开发的五个阶段以及模块学习的2W1H工作法,以下进入正文。
1. 成长的五个阶段
以单个模块的精进进行讲解,过程包括:了解功能、实现功能、问题解决、代码精进与架构优化。当你对大多数甚至全部模块了解后就达到了总体目标,当然这个需要很长时间去沉淀,需要坚持不懈的学习。
1.1 了解功能
在开发之初,可以通过Autosar文档,CSDN等资源对模块有基本了解,知道其是做什么的,这个阶段需要达到的目标:
1)了解其在Autosar架构中属于哪个层级,与上下层的关系是怎样的;
2)了解其基本功能,其实现功能的主要函数是哪些?对应的形参分别代表什么含义?
比如看门狗模块(Wdg)我们就要知道其对应的层级为MCAL层,在代码中通过WdgIf层级的WdgIf_SetTriggerCondition()去调用,实现喂狗防止代码跑飞或监控功能安全相关代码的功能。
这个阶段适用于开发人员对自己感兴趣但没有开发任务的模块,就当是给自己加餐了。
1.2 实现功能
在第二个阶段就是要实现功能,在这个阶段需要达到的目标:
1)对于配置模块能对模块完成基本配置;
2)对于CDD模块,能完成手工代码开发;
3)完成代码开发后,能达到预期功能。
仍以看门狗模块为例,这个阶段我们就要实现在EB或其他配置工具中对Wdg模块的配置,生成代码后调试发现喂狗函数能正常被调用,达到了预期目标。
此阶段适用于刚接手某个模块,需要负责开发,但达到这个阶段是不够的,一旦出现问题还需要具备后面我们要讲的问题解决能力。
1.3 问题解决
在第三个阶段是项目开发过程中难免会出现问题,比如发生Reset或进Det等异常情况,这个时候就需要具备问题解决的能力,因此这个阶段需要达到的目标:
1)能对问题进行定位。通过读寄存器或者打断点能调试手段能定位到问题发生的原因;
2)能对问题进行分析解决。
以看门狗为例,当看门狗发生超时复位时,首先就应该想到喂狗函数是不是没有被调用?进行排查后再进一步排查是上层没调用喂狗还是调用了但喂狗函数去写寄存器时出错导致的喂狗失效问题。
一般开发人员能达到第三层具备问题解决能力的比较多,但是达到这个阶段仍然是不够的,要想进一步进化还必须对代码进行详细分析,包括供应商提供的静态代码,分析过后对其架构说不定也会有自己的一些见解。
1.4 代码精进
不管是静态代码还是借用其他平台的代码,每个函数,每条语句需要实现的功能都要搞清楚。当然,这是比较难的,尤其对于Vector等工具供应商或英飞凌等芯片供应商提供的静态代码,层层嵌套,很弯弯绕,但这就人与人拉开差距的地方。这个阶段我们需要达到的目标:
1)对模块的代码进行详细分析,彻底弄清其实现逻辑;
2)借助代码的详细分析,对可能出现的问题及有价值的代码进行记录,方便后续排查问题。
此阶段可借助调试器,对含糊不清的调用关系进行调试,方便快速理清。
1.5 架构优化
从模块再回到正题,当你对大多数模块甚至对整个系统都比较了解之后,自然而然就会看到当前架构不足的地方,面对不同的问题也能提出自己独到见解,本人离这个目标也还有一段路要走,但我想这个境界应该就是王国维先生口中的“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”的心境,也是每个软件开发工程师需要去实现的目标。
2. 2W1H工作法
2W1H工作法其实并不是遇到一个新的东西,在我们成长的道路上需要多去问的三个问题:
Who+What+How
也即是什么?有什么功能?怎么实现这个功能?
回到主题,啰啰嗦嗦说了这么多,最后还想说一句:方法论需要在实践去落实,通过实战去实现质的变化,希望我们每个人都能成为别人眼里的大神。