拓冰建站拓冰建站
首页 / 资讯中心 / 正文

嵌入式学习2个月就放弃?不是难,而是你的路线错了

说实话我这几天刷到好几个类似的帖子标题差不多都是学了2个月嵌入式已退学警告大家别学这种句式。评论区吵成一锅粥有说嵌入式太难不是人学的有说这是劝退引流帖还有一群刚买了开发板的新人在那瑟瑟发抖。我做了十年嵌入式开发从51单片机一路折腾到ARM Linux带过的实习生也有十几个了看了这些帖子其实挺感慨的——2个月就退学的人大概率不是被嵌入式难跑的是被自己选的学习路线坑死的。这篇文章不打算劝退谁也不打算灌鸡汤。我想从一个过来人的角度把学2个月坚持不下去这件事彻底拆开揉碎看看问题到底出在哪以及如果你真的想学嵌入式正确的姿势应该是什么。1. 2个月退学的真相不是嵌入式难是你在用学Python的方式学嵌入式先说个扎心的观察我见过的所有2个月放弃嵌入式的人几乎都有一个共同特征——他们把嵌入式当成了一门编程语言来学而不是一套软硬件结合的工程系统。1.1 嵌入式不是学了就能写的它吃的是综合能力我在面试嵌入式软件工程师的时候经常遇到简历上写着熟悉C语言会STM32的候选人。等我真问起中断服务函数里能不能调用printfI2C通信的时序和波特率有什么关系为什么不建议在中断里做耗时操作的时候很多人就答不上来了。嵌入式开发和纯软件开发的本质区别在于它面对的不是一个抽象的执行环境而是一块具体的、有物理限制的芯片。你的代码跑在裸机上跑在实时操作系统里内存就那几百KBCPU主频就那几百兆赫兹外设时序一条都不能错。这些限制不像Java或Python那样有虚拟机帮你兜底错了直接死机、跑飞、硬件无响应。所以2个月退学的人大概率是死在了底层原理上——寄存器配置看不懂、时钟树理不清、中断优先级搞不明白、指针数组结构体绕晕了。这些东西绕不过去不像前端框架换一个还能继续写嵌入式基础不牢后面每一步都是瞎猜。1.2 现在很多新手教程把跑通demo包装成了学会嵌入式这是我觉得最坑的一环。现在的开发板厂商很卷几百块钱的板子送你一套2小时跑通的视频教程照着敲几行代码点几下鼠标板子上的LED就亮了屏幕就显示了串口就打印了。然后新手觉得自己会嵌入式了转头去看芯片手册、去看内核源码、去看RTOS发现自己啥也看不懂。这里我要说句实在话跑通demo和学会嵌入式之间的距离比从北京到上海还远。你点了个灯点亮的是厂商封装好的库函数背后寄存器怎么翻的、GPIO复用逻辑怎么走的、时钟门控怎么开的你一概不知。这就是为什么很多人学了2个月自信心先冲顶再崩盘——前期太顺了后期落差太大。2. 从电脑世界进入物理世界你们在两个维度里学习很多学嵌入式崩溃的人不是输在努力上而是输在思维模型没切换过来。写网页、写App、写后端服务你面对的是虚拟世界错了改代码就行最多崩溃重启。嵌入式不一样你写的每一行代码最终都是在操纵物理世界的电压、电流、时钟信号。2.1 你以为你在写代码其实你在伺候一块芯片第一次用万用表测电路、用示波器看波形、为了一根杜邦线接触不良查了三个小时的人应该能懂我的意思。嵌入式开发里硬件上的任何一个不确定性都会直接变成软件上的玄学Bug——代码逻辑明明没问题就是跑不出来最后发现是某个引脚虚焊了、电源纹波太大了、晶振起振不稳。这种问题在纯软件领域几乎不存在。所以很多从软件转过来的同学前两个月的心态会被反复击穿为什么这个现象和代码逻辑对不上为什么同一个程序这次能跑下次不能为什么我用Keil编译没问题换到GCC就报一堆错2.2 寄存器、中断、时序三座绕不过去的大山拿最基础的寄存器来说。STM32的GPIO要工作你得先打开对应的RCC时钟再配置MODER寄存器选模式再配置OSPEEDR选速度再配置PUPDR选上下拉。这还是在用标准库的前提下HAL库里一个HAL_GPIO_Init()就全封装好了。问题就出在这——封装得太好了。新手用HAL库点灯点完了确实很有成就感但脑子里对为什么灯会亮这件事是没有图的。等到学串口的时候USART的波特率怎么算的BRR寄存器怎么填的如果不去读参考手册根本搞不明白。再往深了中断的嵌套优先级、临界区保护、可重入函数每一个概念都是听课三分钟琢磨一整天的硬骨头。时序就更不用说了I2C的起始条件、停止条件、应答信号SPI的四种工作模式你光看时序图就能看睡着但看不懂就意味着你的传感器数据永远读不对查来查去最后发现是把CPOL和CPHA搞反了。2.3 按键抖动、看门狗、串口乱码硬件的差错是家常便饭嵌入式里有一种非常折磨新人的现象代码看着没问题但实际运行就是不对。按键一按串口打印出好几条数据——这是按键抖动没处理程序跑着跑着就死了按复位才能恢复——这是看门狗没喂串口打印全是大堆乱码——这是晶振频率和波特率不匹配或者电平反了。这些问题在2个月内几乎是躲不开的。每一类问题都要靠经验积累才能快速定位而刚入门的人往往是第一次遇到查资料都要查半天。所以2个月就想通嵌入式本身就是违背客观规律的期待。3. 工具链地狱环境搭建比写代码难十倍真的不是你的问题还有一个被严重低估的劝退点嵌入式开发工具链对新手极其不友好。3.1 软件环境Keil、CubeMX、GCC、交叉编译链、调试器驱动第一次用Keil的人光是破解、装包、下载芯片支持包就能折腾半天。Keil MDK正版要收费大多数学生用的都是社区流传的特殊版本装的时候杀毒软件还会杀几个文件装完打开工程还要选芯片型号忘了选或者选错了编译全报错。STM32CubeMX倒是免费但每次生成代码都要从网上拉取固件包网络慢的时候等得人想砸电脑。更别提如果你用的是国产芯片或者小众芯片IDE的兼容性、烧录工具、调试器的Configuration每一步都是坑交叉着挖。到了Linux嵌入式阶段这问题只会更严重。交叉编译工具链的版本和内核版本不匹配编译出来烧到板子上就Segmentation FaultTFTP、NFS、SSH服务配置不对文件传不上板子你连一个Hello World跑起来中间隔了虚拟机、网络、文件系统、权限设置任何一个环节出错报错信息都看不懂。3.2 硬件工具示波器、逻辑分析仪、万用表、可调电源我第一次带新人做项目时让他量一下板子上的3.3V电源对不对。他拿着万用表对着板子一顿戳说没电压啊。我过去一看表笔插在电流插孔上测的是电流万用表当然显示不出电压。这种小细节没人教就是会在前期反复消耗你的耐心。示波器就更不用说了探头上的×1和×10挡位、触发电平调不对、带宽限制没开都会让你怀疑自己测到的是不是假波形。很多2个月退学的人可能连一次完整的I2C波形都没抓过自然也就理解不了所谓的时序到底是什么意思。3.3 社区生态割裂搜一条报错先要学会分辨平台老手遇到报错很快能判断这是编译器的问题、链接脚本的问题还是硬件电路的问题。新手不一样他搜到一个STM32的报错点进去发现是IAR环境下的解决方案而自己用的是Keil搜到一个Linux驱动的报错点进去发现是Ubuntu 18.04的而自己用的是CentOS。这种生态割裂感是非常打击学习动力的。你会觉得自己连搜资料这个技能都没掌握事实上确实如此但这不是你的智商问题而是嵌入式本身就是一个高度碎片化的领域。4. 资料错位问题看视频都会动手就废的全过程分析我来梳理一下一个典型的2个月退学学员的完整心路历程你对照一下自己是不是也这样第1周信心满满。看了几十个视频了解嵌入式前景好工资高买的开发板到货装了Keil点了第一个LED觉得自己是天才。第2周开始学GPIO、串口、定时器。依葫芦画瓢配置寄存器跑通了但完全不知道为什么要配这些值。视频说什么就复制什么。第3~4周进入中断、PWM、ADC。开始吃力了。视频里老师讲得很快很多细节一笔带过你暂停了无数次去查资料但还是模模糊糊。第5~6周学I2C、SPI通信。接传感器、读数据照着驱动代码抄改改管脚发现读出来的数据飘忽不定要么0000要么FFFF。开始怀疑人生。第7~8周犹豫要不要继续。看别人的嵌入式项目视频觉得好厉害自己做个温湿度计都费劲。去搜嵌入式面试题发现八股文背不完数据结构算法不懂Linux也不会。崩盘放弃发帖劝退。这个路径里每一个环节都没有错——任务是正常的难度也是正常的问题出在线路的坡度上。嵌入式学习曲线不是一条30度的斜线而是一段一段的台阶。在台阶面前你靠看视频是迈不过去的必须要靠动手栽跟头才能冲上去。4.1 视频教程的假象眼睛会了手不会视频教程最大的问题是它把调试过程剪掉了。你看到的是老师敲代码一次通过没看到他在草稿纸上推演寄存器配置、查手册、看时序、加打印信息调试的过程。等到你自己动手代码报错的时候你连报错信息都读不全自然会产生我是不是不适合学这个的错觉。4.2 例程代码的毒性复制粘贴一时爽出了问题火葬场开发板厂商给的例程代码质量参差不齐很多是为了跑通写的根本不是工程规范写法。新手照着抄抄完能亮换一个场景就完蛋——因为注释里根本没讲清楚哪些地方是根据这个板子定死的哪些地方可以灵活修改。所以我一向建议新手例程必须在看懂的前提下再复制。每复制一行都要问自己这一行删掉会怎样这个参数改了会怎样。如果你答不上来那就说明你还不会只是看起来会了。4.3 优质资料的形态芯片手册、勘误表、应用笔记、开源代码真正想在这个行业里走下去你必须适应读原始资料芯片数据手册Datasheet、参考手册Reference Manual、勘误表Errata、官方应用笔记Application Note、GitHub上的开源驱动代码。这些资料用词准确、结构严谨但阅读门槛高全英文动辄几百上千页新手很容易被吓退。但你换个角度想大家最后拼的都是读手册的能力。你在B站看的那些教程本质上就是某个学长把手册里的内容用大白话转述了一遍转述过程中必然有省略、有理解偏差。你自己读手册速度慢但理解深、判断准后面越走越轻松。5. 退学的真实原因其实是反馈周期太长缺少续命机制前面说的都是技术和学习路线上的坑现在说一个更底层、更共通的问题为什么很多人坚持不了2个月因为2个月的时间在嵌入式这个领域里几乎不可能做出一个让人眼前一亮的完整作品。你做的东西只有自己看得见发给朋友看也就是哦一个温度计哦一个时钟大部分人体会不到其中的技术含量。而如果你学的是网页开发2个月已经能做出一个像模像样的个人主页了发朋友圈还能收获一堆点赞。正反馈的延迟才是退学的真正推手。5.1 把大目标切碎用可炫耀的小节点续命我自己刚转行做嵌入式的时候也经历过这个阶段当时我的做法是给自己设定一些又有趣又能晒的小项目第1个月做一个能显示温湿度的桌面小屏用ST7735屏幕驱动通过I2C读SHT30传感器数据。第2个月做一个按键控制的电子相册SD卡读取BMP图片按键切换。第3个月做一个基于FreeRTOS的多任务小系统一个任务跑按键扫描一个任务跑LED状态机一个任务跑串口日志。这些小项目的好处是每一个都在你的能力边界上推了一点点做完之后你有一个实物放在桌上有人问起来你能演示你自己看着也有成就感。这种阶段性的正反馈是支撑你走过平台期的燃料。5.2 参加比赛、逛开源社区找到同路人很关键蓝桥杯嵌入式、全国大学生电子设计竞赛、电赛这些比赛虽然经常被吐槽八股但对于新手建立信心、倒逼学习效率确实好用。我见过太多平时学得吊儿郎当的人一报名比赛一个月顶平时三个月。比赛给你一个明确的目标和Deadline你能在高压下把很多知识真正串起来。还有一个建议是多逛GitHub、Gitee上的嵌入式开源项目哪怕看不懂代码看看别人的工程结构、模块划分、Git提交记录都能学到很多东西。遇到不懂的API去看别人怎么封装遇到奇怪的现象去issue区搜一搜大概率有人问过。5.3 不迷信速成路线图学习路线的本质是问题驱动网上流传着各种嵌入式学习路线图——从C语言到51到STM32到RTOS到Linux驱动到内核移植。这套路线图的逻辑没错但执行起来极其枯燥因为你在每个阶段学的知识之间没有建立起为什么要学这个的联系。我的建议是反过来先定一个具体的项目比如做一个能联网的天气站然后反推你需要学哪些东西要联网那需要ESP8266/ESP32或者以太网需要学AT指令或Socket编程。要显示数据那需要屏幕驱动需要学SPI/I2C接口时序。要采集环境数据那需要传感器需要学模拟量采集、滤波算法。要同时处理显示和采集那可能需要RTOS做任务调度或者状态机。一环扣一环你学的时候就知道这个东西派什么用场学完就立刻用上记忆深刻而且作品越来越完整成就感也一直在增长。用这个方式驱动学习才是嵌入式入门最平滑的路径。6. 给正在纠结的人入坑前先想明白这四件事最后我给所有看了这个标题、有点犹豫又有点不甘心的人几个务实的建议。嵌入式这个行业如果你选对了方向、用对了方法回报是实打实的——对口岗位多、技术壁垒高、可替代性低。但如果下面这几件事你都想不明白那真的别急着买开发板。6.1 你是喜欢写代码还是喜欢解决问题纯软件方向的人可以在一个非常抽象的层面持续写代码很多年比如做算法优化、做架构设计。嵌入式不一样你最终要对着一块板子、一堆电路、一个物理现象做判断。你喜不喜欢动手、喜不喜欢用万用表和示波器排查问题决定了你在这个行业能走多远。最简单的自测方法找一个周末去B站看一期完整的嵌入式维修或者硬件调试视频。如果你看得下去甚至觉得拆电路板、量波形很有意思那你合适如果你全程想快进只想知道结果那你可能更适合纯软件方向。6.2 你准备好长期坐冷板凳了吗嵌入式领域的知识折旧率很低很多基础原理几十年不变这是它的优势。但反过来说你的前期积累周期也比互联网开发长得多。你很难一两年就变成资深专家前两年的时间可能就是在和寄存器、时序图、驱动Bug打交道。你想一想自己能不能接受这种中长线的成长节奏如果你已经工作想转行嵌入式这个问题尤其重要。辞职脱产学半年心态崩的概率很大一边工作一边学周期拉长到一年半载你对技术热情能不能撑得住也需要仔细评估。6.3 你选了哪个细分方向MCU还是Linux很多人学嵌入式根本分不清自己学的是单片机开发还是嵌入式Linux开发。单片机/MCU方向偏底层控制、外设驱动、实时性好常见于小家电、车载电子、工控设备学习门槛相对低学好C语言和STM32就能入门。缺点是薪资天花板相对低且容易陷入点灯工程师的重复劳动。嵌入式Linux方向面向带操作系统的设备比如路由器、机顶盒、智能座舱、无人机、边缘计算盒子。需要懂Linux系统、驱动模型、内存管理、进程调度学习曲线明显更陡但现在市场上高薪岗位基本都集中在这一侧。两者不是互相替代的关系但如果你一开始就选错了赛道学了几个月发现不想搞底层寄存器或者反过来发现系统层面自己完全啃不动这种挫败感是很强烈的。先花一个晚上看两个方向的招聘JD再决定往哪儿使劲比你盲目买板子有效率得多。6.4 你的第一个项目别选太简单也别选太复杂我见过有人第一个项目就想做四轴无人机也有人做了一周还在点LED灯这俩都不可取。对新手来说第一个项目最好是软硬件结合、连接外部世界、有感知有反馈的东西比如智能温控风扇温度传感器检测环境温度PWM控制风扇转速OLED屏显示当前数值。蓝牙遥控小车手机蓝牙发指令MCU解析串口数据控制电机驱动板输出PWM。简易气象站DHT22采集温湿度ESP8266接入WiFi通过网络API上传到物联网平台。这类项目难度适中既有外设驱动、通信协议、数据处理又有完整的输入-处理-输出闭环。做完一个你对芯片、外设、总线、调试工具的理解会比你看100个视频都深刻。写在最后学了2个月嵌入式已退学警告大家别学这个标题本质上是一个人在没有导航的情况下在一片复杂的森林里走了2个月摔了无数跤最后饿着肚子走出来对后面的人喊了一句别进去。但他的问题不是森林不好而是他没有带地图和干粮就开始穿越了。嵌入式这个领域确实复杂确实需要耐心确实不适合所有人。但如果你真的对硬件和底层有兴趣愿意用正确的方法、以足够的耐心去啃原理、读手册、做项目、调Bug这依然是个值得投入的方向。我依然记得自己第一次用示波器抓到一段完美的I2C波形时那种兴奋感——那种把一个模糊的概念变成亲眼可见的信号的瞬间别的行业很难给你。如果你看完这篇文章还是决定要入坑那就别急着发帖劝退。先给自己定一个三个月做出一个能联网的小作品的目标然后从点亮一个LED开始一步一步往前走。等你自己做完那个作品的时候你会回来感谢当初没放弃的自己。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门