文章目录
一、前言
这是根据我个人和网上的一些资料编写的,可能有不对的地方请及时提醒。
二、硬件架构中最常用的有哪几种
在硬件架构中,最常用的几种包括:
- X86架构:这是目前市场上最为常见的处理器架构,由Intel和AMD等公司广泛采用。它支持32位和64位操作系统,并且兼容大量的软件应用。X86架构的处理器被广泛应用于个人电脑、服务器以及高性能计算领域。
- ARM架构:ARM架构是一种低功耗、高效率的处理器架构,广泛应用于移动设备、嵌入式系统和物联网设备等领域。ARM架构的处理器具有体积小、功耗低、性能稳定等优点,因此非常适合应用于移动设备等对功耗和性能有较高要求的场景。
- MIPS架构:MIPS架构是一种精简指令集(RISC)处理器架构,具有简洁的指令集和高效的执行效率。MIPS架构的处理器被广泛应用于嵌入式系统、家用路由器、智能电视等领域。MIPS架构的处理器在性能和功耗之间取得了良好的平衡,因此受到了广泛的认可和应用。
- PowerPC架构:PowerPC架构是由IBM公司联合Apple和Motorola两大巨头合力研发的一种处理器架构。PowerPC架构的处理器在高性能计算机、服务器等领域得到了广泛的应用。PowerPC架构的处理器具有高性能、高可靠性和高可扩展性等优点,因此在一些需要高性能计算的领域得到了广泛的应用。
- RISC-V架构:RISC-V是一种基于精简指令集(RISC)原理的开源指令集架构(ISA)。RISC-V架构的处理器具有高度的可定制性和可扩展性,可以根据不同的应用场景进行定制和优化。RISC-V架构的处理器正在逐渐发展壮大,被认为是未来的处理器发展方向之一。
三、嵌入式的岗位及技能要求
目前嵌入式领域有两大方向,嵌入式硬件工程师、嵌入式软件工程师。而嵌入式软件工程师又大致分为两个方向,它是基于使用场景的不同来划分的,一个是嵌入式单片机工程师,一个是嵌入式linux工程师。因为我本人是嵌入式linux方向的,所以对硬件和单片机的技能要求不是很了解,所以仅供参考。
单片机和linux使用的其实都是ARM架构,只不过产品使用的处理器芯片不同而已。ARM产品一共有三个系列:A、R、M。M系列最低端,A系列最高端。STM32就是使用的M系列,linux使用的是A系列。
3.1 嵌入式硬件
嵌入式硬件工程师主要是负责硬件方面,其中包括硬件设计、PCB设计、原型开发(板子实物)、硬件调试、和软件工程师联调,编写文档。
3.1.1 主要职责
硬件设计:根据需求设计电路图原理图,选择合适的处理器、存储器、传感器等电子元件。
PCB设计:使用EDA工具(如Altium Designer、Cadence)进行PCB布局布线,确保信号完整性和电磁兼容性。
原型开发:制作硬件原型,进行焊接、调试和测试。
硬件调试:使用示波器、逻辑分析仪等工具调试硬件,解决信号干扰、电源噪声等问题。
和软件工程师联调:确保硬件和软件的兼容性,提供硬件支持。
文档编写:撰写设计文档、测试报告等,进行功能、性能和可靠性测试,确保产品符合标准。
3.1.2 技能要求
硬件基础:掌握电路三件套(基础电路、数电、模电)、信号处理等知识。这个电子信息工程的同学应该不陌生,基本电子信息工程的出来就是干硬件工程师。
EDA工具:熟练掌握Altium Designer、Cadence、OrCAD等设计工具。画板子的软件肯定要会玩。
嵌入式系统知识:了解常用的处理器架构(如ARM、MIPS)和外设接口(如I2C、SPI、UART)。
调试技能:熟练使用示波器、逻辑分析仪等调试工具。
接下来的我不确定要不要掌握:
编程能力:具有C语言编程能力,能编写底层驱动和固件。
3.1.3 学习建议
硬件我也不会,给不了建议,只能说把大学的专业课学好,自己多焊焊板子,如果有大佬想给菜鸟们建议可以私信我,我把文章更新一下,最好是学习路线和踩坑经验什么的都讲讲,如果有专门的文章也可以推荐给我,我把链接贴上来。
3.2 嵌入式单片机
单片机,它是单芯片微型的计算机,只能跑些简单的C语言程序,做一些裸机开发和rtos轻量级实时操作系统(最小操作系统)。
单片机的定位是开发中低端智能化产品,目前应用的领域比如说,电源管理相关开发、电池管理BMS相关开发、电驱动运动控制相关开发、电控系统ecu相关开发、无线解决方案及无线通信技术相关开发。正常来说,单片机的岗位要多,但是单片机职业天花板也低。现在很多都是应用异构多核的开发方式。
单片机也会跟硬件打交道,所以也要懂一些硬件,适合一些专业课有讲硬件的同学。
3.2.1 主要职责
硬件设计及开发:负责MCU相关的硬件电路设计,包括原理图绘制、PCB布局及元器件选型(如MCU、ADC/DAC、电源模块等)。优化硬件性能,确保低功耗、高可靠性和电磁兼容性(EMC)。
软件开发:开发业务逻辑代码,实现传感器数据采集、外设控制、通信交互等功能。编写底层驱动(如GPIO、定时器、ADC、PWM)及通信协议栈(UART、SPI、I2C、CAN)。(这句话不确定)
硬件调试:协调软硬件联调,解决通信异常、时序冲突等兼容性问题。使用示波器、逻辑分析仪、JTAG调试工具定位硬件故障或软件缺陷。
3.2.2 技能要求
硬件基础:熟悉数字/模拟电路设计,能独立完成原理图设计及PCB绘制(Altium Designer/Cadence);了解EMC设计规范。这些虽然看着跟硬件工程师一样,但是懂一点就行。
编程能力:要会C语言。
开发工具:熟练使用Keil、IAR、STM32CubeMX等IDE。
通信协议:深入理解常见协议(如Modbus、CANopen),掌握无线技术(BLE、LoRa、NB-IoT)。初学者了解些有好处。
系统:要会rtos系统,常见的就是freertos和rtt,现在越来越多的公司用rtt了,建议去玩玩。
3.2.3 学习建议
路线:C语言 --> 数据结构 --> 51 --> 32 --> rtos -->做项目
如果时间急可以不学51,毕竟是上个世纪的产物了,但是直接学32可能有点难。时间不急的话推荐学一下51.
学习资源:b站大学(江浙大的视频,无数牛马看过的课很经典),正点原子(有免费课程买个板子就能玩)、野火(没看到有人推荐)
3.3 嵌入式linux
Linux的定位是高端产品的研发。相对来说岗位比单片机少,这个其实也是分城市的,比如深圳linux跟单片机都很多,但是到了二线城市单片机就相对来说多一些。
3.3.1 主要职责
底层:负责嵌入式Linux系统移植(如ARM、MIPS架构),包括Bootloader(U-Boot)适配、内核(Kernel)裁剪与配置、设备树(Device Tree)编写。
驱动:开发外设驱动(如摄像头、触摸屏、传感器)及总线驱动(SPI、I2C、PCIe)。调试内核崩溃(Oops)、内存泄漏、DMA冲突等底层问题,优化驱动性能与稳定性。
应用:开发用户态应用程序(C/C++/Python),实现数据采集、通信协议(MQTT、HTTP)或AI推理。集成中间件(如数据库、Web服务器)或开源框架(ROS、GStreamer)支持多媒体或机器人应用。
3.3.2 技能要求
底层
操作系统原理:深入理解Linux内核架构(进程调度、内存管理、文件系统、网络协议栈),熟悉内核模块开发与调试。
开发语言:一般底层编程都是使用C语言,掌握shell脚本。
工具链与框架:熟悉使用交叉编译工具链(Makefile、CMake、gcc)熟悉嵌入式构建系统(Yocto、Buildroot、OpenEmbedded)。掌握调试工具(GDB、KGDB、JTAG)及性能分析工具(perf、valgrind)。
驱动
熟悉设备驱动模型(字符设备、平台设备、设备树),能独立开发并调试复杂外设驱动。
了解硬件原理(如DDR时序、中断控制器),能配合硬件工程师分析信号完整性(SI/PI)问题。
应用(其实这部分是从我简历里面抠出来的,懒得想,上面底层和驱动让我掉了好几根头发)
熟悉C语言、C++(C语言一定要掌握)。
熟悉常见的数据结构和算法。
熟悉Linux操作系统,熟练掌握Linux基本命令及操作。
熟悉Linux系统编程,了解进程、线程间的管理及通信,熟悉多线程应用开发。
熟悉Linux网络编程,socket网络编程等。
熟悉Makefile、shell脚本的编写和使用。
熟悉TCP/IP 协议,MQTT协议,HTTP协议等。
熟悉SQLlite 数据库的开发。
3.3.3 学习建议
路线:C语言 --> 数据结构 --> 51 --> 32 --> linux应用 --> linux驱动 --> linux内核
一般应届生学到linux应用就可以去找嵌入式linux应用的岗位了,驱动甚至内核你敢说你会企业也不敢相信你会,只有真正的大哥才有可能在刚毕业的时候学透。一般来说刚进公司都是干应用,干个三到五年公司可能会让你去学驱动让你慢慢的从应用从驱动岗位走。
学习资源同单片机也是,b站、正点原子、野火。至于培训机构其实没必要报,虽然我报了但是我感觉在校大学生完全可以自学,已经工作的人可以找个价格低的靠谱的机构甚至买个正点原子的板子自己学就行。培训机构我认为最大的两点好处就是,1.有人给你答疑让你不会卡太久,但是你遇到的问题大部分网上或者ai就可以帮你解答就是慢点。2.可以督促你学习,对于自学能力强的没啥用。