嵌入式岗位职责与技能要求详解
一、前言
本文根据个人经验和网上资料整理,供参考交流。如有不当之处,欢迎指正。
二、硬件架构中最常用的几种
X86架构:目前市场上最常见的处理器架构之一,由Intel和AMD等公司广泛采用,支持32位和64位操作系统,兼容大量软件应用,广泛应用于个人电脑、服务器及高性能计算领域。
ARM架构:低功耗、高效率的处理器架构,广泛应用于移动设备、嵌入式系统和物联网设备。其处理器体积小、功耗低、性能稳定,适合对功耗和性能有较高要求的场景。
MIPS架构:精简指令集处理器架构,指令集简洁、执行效率高,广泛应用于嵌入式系统、家用路由器、智能电视等领域,在性能和功耗之间取得了良好平衡。
PowerPC架构:由IBM联合Apple和Motorola研发,在高性能计算机、服务器等领域应用广泛,具有高性能、高可靠性和高可扩展性等优点。
RISC-V架构:基于精简指令集原理的开源指令集架构,具有高度可定制性和可扩展性,可根据不同应用场景进行定制优化,被认为是未来处理器发展方向之一。
三、嵌入式岗位及技能要求
嵌入式领域主要有两大方向:嵌入式硬件工程师和嵌入式软件工程师。嵌入式软件工程师又大致分为嵌入式单片机工程师和嵌入式Linux工程师,划分依据是使用场景不同。单片机和Linux使用的都是ARM架构,只是产品使用的处理器芯片不同。ARM产品分为A、R、M三个系列,M系列最低端,A系列最高端。STM32使用M系列,Linux使用A系列。
3.1 嵌入式硬件
嵌入式硬件工程师主要负责硬件设计、PCB设计、原型开发、硬件调试、与软件工程师联调以及文档编写。
3.1.1 主要职责
硬件设计:根据需求设计电路原理图,选择合适的处理器、存储器、传感器等电子元件。
PCB设计:使用EDA工具进行PCB布局布线,确保信号完整性和电磁兼容性。
原型开发:制作硬件原型,进行焊接、调试和测试。
硬件调试:使用示波器、逻辑分析仪等工具调试硬件,解决信号干扰、电源噪声等问题。
与软件工程师联调:确保硬件和软件兼容性,提供硬件支持。
文档编写:撰写设计文档、测试报告等,进行功能、性能和可靠性测试,确保产品符合标准。
3.1.2 技能要求
硬件基础:掌握基础电路、数字电路、模拟电路、信号处理等知识。电子信息工程等专业通常具备相关基础。
EDA工具:熟练掌握Altium Designer、Cadence、OrCAD等设计工具。
嵌入式系统知识:了解常用处理器架构和外设接口,如I2C、SPI、UART等。
调试技能:熟练使用示波器、逻辑分析仪等调试工具。
编程能力:具有C语言编程能力,能编写底层驱动和固件,可作为加分项。
3.1.3 学习建议
建议学好大学专业课,多动手焊接和调试板子。如有学习路线、踩坑经验或专门文章,可进一步补充参考。
3.2 嵌入式单片机
单片机是单芯片微型计算机,主要运行简单C语言程序,进行裸机开发或使用RTOS轻量级实时操作系统。单片机定位为开发中低端智能化产品,应用领域包括电源管理、电池管理BMS、电驱动运动控制、电控系统ECU、无线解决方案及无线通信技术等。单片机岗位数量较多,但职业天花板相对较低。当前许多产品采用异构多核开发方式。单片机开发也会与硬件打交道,因此需要懂一些硬件知识,适合专业课涉及硬件的同学。
3.2.1 主要职责
硬件设计及开发:负责MCU相关硬件电路设计,包括原理图绘制、PCB布局及元器件选型,如MCU、ADC/DAC、电源模块等;优化硬件性能,确保低功耗、高可靠性和电磁兼容性。
软件开发:开发业务逻辑代码,实现传感器数据采集、外设控制、通信交互等功能;编写底层驱动及通信协议栈,如GPIO、定时器、ADC、PWM、UART、SPI、I2C、CAN等。
硬件调试:协调软硬件联调,解决通信异常、时序冲突等兼容性问题;使用示波器、逻辑分析仪、JTAG调试工具定位硬件故障或软件缺陷。
3.2.2 技能要求
硬件基础:熟悉数字和模拟电路设计,能独立完成原理图设计及PCB绘制;了解EMC设计规范。与硬件工程师相比,单片机岗位对硬件要求可适当放宽。
编程能力:掌握C语言。
开发工具:熟练使用Keil、IAR、STM32CubeMX等IDE。
通信协议:理解常见协议如Modbus、CANopen,掌握BLE、LoRa、NB-IoT等无线技术,初学者了解即可。
系统:掌握RTOS,常见的有FreeRTOS和RT-Thread,当前越来越多公司使用RT-Thread,建议实践。
3.2.3 学习建议
路线:C语言、数据结构、51单片机、32位单片机、RTOS、项目实践。时间紧张可跳过51,但直接学32可能有一定难度;时间充裕建议先学51。
学习资源:B站相关课程、正点原子免费课程及开发板、野火资料等。
3.3 嵌入式Linux
Linux定位为高端产品研发,岗位数量相对单片机少,且存在城市差异。例如深圳Linux和单片机岗位都较多,二线城市单片机岗位相对更多。
3.3.1 主要职责
底层:负责嵌入式Linux系统移植,包括Bootloader适配、内核裁剪与配置、设备树编写。
驱动:开发外设驱动及总线驱动,如摄像头、触摸屏、传感器、SPI、I2C、PCIe等;调试内核崩溃、内存泄漏、DMA冲突等底层问题,优化驱动性能与稳定性。
应用:开发用户态应用程序,实现数据采集、通信协议或AI推理;集成中间件或开源框架,支持多媒体或机器人应用。
3.3.2 技能要求
底层操作系统原理:深入理解Linux内核架构,包括进程调度、内存管理、文件系统、网络协议栈,熟悉内核模块开发与调试。
开发语言:底层编程以C语言为主,掌握Shell脚本。
工具链与框架:熟悉交叉编译工具链及Makefile、CMake、gcc;熟悉嵌入式构建系统如Yocto、Buildroot、OpenEmbedded;掌握GDB、KGDB、JTAG等调试工具及perf、valgrind等性能分析工具。
驱动:熟悉设备驱动模型,包括字符设备、平台设备、设备树,能独立开发并调试复杂外设驱动;了解硬件原理,能配合硬件工程师分析信号完整性等问题。
应用:熟悉C语言和C++,掌握常见数据结构和算法;熟悉Linux操作系统及基本命令;熟悉Linux系统编程,了解进程、线程管理及通信,熟悉多线程应用开发;熟悉Linux网络编程和socket编程;熟悉Makefile、Shell脚本编写和使用;熟悉TCP/IP、MQTT、HTTP等协议;熟悉SQLite数据库开发。
3.3.3 学习建议
路线:C语言、数据结构、51单片机、32位单片机、Linux应用、Linux驱动、Linux内核。应届生学到Linux应用即可寻找嵌入式Linux应用岗位;驱动和内核难度较高,刚毕业能学透的人较少。一般刚进公司从事应用开发,工作三到五年后公司可能安排学习驱动,逐步转向驱动岗位。
学习资源同单片机,包括B站、正点原子、野火等。培训机构并非必要,在校大学生可自学;已工作人员可选择价格低且靠谱的机构,或购买开发板自学。培训机构的主要好处是有人答疑、减少卡顿,以及督促学习,对自学能力强的人作用有限。
- 点赞
- 收藏
- 关注作者
评论(0)