嵌入式岗位分析大全
嵌入式软件工程师则主要负责嵌入式设备上的软件开发工作,与传统软件工程师不同。传统的软件工程师通常开发PC或服务器上运行的应用程序,所依赖的操作系统大多是Windows、Linux等,而嵌入式软件工程师的工作环境则是诸如Wince、VxWorks、Linux等嵌入式操作系统。
一、嵌入式软件工程师的工作通常包括:
1. 应用程序开发:根据客户需求开发嵌入式设备上的应用程序,如智能家居设备、医疗仪器的用户界面等。
2. 嵌入式开发工具的使用:使用专门的开发工具,如Wince下的EVC(Embedded Visual C++)或Linux下的QT等。
3. 底层软件设计:尽管嵌入式软件工程师的主要工作在上层软件,但有时也需要参与到底层驱动的设计和调试中,确保上层应用与硬件的协调。
二、嵌入式硬件工程师与嵌入式软件工程师的区别
1. 工作性质的区别
嵌入式硬件工程师主要负责设计和搭建硬件平台,为软件工程师提供开发环境。硬件工程师的工作更像建筑师,设计并构建产品的硬件基础;而嵌入式软件工程师则像室内设计师,为产品增添功能和美感。
硬件工程师的工作重点在于确保电路的正常工作以及各种外设和芯片的兼容性,他们在设计时需要考虑以下几个关键问题:
- 功耗:控制电路设计的功耗,特别是在便携式设备中,这一因素尤为重要。
- 电磁干扰(EMI):确保电路不会干扰其他设备,也不容易受到外部干扰的影响。
- 生产可行性:电路设计不仅要满足功能需求,还需考虑生产的便捷性和成本。
- 可靠性:设计要能经受住长时间的使用和环境考验。
而软件工程师则专注于通过编写代码实现产品的功能,他们的主要职责包括应用程序开发、操作系统移植、以及优化软件性能等。
2. 项目依赖的差异
硬件的设计在整个项目中尤为关键。没有硬件,软件无法运行;但是在某些嵌入式系统中,硬件产品可以独立工作,比如简单的单片机应用无需操作系统支持。这种情况下,硬件工程师往往需要负责从硬件设计到功能实现的所有工作。而软件工程师在某些项目中可以缺席,特别是在没有复杂操作系统或用户交互界面的系统中。
3. 就业形式的差异
国内嵌入式软件工程师的就业市场较为广泛,培训资源也多,因此入门较为简单。硬件工程师由于门槛较高,需要深入的电路设计知识和实践经验,因此市场需求相对较少,但核心硬件开发人员的需求始终存在。
一旦硬件产品定型,软件的升级和维护成本较低,因此在后期,企业会更依赖软件开发来提高产品的功能和竞争力,这也导致嵌入式软件工程师在企业中的需求量较大。
三 实际开发应用技术
硬件工程师:主要负责底层硬件设计,需要掌握处理器(如ARM9,DSP,Nios II,FPGA)、PCB(如EMC设计与仿真)、通讯(如IIC,IIS,SPI,UART,CAN总线,RS232,PSTN Modem,网络,GPRS通信)等知识。
驱动开发工程师:主要负责底层和上层的通讯,需要掌握系统(如Linux非实时系统/VXworks实时系统+架构/文件系统)、内核与BOOT(如内核裁剪与移植、boot loader和驱动编写)、上层接口(如USB,网口)、底层接口(如SPI、UART、IIC、I2S,CAN)等知识。
软件工程师:主要负责上层应用软件,需要掌握CPU(如51/MSP430/ARM7/ARM9)、外设(如AD/DA、UART、USB、LCD)、总线和通讯接口(如I2C,SPI,RS232,RS484,CAN,USB,以太网)、环境(如Linux/QNX+ARM汇编)、GUI(如VC++/VC#/LABVIEW)等知识。
系统开发工程师:主要负责系统架构设计。
DSP软件工程师:主要负责数字信号处理部分,需要掌握CPU(如TI DM642/648/6467、TI C6000、TMS320C5000、Freescale StarCore)、算法(如熟悉图像、音频、视频相关处理算法)、接口与驱动(如网络协议(MAC、IP、UDP、TCP)等)、操作系统(如架构设计和操作系统配置)等知识。
全网最受欢迎的嵌入式面经
现在免费开放:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoMc