嵌入式开发学习路线:从STM32裸机到Linux驱动的完整进阶路径
2026/9/24 2:56:03 网站建设 项目流程

从2021年到现在,我陆续带过十几位转行做嵌入式的朋友,有刚毕业的应届生,也有工作两三年从别的方向转过来的。在这个过程中我发现一个共性问题:大部分人不是不努力,也不是学不会,而是面对网上海量的教程、开发板、视频课,根本不知道该按什么顺序学、学到什么程度算入门、什么时候可以投简历。网上搜“嵌入式开发学习路线”,能搜出一堆知识清单,但很少有人告诉你这些知识到底应该先学哪个后学哪个,更没人告诉你每个阶段做到什么程度就可以进入下一阶段。

所以我想结合自己从STM32一路走到嵌入式Linux的实际经验,还有这十几位转行者的真实学习数据,写一条有明确时间节点、有可验证产出物的学习路线。这条路线不是“我收藏了很多资料”的清单式分享,而是一条你照着走就能在6到12个月内完成从入门到能找到初级岗位的完整路径。

1. 先想清楚嵌入式这条路的主线到底是什么

1.1 为什么是从STM32到Linux,而不是直接学Linux

很多新手会问:嵌入式Linux的岗位薪资更高、发展空间更大,为什么不能直接学Linux,非要先在STM32上浪费几个月?

这个想法我太熟悉了,我自己当初也有过。但后来带人带多了,我越来越确定一件事:STM32阶段真正锻炼的不是“会用某个芯片”,而是“理解计算机系统是怎么跑起来的”。寄存器操作让你明白CPU和外设怎么交互,中断让你明白CPU怎么响应异步事件,定时器让你明白时间基准是怎么产生的,串口和SPI/I2C让你明白数据是怎么在两个设备之间传输的。这些底层认知,是直接在Linux上学习时很难建立的,因为Linux帮你把这一层全部封装掉了。

用一个生活化的类比:学STM32就像学开车时先练手动挡,你得自己踩离合、挂挡、配合油门,手忙脚乱一阵子之后,你会对“车的动力是怎么传到轮子上的”有直觉。直接学Linux更像直接开自动挡,你确实能很快上路,但如果车出了奇怪的毛病,你完全不知道问题出在发动机还是变速箱。嵌入式开发恰恰是一个经常要面对“奇怪的毛病”的领域。

1.2 六个月到十二个月的时间线是怎么划分的

这条路线总时长6到12个月,跨度很大,因为每个人能投入的时间不同。脱产学习(每天8小时以上)可以压缩到6个月左右,在校生或在职转行(每天3到4小时)则需要10到12个月。

我把整条路线分成四个阶段,每个阶段结束都有一个“产出物”作为检验标准:

阶段时间跨度核心内容阶段性产出物
第一阶段1-3个月STM32裸机开发一个综合项目(如智能小车或环境监测站)
第二阶段第4个月FreeRTOS实时操作系统实现多任务调度的小项目
第三阶段5-7个月Linux基础与系统编程能熟练使用Linux命令行,完成应用层小工具
第四阶段8-12个月Linux应用/驱动开发完整的Linux项目,驱动模块+应用层验证

这个顺序不是拍脑袋定的。每一阶段都是下一阶段的地基,跳过去后面会加倍还债。我在带人过程中见过太多次“跳跃式学习”翻车的案例,后面我会在具体阶段里展开讲。

2. 第一阶段:STM32不是用来“学”的,是用来“用”的

2.1 开发环境选型:Keil MDK还是VSCode+GCC,别在工具上内耗

关于STM32的开发环境,网上的争论可以写一本书:用Keil的说VSCode那套配置太麻烦,用VSCode的说Keil界面上古、代码补全稀烂。我的建议很简单:如果你是纯新手,第一个月用Keil MDK上手,第二个月开始尝试迁移到VSCode + GCC工具链。

为什么这么建议?因为Keil MDK对新手非常友好,安装包是一个exe,双击安装,打开工程文件就能编译下载,调试界面直观,断点、单步、查看寄存器变量,全都集成在一个界面里。这对第一周还没搞明白“编译和烧录是两回事”的新手来说,能省下大量配置环境的精力。我见过不止一个新手在VSCode + GCC + CMake + openocd这套组合拳面前直接劝退,连LED都没点起来就放弃了。

但Keil的劣势也很明显:它是Windows-only的,而且工程文件的组织方式和企业里的主流做法不太一样。所以到了第二个月,建议安装STM32CubeMX(ST官方的图形化配置工具)配合VSCode使用。CubeMX可以帮你图形化配置引脚、时钟、外设,直接生成初始化代码,你在生成的框架上写自己的业务逻辑。这套流程更接近现代嵌入式企业里的实际开发方式。

这里有一个非常常见的坑,就是Keil MDK安装后无法识别STM32芯片,或者编译时报“Error: Device not found”。绝大多数情况是因为你下载的MDK版本太老,不支持你买的芯片型号。解决办法是去Keil官网下载对应芯片的Device Family Pack(也就是常说的芯片包),双击安装后重启MDK。

2.2 裸机编程的核心主线:从点灯到中断再到状态机

STM32第一阶段最忌讳的就是跟着视频把代码抄一遍,抄完觉得自己会了,合上电脑啥也写不出来。正确的方式是围绕一条主线去“用”:GPIO输出点灯 → GPIO输入读按键 → 外部中断 → 定时器中断 → PWM输出 → 串口收发 → ADC采集 → I2C/SPI与传感器通信。

每一步都要亲手改代码、烧录、看现象,而不是“看懂了”。我要求我带的人做一件事:每学完一个外设,关掉所有参考代码,空手写一个最小demo,能跑通才算过了这一关。这个方法比看十遍视频都管用。

很多人卡在“时钟树”这一关,包括我自己当初也一样。STM32的每个外设在上电后并没有时钟,你要先通过RCC寄存器或CubeMX把它对应的时钟打开,外设才能工作。把时钟树理解成你小区的配电系统:总闸(PLL锁相环)送电到楼栋(AHB总线),再从楼栋分到各家各户(APB1/APB2总线),最后到你家(外设)。你不给某个外设送电,它自然是“死”的。这也是为什么你照着教程配置串口却发现数据发不出去,十有八九是USART的时钟没使能。

我的经验是:配置任何一个外设,都遵循固定三步——开启时钟、配置引脚模式、初始化外设参数。这三步做完,外设就能用了。把这三个动作变成肌肉记忆,STM32的外设开发就搞定了一半。

2.3 串口调试、printf重定向和调试器,这三个基本功决定效率

串口是嵌入式开发最重要的调试手段,没有之一。学会用串口打印调试信息、用逻辑分析仪或者示波器看波形,你的排查效率会提升一个量级。

我强烈建议第一天就学会“printf重定向”——把C库里的printf函数映射到串口上,这样调试信息想打印什么就打印什么。在Keil里只需要重写fputc函数,在STM32CubeIDE或GCC工具链里重写_write函数。具体代码网上到处都有,但训练的目的是理解:printf本身是C库函数,它最终要把字符挨个“写”到一个设备上,你把这个“设备”从显示器改成串口,printf的输出就跑到串口助手上了。

调试器同样重要。ST-Link或者DAP-Link调试器不仅能烧录程序,还能在线打断点、实时查看变量值,排查逻辑BUG的效率比“打印-烧录-看输出”这组循环高一倍以上。如果你遇到STM32无法识别USB设备的问题——不是驱动坏了就是线的问题。数据线必须是带数据传输功能的,不能是那种只能充电的线,这个坑我踩过,网上因为这个问题求助的人比比皆是。

到了第一阶段的最后一个月,你要把学过的东西串起来做一个综合项目。我最推荐的是智能小车或者环境监测站,因为这两个项目都强制你用到多外设协作、简单的状态机设计和模块化编程思想。比如智能小车项目里,你要用定时器PWM控制电机转速、用编码器模式读取轮子转速、用串口或蓝牙接收遥控指令,还要处理避障传感器的中断信号。这个项目做完,STM32裸机开发这个阶段就算真正收官了。

3. 第二阶段:中断优先级、DMA、定时器输入捕获和通信协议,系统性攻坚

3.1 中断嵌套NVIC、DMA搬运,这两件事是MCU高性能的钥匙

裸机点灯和跑马灯都太简单了,真正把很多人卡住的是中断系统和DMA。中断好理解,“CPU正在干A事,突然来了个信号,它放下A事去干B事,干完回来继续A事”。但STM32的中断系统不只是响应,它还涉及优先级嵌套:如果两个中断同时来,谁先执行?如果执行低级中断时来了高级中断,要不要打断当前?

NVIC(嵌套向量中断控制器)是STM32中断管理的核心。你需要理解抢占优先级和子优先级的区别:抢占优先级决定能不能打断别人,子优先级决定同抢占优先级下的执行顺序。这个知识点笔试面试几乎必考,但更重要的是你真正写多中断程序时,如果优先级分配不合理,会出现严重BUG,比如一个低优先级中断饿死、或者两个中断互相抢占导致某个变量读到中间值。

DMA(直接存储器访问)解决的是数据传输占CPU的问题。我在带人时打过一个比方:串口发数据就像你手工抄写一本书,每写一个字CPU都得出力;开启DMA就相当于你雇了个秘书,你把要发的内容告诉它,它自己抄完了再告诉你“搞定了”,期间CPU可以去做别的事。使用DMA之后,MCU的CPU占用率能大幅下降,这在采集传感器数据、驱动屏幕刷新、处理音频流这些场景里至关重要。

3.2 定时器的输入捕获、输出比较、编码器模式,务必搞透

定时器是STM32里最复杂也最强大的外设,值得你花大量时间。很多人学定时器只是用来做个延时,这完全浪费了它。STM32的定时器有四大功能必须掌握:定时中断、PWM输出、输入捕获、编码器接口。

PWM输出好理解,就是产生占空比可调的方波,用来驱动电机、调LED亮度、控制舵机角度。输入捕获则反过来了:它测量外部信号的频率或脉宽。经典应用是超声波测距,你先发一个触发脉冲,然后开启定时器的输入捕获通道,等待回波信号跳变,测量高电平持续时间,代入声速公式就得到距离。编码器模式用于读取电机转速和方向,是机器人项目里必不可少的功能。

这些功能的配置方式基本一致:先用CubeMX把定时器对应引脚和通道配置好,然后理解几个关键寄存器(CNT计数寄存器、PSC预分频器、ARR自动重装寄存器),最后在中断回调函数或DMA完成中断里处理数据。如果一个项目里你同时用到了PWM、输入捕获、编码器三种功能,那说明你的定时器水平已经很扎实了。江科大(B站UP主)有一系列STM32入门视频,讲得简洁清晰,适合作为参考,但一定不要只看不练,配合开发板实操才能内化。

3.3 串口协议、I2C、SPI,搞清楚时序比背协议更重要

通信协议是嵌入式开发里换工作、做项目都要用到的核心能力。很多新手刷完一遍I2C和SPI的理论就觉得自己会了,结果真去调一个MPU6050陀螺仪,读出来的数据全是不正常值时,就傻眼了。

以I2C为例,它最核心的是时序:起始条件、停止条件、ACK应答、数据位的采样点。你不需要背诵每个时序的具体时间参数(数据手册里有),但你必须能在逻辑分析仪上“看”出来当前通信到了哪一步。我特别建议买个二三十块钱的逻辑分析仪,把I2C、SPI、串口、PWM这些波形都抓一遍,对比波形和数据手册上的时序图,这一步能让你对通信协议的理解提升几个台阶。

实战中经典的“毕业设计三件套”是STM32 + GPS模块 + OLED显示屏 + 无线通信,这类项目恰好要用到UART解析NMEA协议、I2C驱动OLED屏、SPI或SDIO驱动SD卡。把这些外设全部打通,你会发现后面的Linux编程里,文件描述符、驱动注册、数据流这些概念,其实都能在MCU阶段找到雏形。

4. 第三阶段:FreeRTOS让MCU开发从裸机思维转向系统思维

4.1 为什么在学Linux之前要先学RTOS

你可能会问:既然最终目标是嵌入式Linux,那直接去学Linux不就行了,为什么还要在STM32上插入一个RTOS阶段?

原因有两点。第一,FreeRTOS足够小又足够完整,你能在一个可以完全掌控的MCU环境里理解任务、调度、信号量、消息队列这些操作系统的核心概念,而不需要面对Linux庞大复杂的内存管理和进程模型。第二,Linux的线程编程模型和RTOS的任务模型有很强的相似性,你在FreeRTOS里建立了“并发任务”和“任务间通信”的直觉之后,再学Linux的多线程和进程间通信会顺畅得多。

FreeRTOS就是一种“轻量级的操作系统”,它让你可以在单核MCU上同时运行多个“任务”(可以粗略理解为简化的线程)。它通过时间片轮转和优先级抢占两种调度方式,让CPU在多个任务之间快速切换,看起来像是“同时”在跑多个程序。裸机开发的主循环+中断架构,在系统变复杂之后会面临两个痛点:实时性难保证(低优先级代码会被高优先级的中断频繁打断)、代码耦合严重(所有状态变量堆在一起)。FreeRTOS把这套逻辑梳理成了清晰的任务划分和通信机制。

4.2 移植FreeRTOS到STM32:我建议你用最笨的方法移植一次

现在网上很多教程直接让你用CubeMX一键勾选FreeRTOS,自动生成代码,不需要做任何移植。我承认这很方便,但我强烈建议你至少完整手动移植一次:把FreeRTOS源码下载下来,把portable文件夹里对应你MCU内核的移植文件添加进工程,修改FreeRTOSConfig.h,配置SysTick为心跳时钟。

为什么自找麻烦?因为一键生成让你永远不理解这几个问题:任务栈分配在哪、PendSV中断是干什么的、硬件定时器如何为调度器提供时基。这些疑问能一直带到你后面学嵌入式Linux的设备树和中断子系统,到那时候你回来就会庆幸当初把基础打扎实了。

移植成功之后,做三个练习就够了:第一个练习是创建两个不同优先级的任务,观察它们的调度过程,理解抢占式调度的“高优先级就绪立即执行”特性;第二个练习是用队列完成两个任务间的通信(比如传感器任务采集数据发给显示任务刷新屏幕);第三个练习是用二值信号量完成中断与任务之间的同步(比如按键中断通过信号量唤醒任务,避免在中断里做耗时的数据处理)。这三个练习做完,FreeRTOS的核心就算吃透了。

5. 第四阶段:从STM32到Linux,缺的不是命令而是“思维切换”

5.1 裸机开发和Linux开发的本质区别

很多从MCU转嵌入式Linux的人,第一周就被各种Linux命令砸晕了,觉得Linux怎么这么多要背的东西。其实Linux命令就跟STM32的外设库函数一样,用多了自然记住了,真正难的从来不是命令,而是思维方式的变化

裸机开发是“面向硬件编程”:你直接操作寄存器、配置外设、写中断服务函数,一切代码都是为特定硬件服务的。嵌入式Linux开发则是“面向抽象编程”:应用层程序运行在操作系统之上,通过文件、socket、procfs这些系统提供的接口去操作硬件,你基本不碰寄存器。硬件底层的工作由内核驱动完成,而驱动开发用的又是另一套内核框架。

用一句话总结就是:MCU阶段,你既是工程队的建筑师,又是搬砖的工人;Linux应用开发阶段,你是用现成工具的装修师傅;Linux驱动开发阶段,你又变成了给装修师傅造工具的工具制造商。这三种角色面对的问题完全不同,不要用搬砖的思维去干造工具的活。

5.2 环境准备:用虚拟机还是双系统,我推荐先从虚拟机开始

学嵌入式Linux第一步是准备环境。现在企业里基本默认用Ubuntu开发,所以你不用纠结选哪个发行版——就选Ubuntu LTS版本,选最新的LTS即可。装环境有两条路:Windows上装虚拟机(VMware或VirtualBox,更推荐VMware),或者直接装双系统。

我的建议是:前期先在虚拟机里安装Ubuntu,等确定以后要长期深耕Linux,再考虑换双系统或者直接Linux单系统。虚拟机的好处是随时可以快照恢复,你配置环境搞崩了不心疼。坏处是USB设备的直通有时需要额外配置,USB转串口模块、ST-Link烧录器、开发板在虚拟机里偶尔会“失联”。如果遇到虚拟机安装Linux直接蓝屏,第一反应检查CPU虚拟化是否在BIOS里开启(Intel VT-x / AMD-V),第二看是不是VMware版本和Windows版本不兼容,换新版本VMware基本能解决。

在Ubuntu里,你需要掌握的第一组操作不是写代码,而是让开发材料流转起来。我用下面这张表列出嵌入式开发最高频的一组命令,先掌握这些就够用了:

用途常用命令
文件管理ls, cd, cp, mv, rm, mkdir, find, grep
权限管理chmod, chown, sudo, useradd
查看系统资源top, free, df, uname -a, lspci, lsusb
网络诊断ifconfig, ping, netstat, ss, curl
文件传输ssh, scp, rsync
编辑文件vim(至少会i、Esc、:wq、:q!)
软件管理apt update, apt install, dpkg

5.3 Linux应用编程的敲门砖:文件IO是万物之本

在Linux里有一句名言:“一切皆文件”。这句话有两层含义。从用户角度看,你想操作的任何东西——LED灯、串口、传感器、网络连接、普通文件——都可以用open / read / write / close这四个函数来访问,区别只是“文件”对应的设备节点不同。从内核角度看,设备驱动向用户空间暴露的就是设备文件,它在struct file_operations这个结构体里帮你实现了open、read、write对应的回调函数。

我建议Linux应用阶段的第一个练习是:用C语言写一个程序,打开/dev/ttyUSB0这个串口设备节点,以原始模式读写数据。做完这个练习,你就能理解为什么嵌入式的串口调试在Linux下是“打开文件、读写文件”这么简单。第二个练习是熟悉多线程,用pthread_create创建两个线程,配合互斥锁实现共享变量的安全访问。第三个练习是socket编程,哪怕是写一个基于TCP的本机回环通信就行,这能为后面物联网设备的网络通信打下基础。

再强调一次,Linux命令不需要刻意背,我在实际开发中用到的高频命令不超过30个,都是平时敲代码、部署环境时自然记住的。你真正要花精力理解的,是进程、线程、文件描述符、地址空间这几个抽象概念。掌握了这些,你就已经是一只脚踏进嵌入式Linux开发的门槛了。

6. 第五阶段:设备和驱动,嵌入式Linux最有门槛也是最有价值的部分

6.1 驱动开发的完整链条:从hello world到一个字符设备

嵌入式Linux应用开发相对好入门一点,但你如果想把薪资和职业天花板再往上推一个台阶,驱动开发是绕不开的方向。驱动开发的自制力要求确实高,因为你需要同时理解硬件行为、内核机制和应用层接口三件事。

第一步是编译内核模块。你的Ubuntu里需要安装内核头文件,然后编写一个最简单的hello_module.c,里面包含module_init和module_exit两个宏声明,分别指定加载和卸载时调用的函数。使用一个简单的Makefile调用内核构建系统,make编译之后生成.ko文件,再用sudo insmod加载、dmesg查看内核打印。这个过程走通,你就进入了内核模块开发的世界。

第二步是把内核模块升级为一个真正的字符设备驱动。在module_init里调用register_chrdev注册一个主设备号,再创建一个struct file_operations,里面实现open、read、write、release四个函数,每个函数里先用printk打印一行日志。然后在Ubuntu里用mknod手动创建设备节点,写一个应用程序去打开并读写这个设备。当你在应用层调用read时,内核里对应的驱动函数被触发,这种“应用层传消息进内核,内核给反馈”的全链路打通,是理解Linux设备模型最关键的一步。

第三步是引入设备树和platform总线。现代Linux内核里,描述硬件资源不再靠驱动代码里写死的寄存器地址,而是靠设备树(Device Tree)文件。设备树描述“硬件有什么”,驱动是“软件怎么操作”,platform总线负责把两者匹配起来。这一步比较坑,因为设备树语法有各种缩进、逗号、状态属性的细节,编译一次dts要比编译一次C代码等更久。但只要你在实际的开发板上把一棵设备树从零写好、编译进内核、匹配上自己的驱动,嵌入式Linux驱动这扇门就被你撞开了。

6.2 知识地图和学习顺序的再梳理

到了这个阶段,我建议不要一口吃成胖子,按这样的次序循序渐进:

  • 内核模块加载与卸载(hello world)
  • 字符设备驱动 + 设备节点
  • 设备树的基本语法,在真实开发板上点亮一颗GPIO控制的LED
  • GPIO子系统、platform驱动框架
  • 中断(request_irq)和等待队列(wait_queue)
  • 内核线程和工作队列
  • 如果未来做物联网/车载方向,再深入I2C、SPI、UART驱动子系统和regmap框架

每一个子主题都配两三个小实验,及时验证理解,防止“学了后面忘前面”。此时你已经完全摆脱了“照着视频抄”的模式,遇到问题会自己搜内核文档、看源码、对比内核版本之间的差异,这说明你的嵌入式开发能力已经具备自我进化能力了——能自我进化的工程师,才能真正在这行走得远。

7. 六到十二个月时间表及最常见的五个坑

7.1 十二个月版详细时间表

结合我带人的经验,我整理了一份12个月版本的时间表。如果你能脱产学习,压缩到6个月是可行的,把下面每个阶段时间减半,但缩减时间的前提是你的C语言基础扎实,且每天有8小时以上沉浸式学习时间。

月份学习主题关键产出
第1月C语言回顾 + STM32开发环境 + GPIO + 时钟树 + 串口能独立点灯、按键控制、串口打印数据
第2月中断 + 定时器 + PWM + ADC + I2C/SPI能读取温度传感器数据并通过OLED屏显示
第3月DMA + 综合项目(智能小车/环境监测站)完成整个项目的代码编写与调试
第4月FreeRTOS移植 + 任务调度 + 队列 + 信号量实现一个3任务以上的RTOS小应用
第5月Ubuntu环境 + 常用命令 + vim + shell基础能脱离Windows在Linux里完成日常开发
第6月Linux文件IO + 多线程 + socket编程写一个多线程的TCP聊天小工具
第7月内核模块入门 + 设备树概念编译并加载一个hello模块,分析dmesg日志
第8月字符设备驱动实战实现一个可读写的中断驱动设备Demo
第9月GPIO子系统 + platform框架在开发板上通过自写驱动控制LED和按键
第10月综合项目 + 调试工具进阶(gdb、perf、strace)整合应用+驱动Kernel模块的完整项目
第11月简历项目打磨 + 嵌入式面试题刷题输出项目总结文档,准备笔试面试
第12月投简历面试 + 针对岗位查漏补缺拿到至少2-3个面试机会

7.2 最容易踩的五个坑,我逐个帮你排掉

第一个坑是“收藏即学会”。很多人收藏了无数学习路线、入门教程、开源项目,收藏完就再也不看了。收藏本身不会带来能力提升,每天规划时间动手写代码、改代码、调试,才是提升的唯一路径。

第二个坑是“买板子贪多贪贵”。STM32F103C8T6的核心板已经能做绝大多数入门实验,价格二三十块,完全够用。我见过好几个人一上来就买五百多块的高端开发板,最后不是吃灰就是被复杂原理图和例程劝退。做嵌入式开发,先把手上的硬件物尽其用,比不停换新板子重要得多。

第三个坑是“看视频不手练”。很多人一天能刷十集视频,越看越觉得自己会了,到写代码时大脑空空。这里我试过最有效的方法:每看完一个知识点的视频,就做2小时代码练习,不写出能跑通的例程,绝不进入下一个知识点。别怕慢,慢就是快。别人三天刷完“串口全系列”,你用一周亲手写完串口收发和printf重定向,十天之后你写串口程序比他还快。

第四个坑是“遇到问题就问人,不自己查”。这行的核心能力是“在毫无头绪时自己定位问题的能力”。遇到编译报错,先读错误信息;遇到数据不对,先怀疑自己的配置;遇到设备不工作,先拿万用表或逻辑分析仪测波形。问人要基于“我已经验证过什么、排除了什么”这个前提,而不是直接甩给别人一句“为什么我的程序跑不起来”。这条建议放到面试外企或大厂时也一样适用——面试官非常看重候选人的排错思路。

第五个坑是“不写笔记,不做项目文档”。我从带人的第一天就要求他们维护一个开发日志,记录遇到的问题、排查过程、最终解法。看起来多花时间,但到后面写简历、准备面试、复习旧知识时,这份日志的价值会成倍放大。面试官问你“项目中遇到的最大困难是什么”时,你能给出具体可回溯的细节,这比那些说不出项目细节的候选人更有竞争力。

8. 一些可能对你有用的个人体会

路线图写到这,很多朋友可能会问:我真的按这个顺序学,就一定能找到工作吗?按我带人的真实反馈来说,完成这条路线并能独立完成两个项目的人,拿到面试机会的概率是很大的。嵌入式这个行业的门槛很公平,你亲手调试过多少块板子、写过多少行底层代码、处理过多少诡异问题,这些能力在面试中聊半小时就能探出底。

最后分享一个我在实际教学中最常说的建议:尽早把“学习者心态”切换成“解决问题者心态”。学STM32时,不要想着“下次考试考什么”,而是想着“我要做一个能测厨房温湿度的设备”;学Linux时,不要想着“哪些命令面试会问”,而是想着“我要给家里的树莓派写一个自动备份脚本”。当你开始为了解决真实问题而查资料、写代码、调板子时,你会发现嵌入式开发的学习速度远超按部就班刷教程的方式。那种看到自己写的东西在硬件上按预期跑起来的感觉,是这行最让人上瘾的地方,也是支撑我一直做到今天的东西。

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

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

立即咨询