初级和高级嵌入工程师要具备的能力,看完你还想做嵌入式吗?

萨达短文 2023-04-07 12:49:16

我是一个曾经从业20年的嵌入式老码农,如果谈别的我可能要谦虚谨慎一点。但谈及嵌入式行业的话题,我就不必客气了。

下面的行文虽短,是我一个字一个字的码出来的,也是我基于多年经验的认知总结。虽不能全面无遗漏,但请相信,我的描述也是八九不离十的。

PC上的软件开发体系,生态早已经成熟。你用VC、VB等语言工具,你开发调试网页,你操作shell命令行,等等。可利用的工具非常多,很成熟,操作或编程结果可以立刻呈现,有问题可以网上找到海量的相关帮助和解答。

嵌入式就没这么便利。尤其是在过去,一个初入职场的嵌入式软件工程师,本来没啥工作经验,有时要单打独斗,直接面对裸机,困难可想而知。

嵌入式开发,生态相比PC纯软开发困难的多。给你一块板子和原理图,给出CPU相应的规格书,还有烧写器或调试器,如果你能把板子时钟配好、软件跑起来、点亮板子的LED或外接屏幕,你就具备了一半的功力。就这个起点,可以说难倒了一大批人。

因此,嵌入式的起点之高、学习之困难、台阶之陡峭,是一般手机或PC应用软件层软件工程师所不能体会的。

当然,不要抬杠,嵌入式也有二次开发和低代码开发,不在本文的前提之内。

1 成为初级嵌入式软件工程师的条件

想要成为一个合格的初级嵌入式工程师,需要具备以下基本技能和基础知识。

编程语言方面:熟练掌握C/C++编程语言,C语言是必备项。嵌入式系统往往需要高效、稳定、实时的运行,因此需要嵌入式工程师具备高超的编程技能和熟练的代码调试能力。

硬件基础:熟悉数字、模拟电路基础知识。嵌入式系统中的电路部分往往需要嵌入式工程师设计和调试,因此需要掌握数字电路和模拟电路的基础知识。当然,如果专门的硬件工程师配合,这一部分熟悉原理即可,不一定要很懂。

单片机知识:嵌入式工程师需要了解单片机的各种功能模块,如定时器、计数器、串口等,并能够熟练使用这些模块。

通信协议和接口技术:如SPI、I2C、UART、CAN等。这些通信协议在嵌入式系统中广泛使用,因此嵌入式工程师需要熟练掌握这些协议,并能编写驱动和API接口。

熟悉各种传感器原理和应用:嵌入式系统中需要与各种传感器和执行器进行交互,因此需要了解它们的原理和应用。

RTOS操作系统:嵌入式系统中经常需要使用FreeRTOS、Linux、UCossII等操作系统,因此嵌入式工程师需要熟悉这些操作系统的使用方法和原理。

另外,嵌入式系统中经常遇到新的板子和CPU,没做过的组件、外设或传感器,也常会有没用过的系统软件,有时还要面对不同行业客户。总之,嵌入式工程师经常面对陌生的东西,工期时常也很紧张,客观上需要具备快速学习和解决问题的能力。

2 成为高级嵌入式工程师的条件

高级嵌入式工程师的要求更高,根据我的过往经验,它要在初级嵌入式工程师本领的基础上,还要具备以下几种技术能力。

10年左右的C、C++功力:真正的C/C++能耐是在多年开发才能形成的,行业经验一般认为,合格的C/C++语言能力,没个十年八载,恐怕不能成熟。

操作系统移植与配置的能力:这个如果用别人移植好的不算,那是初级嵌入式工程师的能力。高级嵌入式工程师,可以在裸机、无前例的情况下,把嵌入式freeRTOS之类的小操作系统、嵌入式Linux系统移植到目标硬件板上。

要具备系统级的设计能力:能针对市场需求,考虑成本、技术难度、扩展性等因素,选定嵌入式系统方案。

驱动与API开发:熟悉板载Bootloader、BSP系统的开发,给应用工程师提供API接口。

系统级的BUG跟踪处理能力。有时,嵌入式系统高达数十万行、甚到数百万行代码,出了一些bug是很难分析定位的。嵌入式高工则具备这方面的能力,经验十分老到。

电路分析与设计的能力。能够分析电路设计,从厂家的参考设计中提炼、合理取舍,形成自身需要的硬件板子。当然,如果是嵌入式软件工程师,这项能力不是必备。但最起码要懂一些硬件电路接口基本原理。

除了技术能力之外,嵌入式高工不仅通常需要带领技术团队一起工作,还要有一定的EQ,要具备更强的团队协作能力和沟通能力。

嵌入式高工也要对行业的业务有很多经验,你有再高的技术,行业经验不到位也不行。

3 嵌入式软件开发,该怎样入门?

相信不少想从事嵌入式开发的,看到我上面的东西,应该顿感压力。

其实大不必惊慌,虽然从本质上来说,嵌入式的难度、入门台阶要大于一般的纯软开发,但路子走对了,也是可以少走弯路,很快入门的。

要快速入门嵌入式软件开发,建议遵循以下几个方面。

打好编程基础,必须选择C/C++作为主要编程语言。可以暂时不懂C++,但C是必须先要搞懂的。这个是没办法的事,嵌入式就是C/C++语言的天下。了解编程语言的基础语法、数据类型、循环和函数等基本知识,熟悉面向对象编程思想。

由小到大的学习方式,小型的嵌入式系统成本人低,简单易学,可拿它先开刀。学习它的组成、体系结构、外设和内存管理、接口等基本概念。等将来有了经验,再学习大型复杂的嵌入式系统。

多练习嵌入式编程,多实践,实做才能有收获。可根据自己的需求选择一个流行的嵌入式系统开发平台,例如Arduino、STM32、430或51等,然后通过编写简单的程序开始学习嵌入式系统编程。我最建议的是以STM32和Arduino为起点,16位和8位单片机的应用会越来越少,Arduino台阶低,STM32是主流。

掌握开发嵌入式系统所需的软件和硬件工具,例如调试器、编译器和开发板等。

万丈高楼平地起,要先用小项目进行练习,不管是实际项目或者自己设计的,调试程序并解决问题,积累经验,是嵌入式进阶的不二法门。我以前在某家公司采用STM32平台,最终项目有30多万行源代码。饭得一口一口的吃,新人要是面临这种嵌入式代码,会崩溃的。

嵌入式系统开发是一个不断变化、发展的领域,持续学习新的技术和知识是必要。

总之,如果能采用打好语言基础、先入门小型平台、采用由小到大、小项目实战等做法,还是能很快入门嵌入式软件开发的。

0 阅读:47