嵌入式C学习路线汇总--进阶之路

嵌入式是工科,工科讲究实践。说的再多、懂得再多,不能做出实际的东西,是没有意义的。学习嵌入式的核心原则之一就是多动手写代码。另外还有一个原则就是:从浅到深学习。接下来的内容将贯彻这两个原则。最后强调一点,各个方面的技术是齐头并进的学习,而不是某一个方面学的非常好才去学习下一个方面。实际开发中,用到的技术会很多,我们只需要做好其中一部分就行了。

1 C语言

C语言是嵌入式开发必备的基本技能之一,对它的学习没有尽头,需要大家认真学习C语言。熟练使用C语言开发,这是嵌入式工程师的基本要求。

1.1 开发环境

学习C语言本身,可以使用各种工具链,这里博主比较推荐微软的VS开发工具,在win下学习C语言。作为小白而言,简单、好用的工具更重要,VS提供了开发C语言需要用到的各种工具。对于个人学习而言,社区版本完全够用,可以在微软官网下载到VS软件。我使用的是VS 2019版本,也可以用其他的版本。

1.2 C语言入门

C语言的视频B站很多,大体上没有太大的差距吧(指内容),我自己也只是看过一些郝斌的C语言视频,这个可以看看,我学习的时候更喜欢看书,主要是看书信息接受效率高。这里推荐一本C语言入门级别书籍:《C程序设计语言》,作者是布莱恩·克尼汉,丹尼斯·里奇。C语言创始人写的一本书,非常经典,在世界上都享有盛名。大名鼎鼎的Hello world程序就是这本书提出来的。

这本书的经典程度网上一搜就有,这里就不在多赘述了,用它作为C语言入门书籍完全没问题。书里面的代码风格也是值得借鉴学习的,非常建议读一读该书。

1.3 C语言提高

对C语言基本的语法使用有一定理解之后,就需要对C语言进行提高了。提高阶段,我推荐如下三本书:《C与指针》、《C专家编程》、《C陷阱与缺陷》。

这三本书应该读哪个?

这三本书,我都研究过。三本书的内容有不少重复的地方,看完一本之后,另外两本看的也挺快的。如果有时间的话,建议三本都看看,时间不够的话,就只看《C与指针》这一本也行,这本书内容详实,有入门有提高,从浅到深,也可以拿来入门C语言。至于其他的书籍,因为没有过多研究,就不推荐了。

以上C语言的资料学习完成之后,基本上对于C语言有了较深入的理解了,应付平常开发应该没有太大的问题。

2 stm32

stm32是目前市面上资料较多的ARM芯片(指Cortex-M系列芯片,这里不在赘述)了,用的人非常多,资料很全,遇到的各种问题在网上都可以找到解决办法。有些问题真找不到的话,那就涉及到比较深入的领域了,也不是初学者该遇到的和能解决的。因此,建议以stm32为切入点,学习ARM 32位处理器的使用。stm32芯片有非常多的系列,每个系列又有很多芯片,这里推荐stm32f407的芯片(大部分人也是用这个芯片学习的),兼顾成本、性能、学到的知识,性价比高。下面谈谈该如何学习这款芯片(其他的芯片类似)。

2.1 stm32基础

stm32芯片里面的内容其实非常多,但作为初学者,并不需要关心特别高深的内容。我们只需要掌握stm32常用的开发以及基本的知识点。根据自身的开发经验和经历,总结了如下常用的外设:GPIO、UART(串口)、中断、TIMER(定时器)、AD、DA、SPI、I2C、PWM、DMA。这些外设都是非常常见的,基本上所有的ARM芯片都会有。上述外设的学习可以不分先后,但还是推荐按照上面的顺序进行。

除此之外,还要学会使用一款开发工具链(推荐Keil,毕竟是ARM公司的)。能够掌握基本的Keil使用方法就行了。比如多文件编译、调试仿真、常见配置等。

学习完基本的外设之后,就可以动手写一些简单的项目,巩固所学知识。后面我也会出一些文章,讲解项目的思路,供大家学习。

2.2 stm32进阶

以目前的招聘需求而言,学完基本的stm32内容已经无法满足了(太卷了)。因此,需要开始往较深入的内容学习。这里我将进阶路线分为如下两条主线:软件主线、硬件主线。

2.2.1 软件主线

1. C语言:继续往精通方向学习C语言,比如,C语言的高级用法,C语言是如何实现面向对象思想的,C语言代码是如何控制硬件的,C语言代码是如何使用内存的、代码是如何在内存中布局的,C语言代码是如何在芯片中执行的,这些问题都是需要深入研究的。除此之外,也应该学习下常见的数据结构,如链表、树等。至于图这种数据结构,太复杂的,别为难自己。

2. RTOS:除此之外,还要学习RTOS(推荐FreeRTOS,背靠亚马逊,用的人多,资料也多,市场广阔),并且应该往深入的地方学习RTOS,而不应该仅仅浮于表面。知道使用FreeRTOS怎么创建任务、信号量、互斥量、队列等,这些只是表面,内部实现的原理和机制才是面试要考察的(毕竟所有的RTOS都类似,掌握了原理才能很快上手其他的RTOS)。而且这些原理性的知识是通用的,也是一个嵌入式工程师的内功,面试考察的就是内功。我们还可以借鉴一下FreeRTOS源码中优秀的设计思想,用到我们的代码中,一举多得。

3. 中间件:有精力的话,可以学习一些常见中间件的使用,如emwin(写GUI界面用到,或者LVGL也可)、Fatfs(文件系统,管理数据用的到)、Lwip(网络协议栈,以太网通信用的到),这些中间件以会用为学习目的和标准,不需要深入研究,除非以后做这方面的工作。

2.2.2 硬件主线

stm32芯片的基本外设学完之后,我们还需要学习复杂的外设和芯片内部的一些内容。下面的图,建议大家背下来,这是在学习的过程中画的stm32芯片内部功能逻辑图,具有普遍意义(针对Cortex-M系列芯片)

我们学习的常见外设,只是挂载到总线(AHB、APB总线)上的一个个独立的功能单元,CPU(图中Cortex-M3就是芯片内部的CPU)如何与外设进行交互、芯片的调试系统、中断系统、总线系统等等,还有非常多的内容需要我们学习。

在学习stm32的时候,我们会遇到一些比较复杂的外设,这里面时钟系统(RCC)还是要学习的,RCC就相当于芯片的动力系统,连接着芯片内部的各个功能部件。除此之外,RTC(实时时钟)、CRC(循环冗余校验)、CRYP(加密处理器)、RNG(随机数发生器)、HASH(散列处理器)等外设看心情学习。但比较复杂的,如USB、以太网、FSMC(灵活的静态存储控制器)、SDIO(安全数字输入/输出接口)、DCMI(数字摄像头接口)这些复杂的外设,就不太建议学习了,可以了解下,不需要进行深入研究(学习成本高,真正用到了,学的那点也不够,导致性价比太低)。如果以后想专精某一个方面,可以去学习。CAN总线用于汽车领域,如果不打算从事汽车领域工作的话,可以不用学习。stm32f407芯片的外设就这么多,都在上面讲述了,各位同学根据自己的需求进行学习。

除了外设之外,M4内核还支持DSP指令集,这个用于对数学运算、控制运算、信号处理、数据处理等方面,也可以学习下如何使用。对DSP指令集的学习,只需要学习该如何使用DSP库即可,库里面的算法都是使用DSP指令集进行加速过的,我们只需要会用就行。

学习完上面的内容之后,也可以研究下CPU部分,如常见的堆、栈、流水线、寄存器、CPU现场等相关内容,这些在学习FreeRTOS时用得到,也是面试中常问的内容。

在软件主线、硬件主线之间,还有一个就是工具链,主要是编译器在链接期间的部分知识。这部分内容,也是我们经常用到的一些技能,如进行IAP开发、OTA开发等,还有一些特殊用途,也需要对链接阶段进行改动,以满足应用需求。

这里推荐几本书:《Cortex-M3权威指南》、《STM32F4xx参考手册》配合起来一起学习。

2.3 学习顺序(重要,小白跟着做即可)

1. 入门:首先要有C语言的基础(能用基本的语法编写程序即可),接着开始学习stm32的基本外设(常见的外设,上文中有提到)。这个时候可以做一些简单的项目,巩固下学习效果,学习stm32的核心原则之一就是多动手写代码。这里推荐江科大的视频(B站有),市面上少有的精品、免费视频了。收费的基础课,我觉得都很难与其进行比较,看得出来,江科大的视频是用心做的,强烈安利~。

2. 提高:这个时候需要提高C语言(推荐的书都去看看,研读一遍),先把C语言水平提上来,否则后续学习会因为缺少C语言基础而非常痛苦。之后,再去学习FreeRTOS,或者也可以先去学习stm内核部分,这两个先后顺序其实无所谓的(反正对新手来说都是新知识,都不简单^^),二者有些东西也是相辅相成的。

3. 这个时候应该做一些有难度的项目,将自己学习的内容、技术体现在项目中,用于找工作。

学习到这里的话,基本上找工作已经没啥太大问题了。

全网最受欢迎的嵌入式面经

面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3000+订阅还会涨价,提前订阅提前享受,持续更新中。

原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoMc

全部评论

相关推荐

最近经常遇到粉丝私信,或者是1v1答疑的时候。都在问嵌入式学习方向的问题,不知道要走哪个方向?到底要不要学数模电?等等。之前在笔记--嵌入式软件学习路线(完整版),已经分享过了,没想到还是有粉丝朋友不是很清楚,因此本期再说详细一点。首先是方向问题:总体来讲,我个人认为嵌入式就两大方向,一个mcu+rtos,一个是linux。不要再说什么电机控制方向,wifi、蓝牙物联网方向等等,这些都是行业专精方向。什么叫做行业专精方向,就是你把基础学好以后,再根据不同的行业,学对应的行业知识。那基础是什么?基础就是mcu、rtos、linux都属于基础,至少我自己是这么理解的。因此,如果你是校招或者是刚入行的社招同志,把基础学好就足够找一份工作了。剩下的行业专精知识,去公司再学也不迟。理解清楚这一点后,再来看具体选择哪个方向。还是那句话,如果你时间比较多(什么叫做时间多,我个人认为要么大二开始,要么研一开始),我个人建议你mcu和linux都学,这样选择的机会更多一点。如果你时间不够,那你就二者选其一。如果你选mcu方向,行业内通常叫软硬件方向,就是硬件和软件你都要会的意思。那么这个方向多多少少会接触到硬件的,因此我建议你要有一定硬件基础。如果你以后想深耕该方向,那硬件就不止是要会基础知识了。综上:选择这个方向,我个人认为是一定要学模电和数电的。那在此处,也还是有粉丝朋友问我,模电和数电要全部学完吗?之前笔记就分享过,前期刚开始你不用全部学完,但模电的二极管、三极管、mos管、比较器、放大器这种基础你要会吧,电子元器件总要认得全吧,电容电感的作用总要了解吧。核心一句话,最低要求--看懂原理图!对于数电,最基础的进制转换要会吧,比如10的16进制你要知道是0xA等等。触发器、寄存器总要了解一下是什么吧,AD转换总要了解一下吧,有哪些存储器如ram和rom要了解吧。这个地方又有粉丝有问题了,需要一上来就学模数电吗?怎么学?学不进去咋办?对于这类问题,我个人建议是如果你觉得枯燥,那是因为你还没用到这个知识。因此,你可以先去学习stm32的点灯,那点灯的时候到底是输出一个低电平还是一个高电平呢?如果你搞不清楚,说明你不知道二极管的单向导电性,那你就回过头去看相关知识,书籍或者视频都可以(书籍和视频我学习路线完整版那篇笔记有说过,这里不再多加说明)。以这种先发现问题,再解决问题的方式去学习,就不会学不下去了,同时也会学的更加深刻,毕竟学习最怕的就是学了不用。此外,第二个建议是你可以直接去b站搜怎么看懂电路原理图,当你去听别人分析的时候,你不懂这是为啥?那是为啥?这个时候,你就知道自己应该去看书了,这样的学习方式也可以。那么上述关于mcu方向以及模数电该不该学?怎么学的问题就讲完了。多补充一点的是,如果已经在mcu方向拿完offer的校招同学,我个人建议你继续往linux方向学。原因是,等你进了公司,你会发现面试的时候,面的是mcu方向的,进来以后给你分到linux方向了。这只是有可能,也是一些特例。比如我自己就是这样,面的mcu,现在去在linux平台上干SoC。下边继续说一下第二个方向--Linux。linux方向相较而言,基本不碰硬件。比如博主现在硬件都没碰过,跑板子都是远程连接跑的,更别说原理图了。因此,如果你不想碰硬件,又想吃嵌入式这口饭,那建议往linux方向学习。在linux方向里边,驱动和应用都要学,并且个人建议先从应用方向学起。具体来说,个人建议按照以下顺序:学习c++-->学习linux环境基本操作-->学习gcc/make工具链-->学习linux应用(I/O、线程进程、网络编程、QT等)-->linux驱动(uboot/kernel/rootfs/gdb调试/三大设备驱动等),更加具体的学习路线以后再发,本期讲不完。本次讲解就到这里,有需要Linux驱动、Linux应用开发指南、Freertos开发手册、STM32开发指南、开源rtos项目、嵌入式软件八股文合集等资料的同学,可私信我领取    。
点赞 评论 收藏
分享
2025-12-22 11:54
已编辑
中山大学 算法工程师
最近秋招拿到offer的同学在问我一些offer抉择的问题,关于算法岗怎么选方向,尤其是业务岗和研究岗的区别。今天从几个维度聊聊这个问题。你的目标是落地还是探索?业务算法岗的核心价值在于解决问题,用成熟稳定的技术提升业务指标。日常工作围绕数据处理、特征工程和模型调优展开,最后通过A/B测试验证效果。岗位稳定、成果可量化是明显优势,但技术可能不够前沿,容易产生重复感。研究算法岗更像边界探索者,集中AI Lab这类部门。这里博士比例高,核心任务是做出比现有方案更优的算法创新,目标发表顶会论文。你能接触最前沿的技术,学术积累扎实,但成果不确定性高,压力也更大。你数全链路还是深钻型?业务岗需要全链路能力——懂业务逻辑、会特征工程、能上线部署,最终把技术转化为可量化的业务增长。研究岗则强调算法深度,要求扎实的数学功底和创新能力,更看重在细分领域的学术突破。如何选择?喜欢看到技术快速落地、享受清晰的业务反馈、工程能力强的同学,业务算法岗是更稳妥的选择。如果理论基础扎实、热衷前沿探索、能承受较高不确定性,研究算法岗的挑战和上限都更高,但要做好成果周期长的准备。不过研究岗可能有时候也需要做一点业务上的工作,这要根据部门实际情况来看。没有绝对的好坏,关键是匹配你当下的状态。业务岗是脚踏实地,研究岗是仰望星空,两者都在创造价值。选择前想清楚自己更看重什么,比盲目追求热门更重要。想了解更专业更具体的算法岗不同方向不同岗的要求,发展,前途等具体信息可以滴滴我本人拥有7年大厂算法岗经验,作为技术面面试官(含社招和校招),看过上千份简历,已面试超过上百位同学,面试和被面试经验十足,同时在ECCV/IJCAI/NeurIPS等顶会上发表过多篇论文和ACM获奖竞赛经历。职业规划 业务算法 #研究算法
你的小可爱555:帮顶,确实不错,专业能力强,已拿到面邀
点赞 评论 收藏
分享
评论
6
19
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务