许多从事硬件开发方向的工程师,尤其是在众多的中小电子公司从事硬件开发的工程师,在工作一段时间后,都容易感到困惑。年复一年,除了多熟悉了一些别人已经做好的电子元器件,拿来做一些简单的组装外,没有了更大的成就感。薪酬难于有大的提升,技术的路似乎看不到尽头。曾经认为做硬件能更真正地懂得一个电子设备的核心工作原理,掌握最高端的核心技术。然而随着电子技术的飞速发展,真正的核心技术进一步向芯片设计和软件开发方向靠拢,传统的硬件开发技术越来越累同和成熟化,伴随着市场的萎缩,高薪的硬件开发岗位越来越少,集中到少数做高可靠性和射频以及功率产品的公司中,很多硬件工程师也很难有机会获得进一步提升的空间。
心里萌发转行的想法了吗?但是从事硬件工作多年的底层思维,让他们更加精通数据位的变换,反而对大的软件工程和设计模式等高层软件开发离得较远。抛弃已有的优势,从头学起的话,从时间精力和个人的期望等方面来看都不被看好。往芯片设计方向转型就更加困难,目前国内的集成电路设计产业本来就很薄弱,就业面窄,更加难以接受半路出家的和尚。
在21世纪这个后PC时代,嵌入式技术异军突起,在智能硬件、人工智能,机器学习,云计算等领域都得到了广泛的应用。在这个宽广的嵌入式领域,对人才的要求也特别的高,需要的人才既需要懂得底层软硬件开发知识,又需要拥有软件工程能力,最好有硬件开发方面背景甚至能开发驱动和操作系统内核,有能力对代码进行底层的汇编优化等。而一个有一段时间硬件开发经验的工程师在这方面无疑有着巨大的优势。
所以相比于做芯片设计来说,硬件工程师转行做软件开发是一条比较不错的出路。当前的软件开发有各种不同的方向,学什么最好呢?毫无疑问,嵌入式软件开发!嵌入式开发一直是一种软硬件结合非常紧密的技术,应用领域极为广泛,我们日常看到的很多产品,都是嵌入式产品。嵌入式开发在十多年前就十分的火爆了,尤其是在当前物联网、人工智能的时代背景下,物联网、人工智能的发展再次带火了嵌入式。嵌入式这种软硬相结合的新技术,在新的时代背景下,更是如鱼得水。
在嵌入式这个特别的软件开发领域,硬件工程师们曾经拥的的经验对开发驱动、操作系统内核等底层核心软件是非常有帮助的。传统的做高层软件开发,网页设计等的开发人员,无法与其比拟。抛弃曾经不停地熟悉各种不同的电子元器件,阅读芯片手册,真正深入了电子系统的灵魂,可以获得比以前更加广阔的技术与职业成长空间。
广义的嵌入式技术通常指一些小型的嵌入式电子系统:传统的什么51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式微处理器;以及DSP;FPGA等。嵌入式技术这些年获得了空前发展,十分火爆,小到智能手机,平板电脑,大到我们的航空母舰,航天飞机,它们里面都需要大量的嵌入式系统,应用面很广。
值得注意的是:在当前的就业市场上,在找工作中,很多的大型企业(著名的,小的不算)对单纯的ARM硬件开发工程师并不比单片机重视多少。很少有大企业的职位里写“从事过ARM开发优先”。写的多的是什么?“嵌入式LINUX”到这相信大家看出来了吧,需要的是硬件中的软件。所以拥有一些硬件开发经验的工程,只要经过一段时间的软件开发训练,就可以快速成长了一名优秀的嵌入式软件开发工程师,获得广阔的职场发展空间。
在大企业中,嵌入式软件开发具体可以分三类:
嵌入式驱动工程师:编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指Linux上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。
嵌入式系统工程师:主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。
嵌入式应用工程师:编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念,需要很强的学习能力,该职位也是各大公司需量最大的,