嵌入式软件工程师需要哪些知识

时间:2021-03-31 19:55:23

 最近想不到好的专题,所以与大家一起聊聊,在我眼中,一名优秀的嵌入式软件工程师需要具备哪些能力。

 

嵌入式软件工程师需要哪些知识

 

嵌入式软件工程师需要哪些知识

基本职业技能

编码能力:至少精通C/C++语言进行coding。就嵌入式行业而言,这两种语言用得最多。如果掌握了它们,即便切换到其他语言,难度也不会太大。此外,还包括良好的编码习惯和风格,具体内容可以参看最初几期关于编码规范的一些讨论。关于这个能力,想说明的一点是,良好的编码能力并不等同于指针,数据结构用得多溜,各类运算符优先级记得多牢,代码写得多精简。可维护性,可移植性,可阅读性,可靠健壮性才是更加需要关注的点。

分析问题解决问题能力:这个能力包含几个层面。第一个层面是调试工具的使用熟练度,主要为进行代码调试的时候,结合MCU的特性,如何熟练应用工具进行分析,例如watch/live watch, memory watch,break point设定技巧,插件的使用,查看寄存器找寻HardFault原因。第二层面是问题分析与解决方式方法。之前说过我创建了个QQ群,经常有群友会问各式各样的问题,其中的很多提问者根本就没自己分析过原因,或者根本就不知道怎么去分析。在还没有形成条件反射般的分析能力前,在解决复杂问题时,推荐使用鱼骨图进行分析:先假设可能的原因,理清他们间的前后、因果关系,然后拆分为不同节点去各个击破排除。

 

硬件基础能力:嵌入式软件开发的特殊性要求即便是软件人员也需要具备基本的硬件能力,包括模电,数电,传感器等。

英语:不要以英语不好排斥阅读英文资料,除非猴年马月的时候,中国技术发达到所有芯片都是自己制造,所有技术标准都是自己制定。另外,良好的英语口语和书面能力,能大大拓宽你的就业面。

 

熟悉软件开发流程

大学里面以及培训速成机构很少讲解这方面的理念,所以导致大部分人员习惯性的一上来就开始编码。下图是软件开发编码阶段开始bug引入率,发现率以及修复成本的图例。由此可见,如果缺乏流程上把关,直接进行编码,后期的代价是非常高的。

 

软件最经典的开发流程为V-Model,其他流程体系基本上都大同小异,脱离不了这个模子。这块的能力要求为,要清楚不同阶段要做什么,交付物是什么,做哪些评审和测试保证软件质量。软件流程带来的两个主要好处在于:1. 通过不同阶段的设计开发评审验证测试,保证代码的质量; 2. 建立起闭环的路径,追踪需求在设计开发测试阶段的覆盖率,保存不会有遗漏。

 

 

学习能力

这个能力不仅仅是这一行所要求的,所有行业都要求。并且,对于嵌入式这一行而言,这个能力应该放在第一位。下个月你可能就需要开发不同方向的产品,明年你可能就需要用新的MCU,过几年可能C语言就淘汰。。。如果学习能力弱,节奏跟不上技术的变迁,不久的将来就会被行业淘汰。类似的,学习能力也包含两个方面。第一为学习方法和效率,这个小编学习能力也一般,给不出多好的建议。第二为学习的态度,这个体会就比较深了。作为一名软件小团队的team leader,常常需要分配任务给团队成员。因为产品是全新的方向,所以很多东西需要现学现用。有些成员能很快进入状态,短期内掌握新的知识并应用于新产品开发,有些成员学习进度缓慢,无从下手,需要人为干预才能往前。第二类人员的之所以进展缓慢的通病为,带着畏难不前的心态去学习,总是会以新员工的姿态放宽对自己的要求,认为进度慢是理所当然。带着这样的心态,在我看来是一种自甘堕落的表现,对个人的成长极端不利。

 

行业相关能力

做通讯设备,那就得精通相关的通讯接口和协议,做电源产品,那就得掌握电力电子基本的拓扑和控制方法,做电池管理系统,就得知晓电池特性。

 

还有一些其他的能力,比如说领导力,团队协作能力,沟通技巧这些都是其次的,主要还是自身的技术要硬,想要有过硬的技术不妨咨询一下创客学院,有好的技术老师带,做事情会事半功倍。