导航菜单
首页 >  材料研究生需要学的基础软件  > 嵌入式学习路线,从小白到大佬(30K),这一篇就够了

嵌入式学习路线,从小白到大佬(30K),这一篇就够了

引言

    很多同学在跟博主私聊的时候,经常问博主该如何学习嵌入式。这个问题其实很难以回答,每个人的具体情况都不一样,也没有什么万能的方法,保证大家都能学好嵌入式。本篇文章,博主将结合我自己的经历和理解,谈论下博主自己的学习路线,希望能够对大家有所帮助。

    一般嵌入式学习(以stm32为例)中,主要集中在四个方面:C语言、STM32(外设及内核)、RTOS、工具链。接下来将详细的阐述下,上述四个方面该如何学习,如果是本身没什么基础的同学,可以直接按照博主说的学习,博主本人就是这么学习的。

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

导航栏

01 【 C语言】

02 【stm32】

03 【浅谈学习方法】

04 【常见问题简答】

05 【薪资水平】

01 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语言有了较深入的理解了,应付平常开发应该没有太大的问题。

02 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 软件主线

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

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

中间件:有精力的话,可以学习一些常见中间件的使用,如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时用得到,也是面试中常问的内容。

    在软件主线、硬件主线之间,还有一个就是工具链,主要是编译器在

相关推荐: