嵌入式释意
那么,什么是嵌入式?
百度百科:
IEEE(InstituteofElectricalandElectronicsEngineers,美国电气和电子工程师协会)对嵌入式系统的定义:用于控制、监视或者辅助操作机器和设备的装置。原文为:DevicesUsedtoControl,MonitororAssisttheOperationofEquipment,MachineryorPlants)。
嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
其实说白了,嵌入式属于硬件开发层面。就是在已有的硬件上移植操作系统。以单片机作比较,单片机的工作模式是利用软件编程控制硬件,实现一些功能。嵌入式是在软件与硬件之间加入一个操作系统。目前火热的嵌入式操作系统主要是linux,android,鸿蒙等。
嵌入式是做什么的:
传统嵌入式产品:空调主控模块、冰箱主控模块、家用遥控器、智能手机、教学投影仪、音响系统、雷达系统、路由器等等
前沿嵌入式产品:无人机、智能音响、机器人控制、城市天眼系统、智能家具、自动驾驶汽车、扫地机器人、小米手环等等
(智能家居)
(无人机)
(小米手环)
嵌入式行业前景
目前的嵌入式开发更倾向于智能化,也就是我们所说的智能硬件(硬件+软件),从现在各种前沿的嵌入式产品来看的确如此,嵌入式产品的一个发展趋势是更倾向与自动化控制和人机交互,而不是强调“算法”这一块。
要区分你仅仅是一名嵌入式工程师而不是算法工程师,什么一大堆“人工智能”、“阿尔法狗”、“深度学习”、“神经网络”都不需要深入理解,那是研究生、博士生做的,并不是说本科的能力不足,而是“术业有专攻”,这并不是一名嵌入式工程师的工作量,你需要做的仅仅是与他们的“云端大脑”进行对接,调用他们API就完事了。
由于人工智能、深度学习、神经网络、区块链、大数据等先进学科的崛起,很多人都产生质疑:“嵌入式还有发展前景吗”?
这个问题我在这里可以很肯定地告诉你:“嵌入式有很好的发展前景,前沿嵌入式技术即将崛起,或者说已经崛起”。的确,人工智能、大数据这些学科会给嵌入式带来冲击,就目前来看,大学生更倾向于python编程语言、机器学习这一块,而嵌入式学者的确比往年有所下降。
但学者少了并不代表他的需求就少了,并不代表他的薪资水平下降了,目前的一个嵌入式技术更倾向于与智能学科相结合的趋势,以百度机器人为例,机器人的核心是大脑,即是“数据和算法”,但机器人大脑想机器人身躯能够像人类一样活动,能说会道,行走自如,那么就必须得依靠嵌入式技术,这就是我所说的嵌入式+智能学科应用。
从长久来看,嵌入式只会越来越火,智能学科的崛起必定带动新型的嵌入式技术发展。
嵌入式学习、从事方向
很多不了解行业的人说起嵌入式,他们就会说,“啊,我知道,就是搞单片机嘛。”甚至,连科班出身的学生很多都是这么认为。
为什么会出现这种局面?究其原因还是因为大学专业里并没有嵌入式行业根正苗红的专业。嵌入式知识体系庞大,不同方向所需要的知识大不相同,网上关于嵌入式的学习路线甚至五花八门,没有统一的答案,这对求学者简直太不友好。
学嵌入式的主要有两个专业的人,一个就是电子类专业,另一个是计算机类专业,电子类专业一般从硬到软学,计算机类的从软到硬学。本人更倾向于电子类的学习走向,硬件要过度软件,相对简单,但是要是纯软没接触过硬件,想迈这个坎可就难了。从这可以看出,嵌入式行业要求工程师软件硬件都要掌握,只是侧重点不同罢了。
解释完嵌入式,接下来分析一下嵌入式的大体方向。嵌入式主要分为软件硬件两个方向。
嵌入式硬件方向:
为产品设计硬件电路原理图,设计硬件PCB板,选择合适的元器件,焊接调试硬件电路板,保证硬件电路板的可靠性、稳定性和抗干扰能力。因为现在集成电路发展迅速,大部分集成电路厂商都会提供参考电路,所以硬件电路原理图的设计相对来说比较简单,硬件工程师工作的含金量主要体现在产品的可靠性和稳定性设计、以及电磁兼容设计,这才是硬件设计工程师的含金量所在。一个资深的嵌入式硬件工程师年薪都在10万~30万之间。
要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频CPU、多层PCB板的设计经验。嵌入式硬件工程师要学的课程主要有模拟电路设计、数字电路设计、电磁波理论等。熟悉常用的放大电路、滤波电路、电源电路设计和分析。
嵌入式软件方向具体可以分三类:
嵌入式驱动工程师
编写和移植各种芯片驱动(如音频芯片),优化硬件设备驱动(如温湿度传感器),得精通各种硬件接口协议(如I2C协议)、系统调度、信号量、锁机制等等,开发难度最大。该类开发者一般是软硬件综合型人才,一般的嵌入式驱动工程师指Linux上的驱动开发工程师,需要精通Linux驱动框架(platform框架、input子系统框架等),结合芯片本身去编写驱动,驱动的好坏很大程度上决定一个产品的好坏。业界对驱动人才的定义是三年才算入门,可见此门槛之高。
嵌入式系统工程师
主要是编写固件,根据不同平台移植操作系统,根据应用场景来优化系统,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,如果系统不稳定,驱动和应用也是白做的。
嵌入式应用工程师
编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及C++、Java、python、JavaScript、PHP等各类语言以及各种脚本语言、数据库、前端后台、各种通讯协议、甚至一些从来没听过的协议或概念,需要很强的学习能力,该职位也是各大公司需量最大的,一般10人的开发小组,驱动开发与系统开发与应用开发的比例是1:2:7。
嵌入式linux方向学习路线
C语言
嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。
Linux基础
Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI,编译器GCC,调试器GDB和Make项目管理工具,ShellMakefile脚本编写等知识,嵌入式开发环境的搭建。
Linux系统编程
重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。
Linux网络编程
计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。
数据结构与算法
数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮性。此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。
C++、QT
C++是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C++的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
CortexA7、Linux平台开发
通过基于ARMCortex-A7处理imx6ull了解芯片手册的基本阅读技巧,掌握imx6ull系统资源、时钟控制器、电源管理、异常中断控制器、nandflash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在imx6ull实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android操作系统开发流程。Android系统是基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。
驱动开发
驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARMCortex-A7处理器imx6ull各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。
整理者:青葙子嵌入式
免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。