我是一个曾经从业20年的嵌入式老码农,如果谈别的我可能要谦虚谨慎一点。但谈及嵌入式行业的话题,我就不必客气了。
下面的行文虽短,是我一个字一个字的码出来的,也是我基于多年经验的认知总结。虽不能全面无遗漏,但请相信,我的描述也是八九不离十的。
PC上的软件开发体系,生态早已经成熟。你用VC、VB等语言工具,你开发调试网页,你操作shell命令行,等等。可利用的工具非常多,很成熟,操作或编程结果可以立刻呈现,有问题可以网上找到海量的相关帮助和解答。
嵌入式就没这么便利。尤其是在过去,一个初入职场的嵌入式软件工程师,本来没啥工作经验,有时要单打独斗,直接面对裸机,困难可想而知。
嵌入式开发,生态相比PC纯软开发困难的多。给你一块板子和原理图,给出CPU相应的规格书,还有烧写器或调试器,如果你能把板子时钟配好、软件跑起来、点亮板子的LED或外接屏幕,你就具备了一半的功力。就这个起点,可以说难倒了一大批人。
因此,嵌入式的起点之高、学习之困难、台阶之陡峭,是一般手机或PC应用软件层软件工程师所不能体会的。
当然,不要抬杠,嵌入式也有二次开发和低代码开发,不在本文的前提之内。
1 成为初级嵌入式软件工程师的条件
想要成为一个合格的初级嵌入式工程师,需要具备以下基本技能和基础知识。
另外,嵌入式系统中经常遇到新的板子和CPU,没做过的组件、外设或传感器,也常会有没用过的系统软件,有时还要面对不同行业客户。总之,嵌入式工程师经常面对陌生的东西,工期时常也很紧张,客观上需要具备快速学习和解决问题的能力。
2 成为高级嵌入式工程师的条件
高级嵌入式工程师的要求更高,根据我的过往经验,它要在初级嵌入式工程师本领的基础上,还要具备以下几种技术能力。
除了技术能力之外,嵌入式高工不仅通常需要带领技术团队一起工作,还要有一定的EQ,要具备更强的团队协作能力和沟通能力。
嵌入式高工也要对行业的业务有很多经验,你有再高的技术,行业经验不到位也不行。
3 嵌入式软件开发,该怎样入门?
相信不少想从事嵌入式开发的,看到我上面的东西,应该顿感压力。
其实大不必惊慌,虽然从本质上来说,嵌入式的难度、入门台阶要大于一般的纯软开发,但路子走对了,也是可以少走弯路,很快入门的。
要快速入门嵌入式软件开发,建议遵循以下几个方面。
打好编程基础,必须选择C/C++作为主要编程语言。可以暂时不懂C++,但C是必须先要搞懂的。这个是没办法的事,嵌入式就是C/C++语言的天下。了解编程语言的基础语法、数据类型、循环和函数等基本知识,熟悉面向对象编程思想。
由小到大的学习方式,小型的嵌入式系统成本人低,简单易学,可拿它先开刀。学习它的组成、体系结构、外设和内存管理、接口等基本概念。等将来有了经验,再学习大型复杂的嵌入式系统。
多练习嵌入式编程,多实践,实做才能有收获。可根据自己的需求选择一个流行的嵌入式系统开发平台,例如Arduino、STM32、430或51等,然后通过编写简单的程序开始学习嵌入式系统编程。我最建议的是以STM32和Arduino为起点,16位和8位单片机的应用会越来越少,Arduino台阶低,STM32是主流。
掌握开发嵌入式系统所需的软件和硬件工具,例如调试器、编译器和开发板等。
万丈高楼平地起,要先用小项目进行练习,不管是实际项目或者自己设计的,调试程序并解决问题,积累经验,是嵌入式进阶的不二法门。我以前在某家公司采用STM32平台,最终项目有30多万行源代码。饭得一口一口的吃,新人要是面临这种嵌入式代码,会崩溃的。
嵌入式系统开发是一个不断变化、发展的领域,持续学习新的技术和知识是必要。
总之,如果能采用打好语言基础、先入门小型平台、采用由小到大、小项目实战等做法,还是能很快入门嵌入式软件开发的。