☰
嵌入式选软还是硬?五个维度对比与学习路线全解析
2026/10/2 1:03:39 网站建设 项目流程

1. 先搞清楚嵌软和嵌硬到底在干什么

每年三四月份,实验室里总有一批大三的学弟学妹跑来问我同一个问题:“学长,我想做嵌入式,但嵌软和嵌硬到底选哪个?”这个问题我听了不下五十遍,每次都得从头讲一遍。网上那些“嵌入式学习路线”的帖子翻来覆去就是画一张大图,从C语言到Linux驱动到ARM架构,看完更迷糊了。今天我就把这事儿彻底讲透,从日常工作内容、技能栈、薪资天花板、入行难度、职业路径五个维度拆开揉碎,让你看完能直接做决定。

先说一个最容易被混淆的概念:嵌软和嵌硬不是两个平行的岗位,而是嵌入式产品开发链条上的两个环节。打个比方,做一款智能音箱,嵌硬工程师负责选主控芯片、画原理图、布PCB、调电源树、过EMC认证;嵌软工程师负责写驱动、移植系统、做应用层逻辑、优化功耗。两个人坐在同一间办公室,但每天打开的软件、看的文档、用的工具完全不一样。

我见过太多人把“嵌入式”当成一个岗位来理解,结果面试的时候被问到“你做过哪些嵌入式项目”,张口就说“我用STM32点了个灯”,面试官直接无语。点灯这件事,嵌硬的人关心的是GPIO的驱动电流够不够、上拉电阻选多大、LED的压降是多少;嵌软的人关心的是寄存器怎么配、时钟树怎么初始化、中断优先级怎么设。同一个现象,两个视角,这就是本质区别。

那为什么会有“选哪个”的纠结?因为大部分高校的课程设置是混在一起的。单片机原理与应用、嵌入式系统设计、ARM体系结构,这些课既讲硬件也讲软件,考试考的是概念,实验做的是开发板。学生做完一个温湿度采集的项目,既写了C代码又连了传感器,就以为自己软硬都懂了。实际上,你写的C代码只是调用了库函数,你连的传感器只是插了几根杜邦线。真正的嵌硬要画四层板,真正的嵌软要改内核驱动。这两件事的门槛和天花板完全不同。

我个人的判断标准很简单:如果你看到电路图就头疼,看到寄存器手册就兴奋,选嵌软;如果你看到代码就犯困,看到示波器波形就想研究,选嵌硬。但这个判断太粗糙了,下面我展开讲。

1.1 嵌硬工程师的一天到底在干什么

嵌硬这个方向,细分下来至少有四个子方向:数字电路设计、模拟电路设计、PCB Layout、硬件测试与认证。刚入行的嵌硬工程师通常从原理图设计和PCB Layout做起,资深之后转向系统架构和信号完整性分析。

我拿一个真实项目举例。去年帮一个朋友的公司做一款工业环境监控设备,主控用的是STM32MP157,外挂DDR3、eMMC、千兆PHY、RS485收发器、隔离电源。嵌硬工程师的工作流程是这样的:

第一步,需求分析与器件选型。主控选型要考虑算力、功耗、封装、供货周期、温度等级。工业级要求-40到85度,商业级只能0到70度,价格差三倍。DDR3选三星还是镁光,要看批次一致性和采购渠道。这一步就要花两周,每天对着Digi-Key和立创商城的参数表对比。

第二步,原理图设计。用Cadence OrCAD或者Altium Designer画图。电源树要算功耗预算,每个LDO和DCDC的输入输出电容要按datasheet推荐值配,上拉下拉电阻要算阻值,晶振要算负载电容。我见过一个新手把32.768kHz晶振的负载电容选成22pF,结果RTC每天慢十几秒,查了一周才发现是电容选错了。

第三步,PCB Layout。这是嵌硬最核心的技能之一。DDR3要走等长线,误差控制在±50mil以内;差分对要走阻抗匹配,USB差分线90欧姆,以太网差分线100欧姆;电源平面要分割,模拟地和数字地要单点连接;过孔要算载流能力,1盎司铜厚0.5mm孔径的过孔大概能过1A电流。这些规则不是背出来的,是踩坑踩出来的。

第四步,打样与调试。板子回来之后,先目检,再测电源阻抗,再上电测各路电压。然后用示波器看晶振起振、看复位时序、看DDR眼图。这一步最考验经验,因为很多问题不是原理错误,而是布局布线导致的信号完整性问题。比如DDR跑不稳,可能是走线太长、参考平面不完整、端接电阻位置不对。

第五步,EMC测试与整改。产品要过CE、FCC认证,辐射发射和传导发射超标是家常便饭。整改手段包括加共模电感、加磁珠、加屏蔽罩、改Y电容。我印象最深的一次,一个千兆网口辐射超标6dB,最后发现是RJ45连接器的金属外壳没接地,飞了一根线到机壳地,直接降了10dB。

你看,嵌硬的工作流是从抽象到具体,从图纸到实物。你每天打交道的对象是芯片、电阻、电容、连接器、PCB板厂、贴片厂、测试机构。你的成就感来自于“板子一次点亮”和“认证一次通过”。

1.2 嵌软工程师的一天到底在干什么

嵌软的分支更多,粗略分至少有:裸机开发、RTOS开发、Linux驱动开发、Linux应用开发、Android BSP开发、嵌入式AI部署。不同分支的技能栈差异巨大,但底层逻辑是相通的。

还是拿那个工业环境监控设备举例。嵌软工程师的工作流程是这样的:

第一步,Bootloader移植。STM32MP157用的是TF-A加U-Boot。要改DDR初始化参数,要配启动介质顺序,要加环境变量。这一步的难点在于DDR参数是芯片原厂给的,但板子是自己画的,时序可能对不上,需要反复调。

第二步,内核移植与驱动开发。Linux内核版本选5.10还是6.1,要看芯片原厂的支持情况。设备树要写,引脚复用要配,时钟要配,中断要配。外设驱动包括RS485、千兆PHY、eMMC、DDR、看门狗、RTC。每个驱动都要读芯片手册和内核文档,改完编译,烧录,测试,循环往复。

第三步,根文件系统构建。用Buildroot或者Yocto。要裁剪busybox,要配systemd或者init脚本,要加库文件,要配网络服务。Buildroot相对简单,Yocto更灵活但学习曲线陡峭。

第四步,应用层开发。用C或者C++写业务逻辑,用Qt写界面,用SQLite存数据,用MQTT上报云端。如果涉及AI,还要用TensorFlow Lite或者ONNX Runtime部署模型。

第五步,系统优化与稳定性测试。启动时间优化、内存占用优化、功耗优化、压力测试、老化测试。我做过一个项目,要求启动时间小于3秒,最后把内核裁剪到2MB,根文件系统用squashfs,启动脚本并行化,才勉强达标。

嵌软的工作流是从底层到上层,从驱动到应用。你每天打交道的对象是代码、编译器、调试器、日志、协议文档。你的成就感来自于“驱动跑通了”和“系统稳定运行30天无重启”。

1.3 两个岗位的技能栈对比

光说工作内容还不够,我把两个岗位的技能栈列成表格,你对照自己的情况打分。

技能维度嵌硬工程师嵌软工程师
核心语言无(但要看懂C)C、C++、偶尔Python
核心工具Altium/Cadence、示波器、频谱仪GCC、GDB、Git、Makefile/CMake
核心知识模电、数电、信号完整性、电源设计操作系统、数据结构、计算机网络
文档能力芯片手册、IPC标准、EMC规范内核文档、协议规范、API手册
调试手段示波器、万用表、逻辑分析仪Printf、GDB、strace、perf
数学要求中等(阻抗计算、热计算)中等(算法复杂度、时序分析)
入行门槛较高(需要硬件条件)中等(一台电脑即可)
薪资天花板较高(资深硬件专家稀缺)较高(资深内核/系统专家稀缺)

这张表不是绝对的,但能看出一个规律:嵌硬的入行门槛更高,因为你需要实验室环境、需要买器件、需要打板子;嵌软的入行门槛相对低,一台电脑就能开始学。这也是为什么很多学生最后选了嵌软——不是不想做嵌硬,是条件不允许。

但门槛高不代表天花板高。我认识一个做射频硬件的工程师,十年经验,年薪七位数,公司抢着要。也认识一个做Linux内核的工程师,八年经验,同样年薪七位数。两个方向做到顶尖,收入都不差。关键是你能不能做到顶尖。

2. 选嵌软还是嵌硬,先问自己四个问题

上一节把两个岗位的日常拆开了,但我知道你还是没做决定。因为“知道他们在干什么”和“知道自己适合干什么”是两码事。下面我用四个问题帮你做决策,每个问题都给出判断标准和实际案例。

2.1 问题一:你的数学和物理基础怎么样

嵌硬对物理的要求更高。不是说要你会解偏微分方程,而是说你要有物理直觉。什么叫物理直觉?看到一条走线,你能大概判断它的寄生电感是多少;看到一个电源方案,你能估算它的效率曲线;看到一个散热片,你能算它的热阻。

我举个例子。一个DC-DC降压电路,输入12V,输出5V,电流2A。开关频率500kHz,电感选4.7uH。问:电感的纹波电流是多少?

计算公式是:ΔI = (Vout × (1 - Vout/Vin)) / (fsw × L)

代入:ΔI = (5 × (1 - 5/12)) / (500000 × 4.7e-6) = (5 × 0.583) / 2.35 = 1.24A

也就是说,电感电流在2A的基础上上下波动1.24A,峰值达到2.62A。如果电感的饱和电流只有2.5A,就会饱和,效率暴跌,甚至烧毁。

这种计算在嵌硬工作中每天都要做。如果你看到公式就烦,看到数字就晕,嵌硬会让你很痛苦。

嵌软对数学的要求不同。你不需要算电感,但你需要理解算法复杂度和时序逻辑。比如一个链表操作,你要知道插入是O(1),查找是O(n);一个中断服务函数,你要知道它不能睡、不能等、不能调用可能阻塞的函数。这些不需要高深数学,但需要清晰的逻辑思维。

我见过数学系转嵌软的,做得很好,因为逻辑能力强。也见过物理系转嵌硬的,做得很好,因为物理直觉好。但反过来,数学系做嵌硬、物理系做嵌软,也不是不行,只是要补的课更多。

判断标准:如果你大学物理和电路分析学得轻松,选嵌硬有优势;如果你数据结构和高数觉得还行,选嵌软有优势。如果两门都头疼,那要看你更愿意补哪一门。

2.2 问题二:你更喜欢和实物打交道还是和代码打交道

这个问题听起来很虚,但实际影响很大。嵌硬的工作成果是看得见摸得着的。你画的板子,贴片回来,拿在手里,沉甸甸的,插上电,灯亮了,那种满足感很直接。但代价是,你要等。等器件到货、等PCB打样、等贴片、等测试。一个周期下来,少则两周,多则一个月。如果板子有问题,改一版,又是两周。

嵌软的工作成果是看不见的。你写的代码,编译成二进制,烧到板子里,跑起来了,但你看不到它。你只能通过日志、通过现象、通过调试器来确认它在工作。好处是,改代码很快,编译几分钟,烧录几秒钟,立刻验证。坏处是,有些bug极其隐蔽,比如内存泄漏,跑三天才崩,你得花一周去定位。

我个人的经验是:如果你受不了等待,选嵌软;如果你受不了抽象,选嵌硬。嵌硬的反馈周期长,但反馈明确;嵌软的反馈周期短,但反馈模糊。

还有一个现实因素:嵌硬需要场地和设备。示波器、电源、万用表、焊台、风枪,这些加起来至少几千块。如果你在学校,实验室有,那没问题;如果你在家自学,成本不低。嵌软只需要一台电脑,装个虚拟机,跑个Linux,就能开始学。

2.3 问题三:你的职业目标是什么

嵌入式行业的职业路径大致分三条:技术专家路线、技术管理路线、产品/创业路线。

技术专家路线:嵌硬做到资深,可以成为信号完整性专家、电源专家、射频专家、EMC专家。这些岗位在芯片原厂、通信设备厂、汽车电子厂很吃香,薪资对标互联网高级工程师。嵌软做到资深,可以成为内核专家、驱动专家、系统架构师、嵌入式AI专家。这些岗位在手机厂、汽车厂、AI芯片公司很吃香,薪资同样对标互联网。

技术管理路线:嵌硬转项目经理、硬件总监;嵌软转技术经理、研发总监。管理路线要求你两个方向都懂一点,但不需要精通。我带过一个团队,硬件负责人和软件负责人每天吵架,就是因为互相不理解对方的难处。如果你两个方向都做过,协调起来会顺畅很多。

产品/创业路线:嵌硬创业做方案公司、做模组、做开发板;嵌软创业做软件服务、做算法授权、做SaaS。创业对综合能力要求更高,但如果你只懂一个方向,也可以找合伙人互补。

我认识一个学长,嵌硬出身,做了五年硬件,转去做产品经理,现在在一家物联网公司负责整机定义。他说:“懂硬件让我知道什么能做,懂软件让我知道什么好做,两者结合让我知道什么值得做。”这句话我记了很久。

2.4 问题四:你现在的条件允许你选哪个

这个问题最现实。我见过太多人一腔热血要学嵌硬,结果连个示波器都没有,学了一半放弃了。也见过很多人觉得嵌软简单,结果连Linux都没装过,命令行都不熟,学了两周就放弃了。

如果你现在是大二大三,学校有实验室,有学长带,有项目做,那优先选嵌硬。因为嵌硬的机会窗口更窄,过了学校这个阶段,很难再有免费的实验室资源和试错机会。嵌软可以自学,网上资料多,一台电脑就能搞。

如果你已经大四或者毕业了,没有实验室条件,那优先选嵌软。因为嵌软的入门路径更清晰,学习成本更低,找工作更容易。等工作稳定了,再补硬件知识也不迟。

如果你是在职转行,有家庭有房贷,那优先选嵌软。因为嵌软的培训周期短,一般六个月到一年可以入行;嵌硬至少一年半到两年,而且前期薪资可能更低。

我个人的建议:如果你条件允许,先学嵌软,再补嵌硬。因为嵌软的知识体系更标准化,学习路径更清晰,而且嵌软工程师懂一点硬件,在职场上非常加分。反过来,嵌硬工程师懂一点软件,也很加分,但学习曲线更陡。

3. 嵌软和嵌硬的学习路线怎么走

不管你选哪个方向,学习路线都是绕不开的。网上那些“嵌入式学习路线”的图,动辄几十个知识点,看着就劝退。我按自己的经验,把路线精简成三个阶段,每个阶段给出明确的目标和验收标准。

3.1 嵌软学习路线:从裸机到Linux

第一阶段:C语言与单片机基础(1-2个月)

目标:能用C语言写一个完整的裸机程序,理解寄存器操作、中断、定时器、串口通信。

具体内容:

  • C语言核心:指针、结构体、链表、位操作、内存管理。不要只看书,要写代码。我推荐做一个小项目:用链表实现一个简单的任务调度器。
  • 单片机选型:STM32F103或者GD32F103,资料多,便宜。不要一上来就选太新的芯片,踩坑没人帮你。
  • 外设驱动:GPIO、UART、TIM、ADC、I2C、SPI。每个外设都要自己写寄存器版本,不要只用库函数。
  • 调试工具:学会用ST-Link、J-Link,学会用逻辑分析仪看时序。

验收标准:能独立完成一个“温湿度采集+OLED显示+串口上报”的项目,代码量500行以上,能解释每一行代码的作用。

第二阶段:RTOS与Linux基础(2-3个月)

目标:理解实时操作系统的调度原理,能在Linux上写简单的应用程序。

具体内容:

  • RTOS选型:FreeRTOS或者RT-Thread。理解任务、信号量、消息队列、互斥锁、事件组。
  • Linux基础:装Ubuntu,学命令行,学Shell脚本,学Makefile,学Git。
  • Linux系统编程:文件IO、进程、线程、IPC、Socket。写一个多线程的TCP服务器。
  • Linux内核基础:理解内核启动流程、设备树、字符设备驱动框架。

验收标准:能在FreeRTOS上写一个多任务的数据采集系统;能在Linux上写一个基于Socket的客户端-服务器程序;能写一个简单的字符设备驱动。

第三阶段:Linux驱动与项目实战(3-6个月)

目标:能独立完成一个嵌入式Linux项目的系统集成。

具体内容:

  • Bootloader:U-Boot移植,理解启动流程。
  • 内核移植:配置、编译、烧录,设备树编写。
  • 驱动开发:GPIO、I2C、SPI、UART、USB、网络驱动。
  • 根文件系统:Buildroot构建,系统裁剪。
  • 应用开发:Qt界面、数据库、网络通信、多线程。
  • 项目实战:做一个完整的物联网网关,包括数据采集、本地存储、云端上报、远程升级。

验收标准:能独立完成一个嵌入式Linux项目的全流程开发,从硬件选型到系统集成到应用开发。

3.2 嵌硬学习路线:从理论到实战

第一阶段:电路基础与EDA工具(2-3个月)

目标:能看懂原理图,能用EDA工具画简单的PCB。

具体内容:

  • 电路分析:基尔霍夫定律、戴维南定理、RC/RL电路、谐振电路。
  • 模拟电路:二极管、三极管、MOSFET、运放、LDO、DCDC。
  • 数字电路:逻辑门、触发器、计数器、总线协议。
  • EDA工具:Altium Designer或者KiCad。从画一个最小系统板开始。
  • 焊接与调试:学会用烙铁、风枪、示波器、万用表。

验收标准:能独立画一块STM32最小系统板,包括电源、晶振、复位、下载接口、LED、按键。打样回来能点亮。

第二阶段:高速电路与信号完整性(3-6个月)

目标:能设计四层板,理解信号完整性问题。

具体内容:

  • 传输线理论:特性阻抗、反射、串扰、地弹。
  • 差分信号:USB、以太网、HDMI、MIPI、LVDS。
  • 电源完整性:去耦电容、电源平面、目标阻抗。
  • DDR布线:等长、阻抗匹配、端接。
  • EMC基础:辐射发射、传导发射、静电防护。

验收标准:能设计一块带DDR3和千兆网口的四层板,能通过基本的信号测试。

第三阶段:项目实战与认证(6-12个月)

目标:能独立完成一个完整的硬件项目,从需求到量产。

具体内容:

  • 需求分析:功能定义、性能指标、成本预算。
  • 器件选型:主控、电源、接口、连接器。
  • 原理图设计:模块化设计、可测试性设计。
  • PCB Layout:布局、布线、铺铜、丝印。
  • 打样与调试:BOM整理、采购、贴片、测试。
  • EMC整改:定位问题、加器件、改布局。
  • 量产导入:DFM检查、测试工装、生产文件。

验收标准:能独立完成一个硬件产品的全流程开发,包括认证和量产。

3.3 两个方向都绕不开的底层能力

不管你选哪个方向,有三项能力是共通的,而且越早掌握越好。

第一,英文文档阅读能力。芯片手册、协议规范、内核文档,大部分是英文的。你不需要英语六级,但你需要能快速找到关键信息。我见过很多人一看到英文文档就找中文翻译,结果翻译质量参差不齐,反而浪费时间。我的建议是:硬着头皮读,读多了就快了。

第二,调试与排查能力。这是区分新手和老手的关键。新手遇到问题就百度,老手遇到问题先分析。分析的方法论是:先假设,再验证,逐步缩小范围。比如板子不启动,先测电源,再测晶振,再测复位,再测启动模式,一步步排除。

第三,版本管理与文档习惯。代码用Git,硬件用版本号。每次改板都要记录改了什么、为什么改。我见过一个团队,硬件改了五版,没有版本记录,最后量产的时候发现用的是第二版的BOM,损失几十万。这种坑,踩一次就够了。

4. 实际项目中的软硬协作与常见坑

选定了方向,学完了路线,接下来就是实战。但实战中最大的挑战不是技术本身,而是软硬协作。我做过十几个嵌入式项目,几乎每个项目都在软硬交界处出过问题。这一节我分享几个典型案例,帮你提前避坑。

4.1 软硬接口定义不清导致的返工

案例:一个数据采集项目,硬件工程师选了ADS1256这款24位ADC,SPI接口。软件工程师拿到板子后,发现SPI时钟频率上不去,采样率只有理论值的十分之一。

排查过程:

  • 软件工程师以为是驱动问题,改了SPI配置,没用。
  • 硬件工程师以为是走线问题,飞线短接,还是没用。
  • 最后查datasheet发现,ADS1256的SPI时钟极性(CPOL)和相位(CPHA)是固定的,而软件工程师用的是默认配置,不匹配。

解决方案:软件工程师改SPI模式,问题解决。

这个坑的本质是:硬件工程师选型时没有把接口时序要求明确告诉软件工程师,软件工程师也没有主动去查datasheet确认。如果项目启动时开一次接口评审会,这个问题根本不会发生。

我的经验是:硬件选型完成后,必须输出一份接口定义文档,包括引脚定义、时序图、电平标准、上电时序、复位时序。软件工程师拿到文档后,逐条确认,有疑问当场提出。这份文档不需要很正式,一个Excel表格就行,但必须有。

4.2 电源时序问题导致的启动失败

案例:一个多核处理器项目,主控是i.MX8,外挂DDR4、eMMC、WiFi模组、4G模组。板子回来之后,有时候能启动,有时候不能,概率大概50%。

排查过程:

  • 先测各路电源,电压都正常。
  • 再测上电时序,发现DDR电源和核心电源几乎同时上电,而datasheet要求核心电源先上,DDR后上,间隔至少10ms。
  • 调整电源芯片的使能顺序,问题解决。

这个坑的本质是:硬件工程师没有仔细看处理器的上电时序要求,软件工程师也没有在启动代码里加上电检测。如果软件工程师在Bootloader里加一个电源状态检查,发现异常就报错,至少能快速定位问题。

我的经验是:对于多电源系统,一定要做上电时序设计。方法有两种:一是用电源管理芯片(PMIC)的时序控制功能;二是用GPIO控制各路电源的使能,软件里加延时。前者更可靠,后者更灵活。

4.3 驱动与硬件不匹配导致的性能问题

案例:一个视频采集项目,主控是RK3399,摄像头是MIPI接口。硬件工程师按照参考设计画了板子,软件工程师移植了驱动,但预览画面总是卡顿,帧率只有15fps,目标是30fps。

排查过程:

  • 先测MIPI时钟,发现时钟频率只有目标值的一半。
  • 查设备树,发现MIPI时钟配置错了,用的是默认值。
  • 改设备树,问题解决。

这个坑的本质是:软件工程师直接用了参考设计的设备树,没有根据实际硬件修改。参考设计用的是另一款摄像头,时钟要求不同。如果软件工程师在移植驱动前,先看一下摄像头的datasheet,确认时钟要求,这个问题可以避免。

我的经验是:设备树不是抄的,是算的。每个时钟频率、每个引脚复用、每个电压域,都要根据实际硬件确认。我习惯在设备树里加注释,写明每个参数的来源和计算过程,方便后续维护。

4.4 常见问题速查表

问题现象可能原因排查方法解决方案
板子不启动电源异常测各路电压检查电源芯片使能、反馈电阻
板子不启动晶振不起振示波器测晶振检查负载电容、起振电阻
串口无输出波特率不对测波特率检查时钟配置、分频系数
串口乱码地线干扰测地线加共模电感、改走线
DDR不稳定时序不对跑memtest调DDR参数、改走线
网口不通PHY配置错测MDIO检查PHY地址、复位时序
USB不识别差分线阻抗不对测眼图改走线、加端接
屏幕不亮背光电路问题测背光电压检查升压芯片、PWM调光
触摸不灵I2C地址冲突扫描I2C改地址、加上拉
系统重启看门狗误触发查看门狗日志改喂狗策略、加调试信息

这张表是我这些年踩坑的总结,不一定全面,但覆盖了80%的常见问题。你可以在实际项目中对照使用,遇到新问题再补充。

5. 关于嵌入式行业的几个现实认知

最后这一节,我想聊几个比较现实的话题。这些话题在学校的课堂里不会讲,但在实际工作中很重要。

5.1 嵌入式不是低薪行业,但薪资分化严重

网上经常有人说“嵌入式薪资低”,这话对也不对。低的是只会点灯和调库的初级工程师,高的是能解决复杂系统问题的资深工程师。

我拿招聘网站的数据举例。一个应届生,会STM32、会FreeRTOS、做过一两个项目,在一线城市大概8-12K。工作三年,会Linux驱动、能独立做项目,大概15-25K。工作五年,会系统架构、能带团队、懂行业方案,大概25-40K。工作八年以上,在某一个细分领域有深度积累,比如汽车电子、医疗电子、工业控制,40-60K甚至更高。

对比互联网,嵌软和嵌硬的起薪确实低一些,但职业寿命更长。互联网的35岁危机在嵌入式行业不明显,因为嵌入式经验的价值随时间增长,而不是衰减。我认识好几个45岁以上的嵌入式工程师,依然在一线写代码、画板子,收入不菲。

5.2 嵌软和嵌硬不是对立的,融合是趋势

现在越来越多的岗位要求软硬兼通。比如嵌入式系统架构师,既要懂硬件选型,又要懂软件架构;物联网方案工程师,既要能画板子,又要能写云端对接;汽车电子工程师,既要懂CAN总线硬件,又要懂AUTOSAR软件。

我个人的判断是:未来五年,纯嵌硬和纯嵌软的岗位会减少,软硬兼通的岗位会增加。因为芯片集成度越来越高,硬件设计越来越简单,软件复杂度越来越高。但硬件设计不会消失,因为总有人要画板子、要调信号、要过认证。只是这个岗位需要的人更少,但要求更高。

所以我的建议是:先精通一个方向,再补另一个方向的基础。不要一开始就追求软硬兼通,那样容易两头都不精。先在一个方向上做到能独立干活,再花时间补另一个方向的知识,这样最稳妥。

5.3 嵌入式AI是新的增长点

最近两年,嵌入式AI的岗位需求增长很快。什么是嵌入式AI?就是在资源受限的设备上跑AI模型,比如在单片机上跑关键词识别,在ARM Cortex-A上跑目标检测,在NPU上跑大模型推理。

这个方向对嵌软工程师更友好,因为核心是模型部署和优化,不需要画板子。但如果你懂硬件,知道NPU的算力、内存带宽、功耗限制,你能做得更好。

我去年帮一个客户部署了一个人脸识别模型在RK3588上,从模型转换到量化到部署到优化,花了两个月。过程中最大的挑战不是模型本身,而是内存带宽瓶颈。NPU算力够,但DDR带宽不够,导致推理速度上不去。最后通过模型分片、内存复用、算子融合,才把帧率从15fps提到30fps。

这个经历让我意识到:嵌入式AI不是单纯的软件问题,而是软硬协同问题。如果你只懂软件,你只能调API;如果你懂硬件,你能从系统层面优化。

5.4 给在校生的几点建议

如果你还在学校,我有几个建议:

第一,尽早确定方向,但不要锁死。大二可以两个方向都试试,大三选定一个深入,大四做毕业设计的时候可以尝试融合。

第二,项目经验比证书重要。面试官不关心你考了多少证,关心你做过什么项目、遇到什么问题、怎么解决的。我面试的时候,最喜欢问“你遇到的最难的问题是什么,怎么解决的”,这个问题能看出一个人的真实水平。

第三,学会用Git和写文档。这是职场基本素养,但很多学生不会。我见过一个实习生,代码写得不错,但不会用Git,每次改代码都复制一份,最后文件夹里有几十个版本,根本分不清哪个是最终版。

第四,英语要过关。不是说要考托福雅思,而是说能读懂英文文档。嵌入式行业的一手资料都是英文的,等中文翻译出来,可能已经过时了。

第五,保持好奇心。嵌入式技术更新很快,从8位机到32位机,从裸机到RTOS到Linux,从单核到多核,从CPU到NPU。只有保持好奇心,才能跟上变化。

5.5 给转行者的几点建议

如果你已经工作,想转行嵌入式,我有几个建议:

第一,评估时间成本。嵌软至少六个月,嵌硬至少一年。如果你有家庭有房贷,要慎重考虑。

第二,利用现有优势。如果你原来是做Java的,转嵌软有优势,因为编程思维是相通的。如果你原来是做机械的,转嵌硬有优势,因为画图和空间思维是相通的。

第三,从项目入手。不要从头学理论,直接做一个项目,遇到问题再补理论。比如你想学Linux驱动,就买一块开发板,从点灯开始,一步步做到完整项目。

第四,找圈子。嵌入式行业很吃经验,很多坑是别人踩过的。加入一些技术社区,多问多交流,能少走很多弯路。

第五,降低预期。转行初期薪资可能不如原来,但嵌入式是长跑,三五年后差距会拉开。

我认识一个朋友,原来是做土木工程的,30岁转行嵌入式,从单片机开始学,现在在一家汽车电子公司做BSP开发,薪资比原来高了一倍。他的经验是:不要急,每天进步一点点,一年后回头看,已经走了很远。

5.6 关于“嵌入式八股”和面试准备

最后聊一下面试。嵌入式面试确实有“八股文”,但和互联网的八股不太一样。互联网八股偏算法和框架,嵌入式八股偏底层原理和实战经验。

常见的嵌入式面试题包括:

  • C语言:指针、内存对齐、位操作、volatile、const、static。
  • 操作系统:进程与线程、调度算法、同步机制、内存管理。
  • 计算机网络:TCP/IP、Socket、HTTP、MQTT。
  • 硬件基础:上拉下拉、推挽开漏、I2C时序、SPI模式。
  • Linux:启动流程、设备树、驱动模型、中断处理。
  • 项目经验:你做过什么、遇到什么困难、怎么解决。

准备面试的时候,不要死记硬背,要理解原理。比如问“volatile的作用”,不要只背“防止编译器优化”,要能举例说明什么场景下需要volatile,什么场景下不需要。

我面试别人的时候,最喜欢问“你做过的最有挑战的项目是什么”,然后顺着项目往下问,问细节、问难点、问替代方案。如果你真的做过,你能答上来;如果你只是背的,很快就会露馅。

所以,最好的面试准备就是认真做项目。项目做多了,面试自然有话说。

嵌入式这个行业,说大不大,说小不小。它不像互联网那样光鲜,但它是实实在在支撑着现代社会的底层技术。你用的手机、开的汽车、坐的地铁、用的电表,里面都有嵌入式系统。选嵌软还是嵌硬,没有绝对的对错,只有适不适合。希望这篇文章能帮你做出自己的判断。

如果你问我个人怎么选,我会说:先选一个能让你入行的方向,再选一个能让你走远的方向。入行靠技能,走远靠热爱。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询