对于想以后从事嵌入式软件工程师职位的同学来说,刚入手的时候可能会对嵌入式一头雾水,网上的介绍也不够系统,专业术语又太多,下面小编就给大家来理一理嵌入式软件工程师的前生今世,帮助大家更好了解嵌入式行业。
一、嵌入式定义
(一)嵌入式设备
比如手机、医疗设备、交换机、路由器、汽车电子和智能穿戴设备等都是嵌入式设备。从事嵌入式的工作就是作为一名工程师上述设备所需的程序,意味着你需要不断的与微控制器以及外围芯片、外围接口(USB、I2C、SPI、UART、SATA、PCIe等等)打交道。
(二)嵌入式系统
嵌入式系统是一种专用的计算机系统。用于控制、监视或者辅助操作机器和设备的装置。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。
事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
(三)嵌入式软件工程师
嵌入式是硬件和软件的综合体,国内对嵌入式软件工程师的定义是:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
(四)嵌入式团队
嵌入式设计是企业电子产品设计的重要组成,目前国内外中小型企业内部都建立了自己的嵌入式团队。团队所需的人员职位构成包括:(1)系统设计工程师 (2)硬件工程师 (3)底层驱动工程师(4)Linux系统工程师 (5)应用设计工程师等。
二、嵌入式详细介绍
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成。
(一)嵌入式计算机系统
嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、驱动层(中间层)、系统软件层和应用软件层组成。下面的介绍也将紧紧围绕着这四个层次展开说明。
(二)执行装置
执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
下面金字塔中出现的中间件比较少见,它不是嵌入式系统的必须,一般指的是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。专门做中间件的嵌入式软件工程师也比较少见。
受控器件:
1.消费电子:mp3、手机、电梯、汽车...
2.智能家电:数字电视、微波炉、数码相机、空调...
3.网络设备:交换机、路由器...
4.医疗仪器:..各种医疗器械...
5.航天设备:卫星、航天飞机、月球探测仪...
6.工业控制:控制主机,智能监控...
7.汽车电子:车联网
8.安防监控:交通监控
计算机系统:包括硬件和软件系统、且软、硬件均可裁剪,但必须有最小系统要求。
三、硬件层次
(一)嵌入式芯片
1、嵌入式芯片
嵌入式系统(系统层次)搭建的基础是嵌入式芯片,不同的嵌入式芯片也往往决定了硬件的性能,能搭建什么样的嵌入式系统以及能实现什么样的功能。嵌入式芯片包括了SOC,FPGA,CPLD。其中:
(1)SOC:Systems on Chips系统级芯片(顾名思义,能够跑操作系统的)。
(2)MCU:Microcontroller Unit单片机(包括了CPU,ROM,RAM,外接设备(外设)的输入输出接口)。
(3)MPU:Microprocessor Unit 微处理器。
(4)CPU:Central Processing Unit中央处理器。
2、嵌入式芯片目前主流的产品有:
(1)CPLD
CPLD(ComplexProgrammable Logic Device)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。
是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
(2)FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
(3)两者的区别
FPGA和CPLD都是可编程逻辑器件芯片,用于电路设计,特点是使用灵活,通常是为了满足客户定制化而又小批量的需求。
早在1980年代中期,FPGA已经在PLD设备中扎根。CPLD和FPGA包括了一些相对大数量的可编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器组成。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。因此一个有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。
CPLD和FPGA还有一个区别:CPLD下电之后,原有烧入的逻辑结构不会消失;而FPGA下电之后,再次上电时,需要重新加载FLASH里面的逻辑代码,需要一定的加载时间。
(二)SOC系统级芯片
SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。SOC是我们介绍的重点。一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。
对于手机行业来说,手机soc通常集成了很多手机上最关键的部件,比如CPU、GPU、内存、也就说虽然它在主板上的存在是一个芯片,但是它里边可是由很多部件封装组成的。比如通常我们所说的高通801,Tegra 4,A6等等都只是系统部件打包封装(SoC)后的总称。然而各家的打包封装的内容则不尽相同,原因也不尽相同。
比如高通的SoC集成度往往是较高的,有AP/CPU(Krait),GPU(Adreno),RAM(运行内存),Modem(通信模块),ISP(图像处理),DSP(数字信号处理),Codec(编码器)等等等等。
对于除手机之外的嵌入式来说,我们简单理解为集成了各种芯片的集成电路即可。
(三)MCUMicrocontrollerUnit单片机
MCU属于SOC中的一部分,单片机可理解为跑程序的微型电脑,麻雀虽小五脏俱全,所写的代码相当于程序。它集成了内处理器(CPU)、存储器(RAM、ROM)、计数器、以及I/O端口为一体的一块集成芯片。在此硬件电路基础上,将要处理的数据、计算方法、步骤、操作命令编制成程序,存放于MCU内部或外部存储器中,MCU在运行时能自动地、连续地从存储器中取出并执行。
MCU微控制单元(Microcontroller Unit)单片机
(四)MPU微处理器
1、分类
根据处理对象的不同分类:
(1)用作处理通用数据时,叫作中央处理器(Central Processing Unit, CPU)这也是最为人所知的应用(如:Intel Pentium CPU)。
(2)专用于作图像数据处理的,叫作图形处理器(Graphics Processing Unit, GPU)(如NvidiaGeForce 6150 GPU)。
(3)用于音频数据处理的,叫作音频处理器(Audio Processing Unit, APU)(如Creativeemu10k1 APU)等等。
(4)专门用于数字信号处理的叫做数字信号处理器(Digital Signal Processing,DSP),如知名的SHARC。
2、关于DSP的补充说明
DSP数字信号处理器:如SHARC(在DSP领域占据主导地位)
- SHARC:32位浮点数字信号处理器(即 DSP)SHARC是美国ADI公司推出的32位浮点数字信号处理器(即 DSP)系列产品的名字。
- 特点:
在浮点DSP市场占据主导地位,拥有出色的内核和存储器性能,以及优异的I/O吞吐能力
高级实时音频和工业应用
安全与监控
汽车电子
相关公司:德州仪器TI,ADI (亚德诺半导体技术有限公司,产品SHARC)
(五)CPU中央处理器
CPU是嵌入式芯片的核心,因此当我们对嵌入式芯片做分类时,常常以CPU作为标准。
一、核心参数
1、CPU频率MHZ。
2、存储容量RAM。
3、外设类型和个数:如SPI,I2C,UART,USB,DMA,CAN。
1、计算机的CPU。
Intel公司和AMD公司
2、手机平板智能电视的CPU
高通Qualcomm,联发科MTK,三星电子【提供的是芯片整体解决方案】【高通的代表产品是骁龙处理器】,华为海思【如麒麟935,用于华为的手机】
3、嵌入式的CPU
(1)IP公司
ARM公司【IP公司,知识产权公司,提供技术支持,Intellectual property】
MIPS公司
(2)芯片厂商
公司
| 芯片
| ARM安谋
| ARM7/9/11,以及Cortex系列
| Atmel
| AVR系列
| 意法半导体ST
| STM、STM32
| MIPS
| MIPS
| Intel英特尔
| 80386系列
| 飞思卡尔Freescale
| Freescale主要应用于汽车电子领域
| 瑞萨Reneasa
| Reneasa主要应用于汽车电子领域
| Microchip 美国微芯半导体
| PIC(8位单片机系列)
| 宏晶STC(中国公司)
| STC 51单片机
| IBM和Motorola
| Power PC
| AMD
| Am386EM
|
四、驱动层
驱动层一般是用来驱动外围设备的,外设和外设驱动有很多,这里讲讲一些常用的,有:
(一)SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线。
(二)I2C
I2C(Inter-Integrated Circuit)总线是由PHILIPS公司的两线式串行通信总线。
(三)UART
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信
(四)USB
(五)CAN
控制器局域网。
(六)SD卡
加速度计、陀螺仪及气压计传感器
五、系统层
系统层即操作系统OS(operating systems)
常见的操作系统有:
(一)Linux
linux是嵌入式使用的主流系统,包括了uClinux和openWRT
1、uClinux
uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。
uClinux是嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,与标准Linux在内存管理方面有着本质的区别。
uCLinux是一种优秀的嵌入式Linux版本,是micro-Conrol-Linux的缩写。它秉承了标准Linux的优良特性, 经过各方面的小型化改造,形成了一个高度优化的、代码紧凑的嵌入式Linux。
虽然它的体积很小,却仍然保留了Linux的大多数的优点:稳定、良好的移植性、优秀的网络功能、对各种文件系统完备的支持和标准丰富的API。它专为嵌入式系统做了许多小型化的工作,目前已支持多款CPU。 其编译后目标文件可控制在几百KB数量级,并已经被成功地移植到很多平台上。
2、openWRT
OpenWrt可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。
对于人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。
(二)Wince
Wince在嵌入式应用领域仅次于linux。Windows Embedded Compact(即 Windows CE)是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统。
(三)uCosII(也写作uc/os)
μC/OS-II由Micrium公司提供,是一个可移植、可固化的、可裁剪的、占先式多任务实时内核,它适用于多种微C统源代码开放、整洁、一致,注释详尽,适合系统。操作系统。
(四)VxWorks
VxWorks是美国 Wind River System 公司( 以下简称风河公司,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统环境,类似MicrosoftVisual C,但是提供了更丰富的调试、仿真环境和工具。
六、其他相关知识
(一)硬件通信
嵌入式往往离不开硬件之间的通信,下面讲讲常遇到的一些硬件通信术语。
1、无线通信
(1)Bluetooth蓝牙
通常应用于手机,技术复杂,功耗大,距离近,组网规模太小,因此出现了zigbee。Zigbee/Xbee避免了蓝牙的一些缺点,主要应用于工厂。低功耗,低成本。
(2)RFID
近距离无线通信技术(几米到几十米),应用在生产、物流、航空行李跟踪、资产管理。
(3)NFC
近距离无线通信技术,是RFID的演化版(可以说是RFID的一种),距离比RFID短(小于10cm),应用在公交,手机支付,门禁系统。
(4)Wifi
(5)802.11
(6)Radio
(7)IR(红外)
(8)6LoWPAN
(9)Sub-GHZ 1Ghz以下RF
2、硬件通信
(1)USB
(2)UART
(3)I2C
(4)RS232C
(5)CAN
(6)HTTP
(7)HDLC
(8)SPI/SCI/SI
(9)FireWIre
(10)1-wire
(11)CoAP
(12)TCP
(13)UDP
(14)XMPP
(15)MQTT
(16)网络协议
(二)电路
一般对电路部分的要求是会PCB(Printed Circuit Board印刷电路板),也就是会制作电路板,PCB一般使用到的软件有Protel,Altium,FreePCB,有时候需要通过电路仿真软件来仿真电路,电路仿真软件有Multisim,Proteus,Pspice。
(三)电机
1、直流电机:
有刷直流电机,无刷直流电机。
2、交流电机:
单相电机,三相电机。
3、步进电机
4、直线电机
5、舵机
6、伺服电机
七、嵌入式技术支持公司
(一) MIK联发科
台湾联发科技股份有限公司(MediaTek.Inc)是全球著名IC设计厂商,专注于无线通讯及数字多媒体等技术领域。其提供的芯片整合系统解决方案,包含无线通讯、高清数字电视、光储存、DVD及蓝光等相关产品。
(二)Qualcomm高通
Qualcomm是全球3G、4G与下一代无线技术的领军者,并正在引领全球5G之路,其创想和创新推动了数字通信的演进。
(三)TI德州仪器(美国)
德州仪器(Texas Instruments),简称TI,是全球领先的半导体公司,为现实世界的信号处理提供创新的数字信号处理(DSP)及模拟器件技术。
八、职位区分
(一)硬件层次
硬件工程师
开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。该类人员往往来源于电子工程、通信工程等相关专业。
(二)软件层次
嵌入式编程分两种,一种是嵌入式软件开发,一种是嵌入式驱动开发。
1、底层的驱动内核工程师(嵌入式驱动工程师)
嵌入式驱动开发,其实属于底层的开发。所谓底层开发就是跟硬件打交道,距离硬件最近。根据芯片具体情况把操作系统(如Linux)移植到上面,同时编写必要的驱动程序,改写相应的内核代码。
如果是裸板的驱动,很好开发。但是驱动开发难就难在需要接入操作系统。就拿linux驱动开发来说,想要做好这种开发,你必须得对linux内核非常熟悉,这里的熟悉指的就是对内核的各种函数,各种方法的熟悉。
2、嵌入式应用程序工程师类
嵌入式软件开发就是根据驱动手册进行开发,属于应用层的开发。这种开发你不需要深入了解底层的知识,但要求精通:Linux系统、Shell编程、Linux开发环境、C语言、ARM硬件平台、数据结构、Linux内核、驱动程序等。
(三)所需掌握的知识
1、C语言
这是基础,基础一定要扎实。这个与做系统移植息息相关。
2、操作系统原理
LINUX,WINCE等,至少学习过一种,并且还需要对些基础知识有蛮多的了解。
3、Linux 基础
要求能熟练使用Linux。
4、基本的经典算法和数据结构知识
5、Linux 系统编程
6、linux驱动
7、网络基础知识
8、数字电路
9、I2C/SPI 这些简单且基本的协议
10、对ARM,FPGA,DSP等这些硬件比较了解。
这些知识是嵌软工程师要掌握的知识,也是我们考察候选人需要查看的关键点。需要指出的是,这些关键点靠面试很难完成,必须要通过正式的笔试才可以完成。
(四)职业发展路径
嵌入式软件工程师——嵌入式系统开发工程师/嵌入式系统测试工程师——产品研发经理/IT项目经理。
内容来源于:网络
由无忧实习整理
侵删
这里只是抛砖引玉一下,为以后想从事这个岗位的同学提供一个大概的学习框架和知识系统指引,关键还需要各位在工作中多去积累和锻炼。
因此,找一个对口实习工作就尤为重要。
而无忧实习作为一个理工生实习求职的平台,在上面有大量的理工科岗位,其中就包括大量的嵌入式开发的岗位。
下面,是无忌为大家精选的一部分相关岗位:
一、东莞市稳控智能技术有限公司
招聘岗位:嵌入式开发实习生
工作地点:东莞市
工作职责:
1、负责嵌入式产品应用的功能设计、实现,能独立承担项目软件开发工作。
2、负责应用的功能设计、实现,能独立承担项目软件开发工作。
3、进行程序单元测试、功能测试,缺陷跟踪及质量保证。
4、编制软件设计文档及产品使用说明书。
5、软件维护及优化,参入组内技术问题分析与解决。
6、负责主流固件的开发和维护,生产和客户问题解决,技术支持,需求评审等。
任职要求:
1、本科及以上学历,自动化、计算机、机械电子工程、电子信息工程、软件工程等相关专业。
2、熟悉C/C++,熟悉WINDOWS、WINCE或LINUX平台下的软件开发。
3、熟悉ARM、DSP、FPGA等硬件开发平台。
4、熟练使用IAR、Cc Studio、VS2010等开发工具。
5、对软件工程有较深的理解。
扫描二维码
了解更多详情
二、广州虹科电子科技有限公司
招聘岗位:嵌入式开发工程师
工作地点:广州市
工作职责:
1.负责EtherCAT等主流现场总线的移植和调试;
2.协助用户前期CPU和操作系统选型和测试;
3.熟悉硬件平台;
4.熟悉操作系统;
5.擅长运动控制算法和伺服算法者优先考虑。
任职要求:
1、自动化、电子工程、通讯、机电等专业,本科及以上学历;
2、有简单的ARM开发经验,熟悉以上最少一个操作系统的应用;
3、了解EtherCAT等协议;
4、熟练的英文阅读能力。
扫描二维码
了解更多详情
三、深圳市泽云科技有限公司
招聘岗位:医疗器械嵌入式系统工程师实习生
工作地点:深圳市
工作职责:
1、协助技术总监设计康复医疗设备嵌入式软件的整体架构并制定软件需求,与上层软件工程师共同制定通讯协议。
2、嵌入式软件的功能开发,实现电机的控制和传感器的数据采集和发送。
3、软件需求、软件手册、测试大纲和报告等文档撰写。
任职要求:
1、精通C/C++编程语言,熟悉单片机平台的电机控制和传感器数据采集,熟悉串口通讯。
2、具有一定的嵌入式软件的开发经验,有算法开发经历。
3、硕士在读及以上学历,机械、电子、自动化及计算机专业优先。
4、具有良好的英文阅读和表达能力。
扫描二维码
了解更多详情
相关阅读
▼想投递简历
想了解更多岗位
点击“阅读原文” |