怎样选购用于Linux的笔记本电脑?
怎样选购用于Linux的笔记本电脑?
作为一个在嵌入式Linux领域摸爬滚打了快十年的老程序员,我必须说,这个问题踩过的坑能绕地球一圈。
27岁那年刚进外企做汽车电子,公司给配了台ThinkPad,装Ubuntu那叫一个丝滑。后来自己创业做自媒体,想省钱买了台”性价比神机”,结果网卡驱动折腾了三天三夜,差点把电脑砸了。
硬件兼容性才是第一生产力
很多人上来就看配置,i7还是i9,32G还是64G内存。但你知道吗?再牛逼的配置,驱动装不上就是废铁。
我见过太多刚入行的小伙伴,买了最新款的游戏本想跑Linux,结果独显切换各种翻车,风扇转速控制不了,笔记本烫得能煎鸡蛋。最后只能装回Windows,或者虚拟机里跑Linux,性能直接打对折。
Intel平台是真香定律。AMD这几年确实翻身了,锐龙性能吊打同代酷睿,但Linux下的兼容性还是差点意思。特别是核显驱动,Intel那是开箱即用,AMD经常要自己编译内核模块。
网卡更是重灾区。Realtek的螃蟹卡在Windows下没问题,Linux下经常抽风断网。Intel的AX200/AX210才是正解,稳得一批。
别被所谓的”Linux认证”忽悠了
戴尔的XPS Developer Edition,联想的ThinkPad P系列,都打着”Linux认证”的旗号。但说实话,这玩意儿更多是个营销噱头。
我自己用的是ThinkPad T系列,不是什么P系列工作站。为啥?因为T系列用的人多,遇到问题社区里一搜一大把解决方案。那些小众型号,出了bug你连个参考都找不到。
群众的眼睛是雪亮的。去ArchWiki看看哪些型号的页面最全,去Ubuntu论坛看看哪些机器的帖子最多,这比什么官方认证靠谱多了。
性能够用就行,别追求极致
做嵌入式开发这么多年,我的开发机从来没上过64G内存。32G跑虚拟机、编译内核、开几十个Chrome标签页,完全够用。
CPU也不用追求什么i9-13900HX,那玩意儿功耗大散热差,Linux下电源管理又不如Windows,续航能给你干到两小时。i5-12500H或者R5-6600H这个级别,性能和功耗平衡得刚刚好。
硬盘倒是建议直接上1T起步。Linux下各种发行版、虚拟机镜像、Docker容器,512G真不够折腾的。而且现在固态也不贵,没必要省这点钱。
屏幕和键盘比你想象的重要
刚毕业那会儿在某马写单片机代码,公司配的笔记本屏幕色域只有45% NTSC,看一天代码眼睛疼得要命。后来自己买了台100% sRGB的,世界都亮了。
写代码不是看电影,不需要4K分辨率,但色准和亮度必须到位。1920x1080或者1920x1200,300尼特亮度,100% sRGB色域,这是底线。
键盘手感更是直接影响生产力。ThinkPad的小红点用习惯了真回不去,外接鼠标都省了。有些轻薄本为了做薄,键程短得跟按计算器似的,长时间敲代码手指受不了。
扩展性决定了这台机器能用几年
我28岁开始做自媒体那会儿,买了台焊死内存的超极本。两年后想升级内存,发现只能换整台机器,亏得吐血。
现在买本子,内存插槽、硬盘位、Type-C接口数量,都得提前看好。最好是双内存插槽,可以自己加到64G;双硬盘位,系统盘和数据盘分开;至少两个全功能Type-C,一个充电一个扩展坞。
雷电4接口更是加分项。外接显卡坞、高速存储、4K显示器,一根线全搞定。虽然Linux下雷电支持没Windows那么完美,但基本功能都能用。
别迷信国外品牌
ThinkPad确实好,但溢价也是真的高。国产的机械革命、神舟战神,同样的配置能便宜三分之一。
关键是Linux兼容性也不差。这些厂商用的都是公版模具和主流硬件,驱动支持反而比那些定制化严重的轻薄本好。
我现在给公司员工配机器,都是机械革命的蛟龙系列。i5-12500H + 32G + 1T,五千出头,装Ubuntu一点毛病没有。省下来的钱给他们多发点绩效,不香吗?
最后说点掏心窝的话
选笔记本这事儿,就跟找对象一样,没有完美的,只有合适的。
你要是做内核开发、驱动调试,那必须上ThinkPad P系列或者戴尔Precision,稳定压倒一切。
你要是搞Web开发、写写脚本,那MacBook Air装个虚拟机就够了,Unix-like系统用起来也顺手。
你要是跟我一样做嵌入式,经常要交叉编译、烧录板子,那就老老实实选Intel平台的主流型号,别整那些花里胡哨的。
工具是为人服务的,不是人为工具服务。别让选电脑这事儿耽误了正事,够用就行,把时间花在提升技术上,比纠结买哪台机器值钱多了。
我30岁赚到第一个百万,靠的不是用什么神机,而是在烂机器上也能把代码写好,把问题解决掉。这才是程序员的核心竞争力。
嵌入式学习路线完全指南(2026最新版)
作为一个在嵌入式领域摸爬滚打了7年的老鸟,看到这个问题忍不住想分享一下自己的心路历程。当年我也是从一个啥都不懂的小白,踩过无数坑,走过很多弯路,现在终于能独当一面了。
先说说我的背景:双非本科电子信息工程,毕业后在一家做智能硬件的公司干了3年,后来跳槽到某大厂做IoT相关的开发。这些年接触过STM32、ESP32、Linux驱动开发、RTOS等各种技术栈,也面试过不少候选人。所以这份学习路线,我会尽量结合实际工作需求来写,避免纸上谈兵。
先上结论:嵌入式学习是个长期过程,至少需要1-2年才能入门,3-5年才能算熟练。但只要方向对了,坚持下去,这个领域的回报还是很不错的。
更多编程学习资源
- C语言零基础入门电子书-2026最新版
- STM32零基础入门电子书-2026最新版
- FreeRTOS零基础入门电子书-2026最新版
- C++ 零基础入门电子书-2026最新版
- 51单片机零基础入门学习路线
- AD画板零基础入门学习路线
- C语言零基础入门学习路线
- C++语言零基础入门学习路线
- ESP32零基础入门学习路线
- FreeRTOS零基础入门学习路线
- Linux应用开发零基础入门学习路线
- Linux底层开发零基础入门学习路线
- LVGL零基础入门学习路线
- QT零基础入门学习路线
- STM32零基础入门学习路线
一、学习大纲

详细学习大纲解读
第一阶段:基础知识储备(3-6个月)
这个阶段很多人容易忽视,觉得自己学过C语言就可以直接上手单片机了。但实际上,基础不牢,地动山摇。我当年就是吃了这个亏,后来返工补基础花了更多时间。
C语言进阶部分,重点要掌握指针的各种用法。嵌入式开发中,指针无处不在——寄存器操作是指针、链表是指针、回调函数也是指针。我见过太多人卡在二级指针、函数指针这些概念上。建议多刷《C和指针》这本书的习题,把每一种指针用法都手写实现一遍。
位操作也是重中之重。在嵌入式里,我们经常需要操作寄存器的某几位,比如设置GPIO的模式、配置定时器的参数等。你得熟练掌握与、或、异或、移位这些操作,还要理解大小端的概念。我记得当年调试一个传感器,数据总是不对,后来发现是大小端没处理好,浪费了一整天。
数据结构与算法这块,不需要像搞算法竞赛那样深入,但基础的链表、队列、栈必须掌握。RTOS里的任务队列、消息队列,底层都是这些数据结构。排序算法至少要会快排和归并,查找算法要理解二分查找的思想。面试的时候,手撕链表反转、判断链表是否有环这类题目是常客。
计算机组成原理听起来很理论,但对理解嵌入式系统至关重要。你要知道CPU是怎么执行指令的,为什么要有流水线,缓存是怎么工作的。这些知识能帮你理解为什么某些代码跑得快,某些代码跑得慢。比如,我们在写高性能代码时,会考虑缓存命中率,会用到内存对齐,这些都跟计算机组成原理有关。
中断系统的理解尤其重要。嵌入式开发中,中断是核心机制之一。你要理解中断的优先级、中断嵌套、中断向量表这些概念。我曾经遇到过一个bug,系统偶尔会死机,查了好久才发现是中断优先级配置不当,导致低优先级中断抢占了高优先级任务的资源。
数字电路基础也不能落下。虽然我们是写代码的,但至少要能看懂原理图,知道上拉电阻、下拉电阻是干嘛的,理解什么是开漏输出、推挽输出。读datasheet更是基本功,芯片手册动辄几百页,你得知道怎么快速找到关键信息。
第二阶段:单片机开发(3-6个月)
这个阶段是真正开始接触硬件的时候,也是最有成就感的阶段。看到自己写的代码能让LED闪烁、能控制电机转动,那种感觉真的很爽。
51单片机现在可能有点过时了,但我还是建议初学者从这里开始。为什么?因为51的资源有限,寄存器简单,能让你更好地理解底层原理。而且51的开发板便宜,几十块钱就能买一套,试错成本低。
用51做几个小项目:流水灯、数码管显示、矩阵键盘、简易电子钟等。这些项目看起来简单,但能让你理解GPIO、定时器、中断的基本用法。我当年做的第一个项目就是用51做了个温度报警器,虽然很简陋,但那种成就感至今难忘。
STM32系列是目前嵌入式领域的主流选择。STM32的生态非常完善,芯片型号多,性能范围广,从低端的F0到高端的H7都有。我建议从STM32F103开始学,这个系列资料最多,社区最活跃。
STM32的学习曲线比51陡峭很多。首先是时钟树的配置,这个概念初学者往往搞不清楚。STM32有多个时钟源(HSI、HSE、PLL等),不同的外设挂在不同的总线上(AHB、APB1、APB2),你得理解这些时钟是怎么分配的。我当年就因为时钟配置错误,导致串口波特率不对,调试了好几个小时。
HAL库和寄存器开发各有优劣。HAL库上手快,代码可移植性好,但效率相对低一些,而且把很多底层细节封装了,不利于深入理解。寄存器开发更接近硬件,效率高,但代码量大,移植性差。我的建议是:初期用HAL库快速上手,中期开始学习寄存器操作,后期根据项目需求选择。
DMA(直接内存访问)是STM32的一大特色。用好DMA能大大降低CPU负担,提高系统效率。比如串口接收数据,如果用中断方式,每收到一个字节就要进一次中断,效率很低;用DMA的话,可以一次性接收一大块数据,CPU只需要在传输完成后处理一次。我在做一个高速数据采集项目时,就是靠DMA才达到了性能要求。
外设驱动开发是这个阶段的重点。你要学会怎么驱动各种传感器、显示屏、电机等。这里有个技巧:先看懂别人的驱动代码,再自己从零写一遍。比如DHT11温湿度传感器,网上有很多现成的代码,你先跑通,然后对照datasheet理解每一行代码的意义,最后自己重新实现一遍。这个过程虽然慢,但能让你真正掌握驱动开发的思路。
I2C和SPI这两个通信协议必须吃透。很多传感器、存储器都是用这两个协议通信的。I2C是两线制,有地址的概念,支持多主多从;SPI是四线制,速度更快,但占用引脚多。我记得当年调试一个I2C的OLED屏,总是显示不出来,后来发现是上拉电阻没接,这种低级错误现在想起来都觉得好笑。
第三阶段:嵌入式Linux(6-12个月)
这个阶段的跨度比较大,从应用层到驱动层都要涉及。很多人在这个阶段会感到迷茫,因为知识点太多太杂。我的建议是:循序渐进,先把应用层搞明白,再深入到驱动层。
Linux系统基础是必须打牢的。Shell命令要熟练,至少得会用grep、awk、sed这些文本处理工具,会写简单的Shell脚本。我在工作中经常需要分析日志,这时候Shell脚本就派上用场了。比如从几个G的日志文件中找出特定的错误信息,用Shell一行命令就能搞定。
Linux的文件系统结构也要理解。/dev目录下是设备文件,/proc是内核信息,/sys是设备模型,这些都是嵌入式开发中常用的。我记得有一次需要查看某个GPIO的状态,就是通过/sys/class/gpio这个接口实现的。
嵌入式Linux开发环境的搭建是个坎。交叉编译工具链的配置,很多人在这里卡住了。你要理解什么是交叉编译,为什么需要交叉编译。简单说,就是在PC上编译出能在ARM板子上运行的程序。工具链的选择也有讲究,是用厂商提供的,还是自己用crosstool-ng编译,还是用Linaro的预编译版本,这些都需要根据项目情况决定。
Makefile的编写是个技术活。虽然现在有CMake这种更高级的构建工具,但Makefile还是基础。你要理解Makefile的规则、变量、函数等概念。我建议从简单的Makefile开始写,逐步加入自动依赖生成、多目录编译等功能。
GDB调试是必备技能。在嵌入式Linux上,很多时候没有IDE,只能用GDB命令行调试。你要会设置断点、单步执行、查看变量、查看内存、查看调用栈等操作。gdbserver远程调试也要掌握,这样可以在PC上调试板子上的程序,效率更高。
Linux应用编程这块内容很多。文件I/O要理解阻塞和非阻塞的区别,会用select/poll/epoll实现I/O多路复用。进程间通信的几种方式都要掌握,知道什么场景用什么方式。比如,管道适合父子进程间的单向通信,共享内存适合大数据量的传输,消息队列适合异步通信。
多线程编程是个重点也是个难点。你要理解线程和进程的区别,会用pthread库创建线程、同步线程。线程安全是个大话题,互斥锁、读写锁、条件变量这些同步机制都要会用。我见过太多因为没加锁导致的诡异bug,有时候能复现,有时候不能,排查起来特别痛苦。
网络编程也是必修课。Socket编程要熟练,TCP和UDP的区别要清楚。我做过一个项目,需要实现设备和云端的通信,就是用Socket + MQTT协议实现的。这个过程中踩了不少坑,比如TCP粘包问题、断线重连机制、心跳包的设计等。
Linux驱动开发是嵌入式Linux的核心,也是最难的部分。字符设备驱动是入门,你要理解file_operations这个结构体,知道怎么实现open、read、write、ioctl等操作。我建议先写一个最简单的字符设备驱动,就是在内核空间分配一块内存,应用层可以读写这块内存,通过这个例子理解驱动的基本框架。
平台设备驱动模型是Linux驱动的核心思想。它把驱动分成两部分:platform_driver和platform_device,实现了驱动代码和设备信息的分离。这种设计的好处是,同一个驱动可以支持多个设备,只需要修改设备信息就行。
设备树(Device Tree)是ARM Linux的标准配置方式。它用一种树状结构描述硬件信息,替代了以前在代码中硬编码的方式。学习设备树要理解它的语法,知道怎么描述GPIO、I2C、SPI等设备,怎么在驱动中解析设备树节点。我刚开始学设备树的时候觉得很抽象,后来多看几个实例就理解了。
中断处理是驱动开发的重点。你要理解中断的上半部和下半部,知道什么时候用tasklet,什么时候用workqueue。中断上下文和进程上下文的区别也要清楚,比如在中断上下文中不能睡眠,不能使用可能导致睡眠的函数。
系统移植与裁剪是个综合性的工作。U-Boot的移植要根据板子的硬件情况修改配置,添加驱动。Linux内核的配置更复杂,有几千个配置项,你要知道哪些是必须的,哪些可以去掉。根文件系统的制作有多种方式,Busybox适合做最小系统,Buildroot可以方便地添加各种软件包,Yocto则是更专业的构建系统。
我在做一个产品的时候,需要把系统裁剪到最小,最后做出来的镜像只有8MB,启动时间不到3秒。这个过程中学到了很多优化技巧,比如去掉不必要的驱动、精简文件系统、优化启动脚本等。
第四阶段:实时操作系统(3-6个月)
RTOS(实时操作系统)在嵌入式领域有着广泛的应用,尤其是对实时性要求高的场合。和Linux不同,RTOS更注重确定性和实时性。
RTOS基础概念要理解清楚。任务调度算法有抢占式和协作式,优先级有静态和动态。你要理解什么是任务切换,任务切换的开销有多大,怎么减少任务切换。内存管理方面,RTOS通常提供多种内存分配策略,你要根据应用场景选择合适的策略。
FreeRTOS是目前最流行的开源RTOS,被亚马逊收购后改名为AWS FreeRTOS。它的代码简洁,可移植性好,支持的芯片多。FreeRTOS的核心是任务调度器,基于优先级的抢占式调度。
任务的创建和管理是基础。你要理解任务的状态(运行、就绪、阻塞、挂起),知道什么时候任务会切换。任务的优先级设置很有讲究,优先级太高可能导致低优先级任务饿死,优先级太低又达不到实时性要求。
队列是FreeRTOS中最常用的通信方式。它是线程安全的,可以在任务间、任务和中断间传递数据。我在做一个数据采集项目时,就用队列实现了采集任务和处理任务的解耦,采集任务把数据放入队列,处理任务从队列中取数据处理。
信号量和互斥锁用于任务同步。二值信号量常用于任务间的同步,计数信号量可以用于资源管理,互斥锁用于保护共享资源。要注意优先级反转问题,FreeRTOS提供了优先级继承机制来解决这个问题。
软件定时器是个很实用的功能。相比硬件定时器,软件定时器数量不受限制,使用更灵活。但要注意,软件定时器的回调函数是在定时器任务中执行的,不能执行耗时操作。
低功耗模式在电池供电的设备中很重要。FreeRTOS提供了tickless模式,在没有任务需要运行时让CPU进入低功耗状态。我做过一个可穿戴设备,通过优化任务调度和使用tickless模式,把待机时间从3天提高到了7天。
RT-Thread是国产的RTOS,这几年发展很快。它的特点是组件丰富,有完整的软件包生态。RT-Thread的设备驱动框架做得很好,统一了不同设备的操作接口。如果你的项目需要快速开发,RT-Thread是个不错的选择。
第五阶段:通信协议与网络(持续学习)
通信是嵌入式系统的核心功能之一,不管是设备间通信还是设备与云端通信,都需要掌握各种通信协议。
有线通信方面,UART/SPI/I2C这些基础协议前面已经提到了,这里说说更高级的。CAN总线在汽车电子中应用广泛,它的特点是可靠性高、抗干扰能力强。我做过一个车载项目,用CAN总线连接多个ECU,学到了很多CAN总线的知识,比如仲裁机制、错误处理、波特率设置等。
Modbus协议在工控领域很常见。它有RTU和ASCII两种模式,基于RS485总线。我在做一个工业网关项目时,需要采集多个Modbus设备的数据,就深入研究了Modbus协议,包括功能码、数据格式、CRC校验等。
USB通信比较复杂,涉及到描述符、端点、传输类型等概念。如果只是用USB转串口,用现成的驱动就行;如果要实现自定义的USB设备,就需要深入学习USB协议。
以太网TCP/IP是嵌入式联网的主流方式。你要理解TCP/IP协议栈的分层结构,知道ARP、ICMP、TCP、UDP这些协议的作用。lwIP是嵌入式领域常用的TCP/IP协议栈,代码精简,资源占用少。
无线通信是物联网时代的重点。WiFi模块最常用的是ESP8266和ESP32,它们不仅提供WiFi功能,本身还是一个功能强大的MCU。我用ESP32做过好几个项目,它的性能很强,支持蓝牙和WiFi双模,价格还便宜。
蓝牙BLE(低功耗蓝牙)在可穿戴设备、智能家居中应用广泛。BLE的特点是功耗低,但传输速率相对低。你要理解BLE的GAP和GATT协议,知道怎么定义服务和特征值。我做过一个智能手环项目,手环通过BLE和手机通信,这个过程中学到了很多BLE的知识。
LoRa是低功耗广域网的代表,传输距离可达几公里,适合远距离、低速率的应用。LoRaWAN是基于LoRa的网络协议,定义了设备接入、数据传输、安全等机制。
NB-IoT和4G模块用于设备联网。NB-IoT的特点是覆盖广、功耗低、成本低,适合大规模部署。4G模块速度快,但功耗和成本相对高。我在做一个共享单车项目时,用的就是NB-IoT模块,实现了单车的定位和控制。
应用层协议方面,MQTT是物联网领域最流行的协议。它基于发布/订阅模式,轻量级,适合带宽受限的网络。我在多个项目中都用到了MQTT,比如智能家居、工业监控等。要注意MQTT的QoS(服务质量)等级,根据应用需求选择合适的等级。
HTTP/HTTPS是最通用的协议,但在嵌入式设备上使用要考虑资源占用。CoAP是专为物联网设计的协议,类似HTTP但更轻量。WebSocket适合需要双向实时通信的场景。
第六阶段:项目实战能力(贯穿全程)
理论学得再好,不做项目也是纸上谈兵。项目实战能力是最重要的,也是面试时最看重的。
硬件设计基础虽然我们是写代码的,但懂点硬件知识能让你和硬件工程师更好地配合。会看原理图是基本要求,至少要知道电阻、电容、晶振、电源芯片这些常见元件的作用。我在工作中经常需要查看原理图,确认某个引脚的连接,或者排查硬件问题。
PCB基础知识也要了解一些,比如信号完整性、电源完整性、EMC等概念。虽然不需要自己画PCB,但知道这些知识能帮你写出更好的代码。比如,了解了信号完整性,你就知道为什么高速信号要用差分线,为什么要做阻抗匹配。
测试仪器的使用是必备技能。示波器能看波形,对调试通信协议很有帮助。逻辑分析仪能同时捕获多路信号,分析时序关系。我记得调试一个SPI通信问题时,就是用逻辑分析仪抓取波形,发现了时钟相位配置错误。
调试技能是最能体现水平的地方。JTAG/SWD调试要熟练,会设置断点、单步执行、查看寄存器。串口日志是最常用的调试手段,要学会用日志定位问题。我的习惯是在关键位置打印日志,记录函数的输入输出、关键变量的值、错误码等信息。
内存泄漏是个常见问题,尤其是在长时间运行的系统中。Linux下可以用valgrind检测内存泄漏,嵌入式系统可以自己实现内存统计功能。我在一个项目中就遇到过内存泄漏,系统运行几天后就会死机,最后通过内存统计找到了泄漏点。
性能分析也很重要。你要知道代码的瓶颈在哪里,是CPU占用高还是内存不够,是I/O慢还是算法效率低。Linux下可以用top、perf等工具分析性能,RTOS可以用任务统计功能。
软件工程实践在实际工作中非常重要。代码规范能让代码更易读、易维护。我建议遵循一套成熟的编码规范,比如MISRA C。代码重构也是个持续的过程,当代码变得臃肿、难以维护时,就需要重构。
单元测试在嵌入式开发中做得不够,但它确实能提高代码质量。我在一个项目中引入了单元测试,虽然前期花了些时间,但后期修改代码时信心更足,因为测试用例能快速发现问题。
持续集成能自动化编译、测试、部署流程,提高开发效率。我们团队用Jenkins搭建了CI系统,每次提交代码都会自动编译、运行测试,有问题会立即通知。
文档编写也不能忽视。好的文档能让别人快速理解你的代码,也能让自己在几个月后还能看懂。我的习惯是在代码中写详细的注释,同时维护一份设计文档,记录模块的功能、接口、使用方法等。
第七阶段:进阶方向(根据兴趣选择)
学到这个阶段,你已经具备了扎实的嵌入式基础,可以根据兴趣和职业规划选择进阶方向。
音视频处理方向需要学习编解码算法、流媒体协议等。如果做摄像头、录音笔这类产品,这个方向很有用。
图像识别与AI是当前的热点。在嵌入式设备上部署AI模型,需要学习模型压缩、量化、加速等技术。TensorFlow Lite、NCNN等框架可以在嵌入式设备上运行。
电源管理在便携设备中很重要。要学习电池管理、充电控制、功耗优化等知识。
信息安全越来越受重视。设备的安全启动、数据加密、安全通信等都需要专业知识。
汽车电子是个大市场,涉及到CAN总线、AUTOSAR、功能安全等专业知识。
工业控制需要学习PLC、现场总线、实时性保证等内容。
二、必看开源视频/教程
基础入门类
- 【强烈推荐】韦东山嵌入式Linux系列
- B站链接:https://www.bilibili.com/video/BV1w4411B7a4
- 这是我见过讲得最好的嵌入式Linux教程,从裸机到驱动,循序渐进。韦老师讲课很接地气,会告诉你为什么要这么做,而不是照本宣科。我当年就是看他的视频入门的,强烈推荐。
- B站链接:https://www.bilibili.com/video/BV1Lx411Z7Qa
- 正点原子的教程配套资料很全,代码、原理图、数据手册都有。适合STM32入门,讲解细致,例程丰富。
- B站链接:https://www.bilibili.com/video/BV1Xx411K7RD
- 野火的教程也很不错,和正点原子风格不同,可以两个对照着看。野火的书写得很详细,视频是书的配套。
- B站链接:https://www.bilibili.com/video/BV1tz4y1X7Uw
- 这是韦东山团队的新课程,基于IMX6ULL开发板,从裸机到Linux驱动都有讲。我觉得这套课程最大的特点是注重原理,不只是告诉你怎么做,还告诉你为什么。
- B站链接:https://www.bilibili.com/video/BV1Jv411R7ga
- 这个系列讲FreeRTOS讲得很清楚,从基本概念到实际应用都有。适合有一定单片机基础的人学习。
进阶提高类
- 宋宝华Linux驱动开发
- B站链接:https://www.bilibili.com/video/BV1fA411q7Fj
- 宋老师是Linux驱动领域的大牛,他的课程比较深入,适合有一定基础后学习。讲解很透彻,能学到很多底层原理。
- B站链接:https://www.bilibili.com/video/BV1Qv411B7Tr
- 这个系列深入讲解Linux内核,包括进程管理、内存管理、文件系统等。比较硬核,需要有扎实的C语言和操作系统基础。
- B站链接:https://www.bilibili.com/video/BV1Pt411P7qP
- 这个课程讲ARM架构,包括指令集、流水线、异常处理等。对理解底层原理很有帮助。
- B站链接:https://www.bilibili.com/video/BV1eb411C7Ae
- 专门讲网络编程,从Socket基础到高并发服务器都有涉及。适合做网络相关项目的人学习。
- B站链接:https://www.bilibili.com/video/BV1Ux411M7WE
- 这个系列做了几个完整的物联网项目,包括智能家居、环境监测等。能学到项目开发的完整流程。
专题类
- CAN总线详解
- B站链接:https://www.bilibili.com/video/BV1Vt411e7RD
- 专门讲CAN总线,从原理到应用都有。做汽车电子的必看。
- B站链接:https://www.bilibili.com/video/BV1wt411B7Qx
- 讲Modbus协议,适合做工控的人学习。
- B站链接:https://www.bilibili.com/video/BV1Jx411v7Yx
- 讲MQTT协议和物联网应用,有实际项目演示。
- B站链接:https://www.bilibili.com/video/BV1Qx411M7Qx
- 讲蓝牙BLE开发,从协议到实战都有。
- B站链接:https://www.bilibili.com/video/BV1Yx411v7hx
- 讲ESP32的开发,包括WiFi、蓝牙、外设等。ESP32很强大,值得学习。
图文教程推荐
- Linux C编程一站式学习
- 网址:http://akaedu.github.io/book/
- 这是一本开源的Linux C编程教材,讲得很系统,适合打基础。
- 网址:http://www.wowotech.net/
- 这个网站有很多Linux内核相关的文章,质量很高,深入浅出。我经常在这里查资料。
- 正点原子:http://www.openedv.com/
- 野火:https://doc.embedfire.com/
- 这两家的官方文档写得很详细,配合视频学习效果更好。
三、必读经典书籍
C语言与数据结构
- 《C Primer Plus》(第6版)
- 作者:Stephen Prata
- 推荐理由:C语言入门的经典教材,讲解详细,例子丰富。我当年就是看这本书入门的,每个知识点都有大量练习。
- 作者:Kenneth A.Reek
- 推荐理由:专门讲指针的书,把指针的各种用法讲得很透彻。嵌入式开发中指针无处不在,这本书必读。
- 作者:Peter van der Linden
- 推荐理由:进阶书籍,讲了很多C语言的陷阱和技巧。读完后对C语言的理解会上一个台阶。
- 作者:Mark Allen Weiss
- 推荐理由:数据结构的经典教材,用C语言实现,适合嵌入式开发者。
计算机基础
- 《深入理解计算机系统》(CSAPP)
- 作者:Randal E. Bryant / David R. O’Hallaron
- 推荐理由:神书,从程序员的角度讲计算机系统。虽然不是专门讲嵌入式的,但对理解底层原理非常有帮助。我读了三遍,每次都有新收获。
- 作者:David A. Patterson / John L. Hennessy
- 推荐理由:计算机组成原理的经典教材,讲得很清楚。对理解CPU、存储器、I/O等有帮助。
单片机开发
- 《STM32库开发实战指南》
- 作者:野火团队
- 推荐理由:STM32入门的好书,配套视频和代码,讲解细致。我当年学STM32就是看的这本书。
- 作者:Joseph Yiu
- 推荐理由:这本书比较深入,讲了Cortex-M3的架构、异常处理、存储器系统等。适合进阶学习。
- 作者:刘军
- 推荐理由:通过大量例程讲解STM32,实战性强。每个例程都有详细的代码分析。
Linux系统与编程
- 《鸟哥的Linux私房菜》
- 作者:鸟哥
- 推荐理由:Linux入门的最佳选择,讲得很通俗易懂。基础篇和服务器篇都要看。
- 作者:W. Richard Stevens / Stephen A. Rago
- 推荐理由:Unix/Linux编程的圣经,讲了文件I/O、进程、线程、网络等方方面面。虽然厚,但值得反复读。
- 作者:W. Richard Stevens
- 推荐理由:网络编程的经典,分为卷1(套接字API)和卷2(进程间通信)。做网络相关开发必读。
- 作者:Neil Matthew / Richard Stones
- 推荐理由:比APUE更适合入门,讲得更浅显,例子更多。
Linux驱动开发
- 《Linux设备驱动程序》(LDD3)
- 作者:Jonathan Corbet / Alessandro Rubini / Greg Kroah-Hartman
- 推荐理由:Linux驱动开发的经典教材,虽然基于2.6内核,但原理是相通的。我学驱动开发就是从这本书开始的。
- 作者:陈学松
- 推荐理由:国人写的驱动书,讲得很深入,涉及到很多内核机制。适合有一定基础后阅读。
- 作者:宋宝华
- 推荐理由:宋老师的书,实战性很强,有大量实例。配合他的视频学习效果更好。
- 作者:张天飞
- 推荐理由:基于ARM64讲Linux内核,内容很新,讲得也很深入。
RTOS
- 《FreeRTOS内核实现与应用开发实战指南》
- 作者:野火团队
- 推荐理由:FreeRTOS的入门书,讲得很详细,有大量例程。
- 作者:Jean J. Labrosse
- 推荐理由:μC/OS的作者写的书,讲了RTOS的设计思想和实现细节。虽然现在μC/OS用得少了,但学习RTOS原理很有帮助。
- 作者:RT-Thread团队
- 推荐理由:RT-Thread的官方教材,讲得很全面。
通信协议
- 《CAN总线原理与应用》
- 作者:饶运涛
- 推荐理由:专门讲CAN总线的书,从原理到应用都有涉及。
- 作者:W. Richard Stevens
- 推荐理由:TCP/IP协议的经典教材,讲得非常详细。虽然厚,但值得啃。
- 作者:竹下隆史等
- 推荐理由:用图解的方式讲TCP/IP,比较容易理解,适合入门。
硬件相关
- 《模拟和数字电子电路基础》
- 作者:Anant Agarwal / Jeffrey Lang
- 推荐理由:电路基础的好书,虽然我们是写代码的,但懂点电路知识很有帮助。
- 作者:Joseph Yiu
- 推荐理由:讲ARM Cortex-M3架构的书,对理解STM32等芯片的底层原理很有帮助。
四、必做项目
入门级项目
- 智能小车
- GitHub:https://github.com/MakerCollider/SmartCar
- 推荐理由:经典的入门项目,涉及到电机控制、传感器读取、蓝牙通信等。我当年做的第一个项目就是智能小车,很有成就感。
- GitHub:https://github.com/phodal/iot
- 推荐理由:包含多个智能家居设备的控制,涉及到WiFi通信、MQTT协议、Web界面等。适合学习物联网开发。
- GitHub:https://github.com/pingumacpenguin/STM32-O-Scope
- 推荐理由:用STM32做的示波器,涉及到ADC采样、DMA传输、LCD显示等。能学到很多STM32的高级功能。
- GitHub:https://github.com/armink/EasyLogger
- 推荐理由:不只是显示时间,还有温湿度显示、闹钟、日历等功能。涉及到RTC、传感器、OLED显示等。
- GitHub:https://github.com/MaJerle/stm32-usart-dma-rx-tx
- 推荐理由:涉及到文件系统、音频解码、DAC输出等。能学到很多知识。
进阶级项目
- 嵌入式Web服务器
- GitHub:https://github.com/EZForever/lwip-http-server
- 推荐理由:在嵌入式设备上实现Web服务器,可以通过浏览器控制设备。涉及到lwIP协议栈、HTTP协议等。
- GitHub:https://github.com/betaflight/betaflight
- 推荐理由:开源的无人机飞控项目,代码质量很高。涉及到姿态解算、PID控制、遥控通信等。比较复杂,适合有一定基础后学习。
- GitHub:https://github.com/sqfmi/Watchy
- 推荐理由:基于ESP32的智能手表,涉及到低功耗设计、传感器、显示屏、蓝牙通信等。
- GitHub:https://github.com/mpromonet/v4l2rtspserver
- 推荐理由:在嵌入式Linux上实现网络摄像头,涉及到V4L2、RTSP协议、H.264编码等。
- GitHub:https://github.com/eclipse/kura
- 推荐理由:Eclipse基金会的物联网网关项目,功能很完善。可以学到工业级项目的架构设计。
Linux驱动项目
- 字符设备驱动示例
- GitHub:https://github.com/martinezjavier/ldd3
- 推荐理由:LDD3书中的例程,是学习Linux驱动的经典示例。
- GitHub:https://github.com/torvalds/linux/tree/master/drivers/i2c
- 推荐理由:Linux内核中的I2C驱动,可以学习标准的驱动框架。
- GitHub:https://github.com/torvalds/linux/tree/master/drivers/spi
- 推荐理由:Linux内核中的SPI驱动,学习驱动框架的好材料。
- GitHub:https://github.com/torvalds/linux/tree/master/drivers/input
- 推荐理由:学习Linux输入子系统,理解事件驱动的设计思想。
RTOS项目
- FreeRTOS示例项目
- GitHub:https://github.com/FreeRTOS/FreeRTOS
- 推荐理由:FreeRTOS官方的示例项目,涵盖了各种应用场景。
- Gitee:https://gitee.com/rtthread/rt-thread
- 推荐理由:RT-Thread官方仓库,有很多示例和软件包。
- GitHub:https://github.com/nimaltd/FreeRTOS
- 推荐理由:实际的数据采集项目,涉及到多任务协作、队列通信等。
通信协议项目
- MQTT客户端
- GitHub:https://github.com/eclipse/paho.mqtt.embedded-c
- 推荐理由:Eclipse的MQTT客户端库,代码质量高,可以学习MQTT协议的实现。
- GitHub:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32
- 推荐理由:基于FreeModbus的主从机实现,适合学习Modbus协议。
- GitHub:https://github.com/linux-can/can-utils
- 推荐理由:Linux下的CAN总线工具集,可以学习CAN通信的实现。
综合项目
- 智能农业监控系统
- GitHub:https://github.com/zhaoolee/ChineseBQB
- 推荐理由:综合性的物联网项目,涉及到传感器、通信、云平台等。
- GitHub:https://github.com/espressif/esp-iot-solution
- 推荐理由:ESP32的物联网解决方案,包含智能门锁等多个项目。
- GitHub:https://github.com/sparkfun/Qwiic_Environmental_Combo_Board
- 推荐理由:环境监测项目,涉及到多种传感器、数据存储、远程传输等。
- GitHub:https://github.com/ros/ros
- 推荐理由:ROS(机器人操作系统)是机器人领域的标准平台,功能强大。
- GitHub:https://github.com/scopehal/scopehal-apps
- 推荐理由:完整的示波器项目,包含硬件设计和软件实现。
五、必刷经典面试题
C语言基础
- 指针和引用的区别是什么?
- 什么是野指针?如何避免?
- static关键字的作用有哪些?
- const关键字的作用有哪些?
- volatile关键字的作用是什么?
- 结构体和联合体的区别?
- 大小端是什么?如何判断系统的大小端?
- 如何实现一个宏来交换两个变量的值?
- 内存对齐的原因和规则?
- 什么是内存泄漏?如何检测和避免?
- malloc和calloc的区别?
- 函数指针和指针函数的区别?
- 如何定义一个指向函数的指针数组?
- 预处理、编译、汇编、链接的过程?
- 头文件中的ifndef/define/endif的作用?
数据结构与算法
- 链表反转的实现?
- 如何判断链表是否有环?
- 如何找到链表的中间节点?
- 两个有序链表如何合并?
- 栈和队列的区别?如何用栈实现队列?
- 二叉树的前序、中序、后序遍历?
- 如何判断二叉树是否平衡?
- 快速排序的原理和实现?
- 冒泡排序的优化方法?
- 二分查找的实现和时间复杂度?
操作系统
- 进程和线程的区别?
- 进程间通信的方式有哪些?
- 什么是死锁?如何避免死锁?
- 互斥锁和信号量的区别?
- 什么是优先级反转?如何解决?
- 任务调度算法有哪些?
- 中断和轮询的区别?
- 中断上下文和进程上下文的区别?
- 什么是可重入函数?
- 虚拟内存的作用是什么?
单片机开发
- STM32的启动过程?
- 如何配置STM32的时钟树?
- GPIO的8种工作模式及应用场景?
- 定时器的工作原理?
- DMA的工作原理和应用场景?
- 中断优先级如何配置?
- NVIC是什么?
- SysTick定时器的作用?
- ADC的采样过程?
- 如何提高ADC的采样精度?
- PWM的原理和应用?
- 看门狗的作用和使用方法?
- 低功耗模式有哪些?如何进入和退出?
- Flash和SRAM的区别?
- 如何在Flash中存储数据?
通信协议
- UART、SPI、I2C的区别?
- I2C的通信过程?
- SPI的四种工作模式?
- CAN总线的仲裁机制?
- Modbus的功能码有哪些?
- TCP和UDP的区别?
- TCP的三次握手和四次挥手?
- TCP粘包问题如何解决?
- HTTP和HTTPS的区别?
- MQTT的QoS等级?
Linux系统
- Linux的文件系统结构?
- 软链接和硬链接的区别?
- 如何查看进程的状态?
- 如何查看系统的内存使用情况?
- 如何查找文件?
- 管道和重定向的区别?
- fork函数的作用?
- exec函数族的作用?
- 僵尸进程和孤儿进程?
- 信号的作用和常用信号?
Linux驱动
- 字符设备和块设备的区别?
- 设备号的组成?
- file_operations结构体的作用?
- 如何注册字符设备?
- 内核模块的加载和卸载?
- printk和printf的区别?
- 如何在驱动中申请内存?
- copy_to_user和copy_from_user的作用?
- 中断的上半部和下半部?
- tasklet和workqueue的区别?
- 设备树的作用?
- 如何在设备树中描述GPIO?
- 平台设备驱动模型?
- 总线、设备、驱动的关系?
- 如何调试内核模块?
RTOS
- FreeRTOS的任务状态有哪些?
- 任务调度的时机?
- 任务优先级的设置原则?
- 队列的工作原理?
- 信号量和互斥锁的区别?
- 二值信号量和计数信号量的区别?
- 事件组的作用?
- 软件定时器和硬件定时器的区别?
- 临界区的保护方法?
- tickless模式的原理?
项目经验
- 介绍一个你做过的项目?
- 项目
- 中遇到的最大困难是什么?如何解决的?
- 如何进行代码调试和问题定位?
- 如何优化系统的功耗?
- 如何保证系统的稳定性?
- 如何处理硬件异常?
- 多任务系统如何设计?
- 如何进行性能优化?
- 如何设计通信协议?
- 如何进行版本管理和代码review?
硬件相关
- 上拉电阻和下拉电阻的作用?
- 开漏输出和推挽输出的区别?
- 什么是去耦电容?如何选择?
- 晶振的作用?如何选择晶振参数?
- 如何使用示波器测量信号?
- 如何使用逻辑分析仪?
- 电平转换的方法有哪些?
- 如何防止静电损坏芯片?
- PCB布线需要注意什么?
- EMC设计的基本原则?
综合应用
- 如何实现软件滤波?
- PID控制算法的原理?
- 状态机的设计方法?
- 如何实现断电保存数据?
- 如何实现固件升级?
- Bootloader的作用和实现?
- 如何实现设备的远程控制?
- 如何保证数据传输的可靠性?
- 如何实现多机通信?
- 如何设计一个低功耗系统?
写在最后的一些建议
写了这么多,最后想跟大家分享一些我这些年的心得体会。
1. 基础最重要
我见过太多人急于求成,基础没打牢就想做项目。结果项目做到一半卡住了,回过头来补基础,反而浪费了更多时间。C语言、数据结构、操作系统这些基础知识,一定要扎实掌握。就像盖房子,地基不牢,房子再漂亮也会倒。
2. 动手实践是王道
嵌入式是个实践性很强的领域,光看书看视频是不够的。一定要多动手,多写代码,多做项目。我当年学习的时候,每学一个知识点都会写个小程序验证一下,遇到问题就调试、查资料、请教别人。这个过程虽然辛苦,但收获最大。
建议买一块开发板,从最简单的LED闪烁开始,一步步做项目。不要怕失败,每一次调试bug的过程都是学习的过程。我记得当年为了调通一个I2C通信,花了整整一个星期,但那一周学到的东西,比看一个月书还多。
3. 学会看源码
开源项目是最好的学习资源。Linux内核、FreeRTOS、lwIP这些项目的代码质量都很高,多看看大牛是怎么写代码的,能学到很多东西。刚开始可能看不懂,但坚持下去,慢慢就能理解了。
我的方法是:先跑通代码,然后打断点单步调试,看代码的执行流程。遇到不懂的函数就查文档,查不到就Google。这样一点点啃下来,虽然慢,但理解得很透彻。
4. 注重代码质量
很多初学者写代码只求能跑起来,不注重代码质量。这在学习阶段可以理解,但工作中一定要改掉这个习惯。好的代码应该是可读的、可维护的、可扩展的。
我的建议是:遵循一套编码规范,写详细的注释,合理地划分模块,做好错误处理。刚开始可能会觉得麻烦,但养成习惯后,写出来的代码质量会高很多。而且,好的代码能让你在面试中加分不少。
5. 学会提问和查资料
遇到问题是正常的,关键是怎么解决问题。我的经验是:先自己尝试解决,查文档、查资料、看源码。如果实在解决不了,再去论坛、QQ群、知乎等地方提问。
提问也是有技巧的。要描述清楚问题的现象、你的环境、你尝试过的方法。贴代码的时候要格式化好,贴日志的时候要贴关键部分。这样别人才能快速理解你的问题,给出有效的建议。
6. 建立知识体系
嵌入式涉及的知识点很多很杂,如果不建立体系,学到后面就会觉得混乱。我的方法是用思维导图把知识点串起来,定期回顾和总结。
比如学STM32,可以画一个思维导图,包括时钟系统、GPIO、定时器、通信接口等模块,每个模块下面再细分。这样学习的时候就有个清晰的脉络,知道自己学到哪里了,还有哪些没学。
7. 关注行业动态
嵌入式领域发展很快,新技术、新芯片层出不穷。要保持学习的热情,关注行业动态。我经常逛的网站有:电子发烧友、21ic、CSDN、知乎等。B站上也有很多优质的技术视频。
订阅一些技术公众号也不错,比如嵌入式Linux、嵌入式客栈、玩转嵌入式等。每天花点时间看看文章,了解最新的技术趋势。
8. 不要闭门造车
多和同行交流,加入一些技术群、论坛。遇到问题可以请教别人,看到好的项目可以学习借鉴。我在群里认识了很多朋友,大家互相帮助,共同进步。
如果有机会,参加一些技术沙龙、开发者大会也很有收获。能听到大牛的分享,能了解企业的实际需求,对职业发展很有帮助。
9. 坚持很重要
嵌入式学习是个长期的过程,不可能一蹴而就。会遇到很多困难,会有想放弃的时候。但只要坚持下去,一定能看到成果。
我当年学习的时候,也有过迷茫和挫折。有一次调试一个bug,连续几天都没解决,都快崩溃了。但最后还是咬牙坚持下来了,问题解决的那一刻,所有的辛苦都值得了。
10. 找准方向
嵌入式的方向很多,不可能每个都精通。要根据自己的兴趣和职业规划,选择一个方向深入学习。比如你对Linux驱动感兴趣,就重点学驱动开发;如果对物联网感兴趣,就重点学通信协议和云平台。
我的建议是:前期可以广泛涉猎,了解各个方向;中期选择一个方向深入;后期再横向拓展。这样既有深度又有广度,在职场上会更有竞争力。
学习路线时间规划建议
最后给大家一个参考的时间规划,当然这个要根据个人情况调整。
第1-3个月:打基础
- 复习C语言,重点是指针、结构体、位操作
- 学习数据结构,重点是链表、栈、队列
- 了解计算机组成原理和数字电路
- 每天学习时间:2-3小时
- 目标:能熟练使用C语言,理解基本的数据结构
第4-6个月:单片机入门
- 学习51单片机或STM32
- 做几个小项目:流水灯、数码管、串口通信等
- 学习常用外设的使用:GPIO、定时器、ADC、DMA等
- 每天学习时间:3-4小时
- 目标:能独立完成简单的单片机项目
第7-12个月:深入单片机
- 深入学习STM32的高级功能
- 学习通信协议:SPI、I2C、CAN等
- 做一个综合性的项目,比如智能小车、数据采集系统等
- 每天学习时间:3-4小时
- 目标:能完成中等复杂度的项目,理解底层原理
第13-18个月:Linux系统和应用编程
- 学习Linux基础命令和Shell编程
- 学习Linux应用编程:文件I/O、进程、线程、网络等
- 搭建开发环境,学习交叉编译
- 做几个Linux应用项目
- 每天学习时间:3-4小时
- 目标:能在Linux上开发应用程序
第19-24个月:Linux驱动开发
- 学习Linux驱动开发基础
- 学习字符设备驱动、平台设备驱动
- 学习设备树、中断处理等
- 移植一个Linux系统到开发板
- 每天学习时间:3-4小时
- 目标:能编写简单的Linux驱动
第25个月以后:持续学习和深化
- 学习RTOS,比如FreeRTOS或RT-Thread
- 深入学习某个方向,比如音视频、AI、汽车电子等
- 做一些开源项目,积累项目经验
- 准备面试,找工作或跳槽
- 每天学习时间:根据情况调整
- 目标:成为某个领域的专家
这个时间规划比较理想化,实际情况可能会有出入。有的人学得快,可能一年就能达到别人两年的水平;有的人学得慢,可能需要更多时间。重要的是保持学习的节奏,不要急于求成,也不要半途而废。
一些额外的资源推荐
论坛和社区:
- CSDN:国内最大的IT社区,嵌入式相关的文章很多
- 博客园:有很多高质量的技术博客
- 知乎:可以关注嵌入式相关的话题和专栏
- Stack Overflow:遇到问题可以在这里搜索
- GitHub:最大的开源社区,有海量的开源项目
- 电子发烧友论坛:硬件相关的讨论比较多
- 21ic论坛:老牌的电子技术论坛
公众号推荐:
- 嵌入式Linux
- 嵌入式客栈
- 玩转嵌入式
- 嵌入式ARM
- 单片机爱好者
- 鱼鹰谈单片机
工具推荐:
- Keil MDK:STM32开发常用的IDE
- IAR:另一个常用的嵌入式IDE
- VSCode:轻量级的编辑器,配合插件可以开发嵌入式
- Source Insight:代码阅读神器
- Beyond Compare:文件对比工具
- Xshell:SSH客户端
- MobaXterm:集成了很多功能的终端工具
- Wireshark:网络抓包工具
硬件工具:
- J-Link:常用的调试器
- ST-Link:STM32官方的调试器
- USB转串口模块:调试必备
- 逻辑分析仪:分析数字信号
- 示波器:观察模拟信号
好了,洋洋洒洒写了这么多,希望对想学嵌入式的朋友有帮助。嵌入式这条路不好走,但只要坚持下去,一定能看到风景。
我是从一个啥都不懂的小白,一步步走到今天的。这个过程中有过迷茫,有过挫折,但更多的是成长和收获。现在回头看,那些熬夜调试的日子,那些为了一个bug抓耳挠腮的时刻,都成了宝贵的经历。
嵌入式开发是个需要耐心和毅力的领域,但也是个很有成就感的领域。当你看到自己写的代码能控制硬件,能实现各种功能,那种感觉真的很爽。而且,嵌入式工程师的薪资待遇也不错,发展前景也很好。
最后送给大家一句话:路虽远,行则将至;事虽难,做则必成。 只要你愿意学,愿意坚持,一定能在嵌入式领域有所成就。
如果这篇回答对你有帮助,不妨点个赞、收藏一下,也欢迎在评论区交流讨论。大家一起学习,一起进步!
2026年2月更新:
最近看到很多人在学AI和嵌入式的结合,这确实是个很有前景的方向。现在很多嵌入式设备都开始集成AI功能,比如智能音箱、智能摄像头、边缘计算设备等。如果你对AI感兴趣,可以学习一下TensorFlow Lite、NCNN、MNN这些嵌入式AI框架。
另外,RISC-V架构这两年发展很快,国内有很多公司在做RISC-V的芯片。如果有精力,可以了解一下RISC-V,说不定以后会成为主流。
还有就是汽车电子,随着新能源汽车的发展,汽车电子的需求越来越大。如果对汽车感兴趣,可以学习AUTOSAR、CAN总线、车载以太网等技术。
总之,嵌入式领域的机会很多,关键是找准方向,持续学习。祝大家学习顺利,早日成为嵌入式高手!
更多编程学习资源