全姿势!MCU/Linux 双形态学习方案

一、学习方向选择

以下仅代表笔者个人看法:嵌入式软件总体分为linux和mcu方向。这两个方向的应用场景不同,导致无法在同一份工作中既做Linux,又做mcu。因此,如果在时间不充裕的情况下,大家根据自身情况挑一个方向去学习就够了。

mcu方向(也称为嵌入式软硬件方向)更专注于软硬件结合,也就是说除了软件部分之外,还需要懂硬件。如果在软件和硬件分的没那么开的公司,作为一名嵌入式软件工程师,不仅要自己写代码,还需要自己画原理图,画PCB。在软硬件分开的情况下,基本要求是要能看的懂电路原理图,这也是大多数转行者很容易忽视的点。

linux方向由于岗位较少,通常需要驱动/内核/应用一起做,仅有部分公司或者原厂才会放出单一的岗位出来,如单独的linux驱动岗位,内核/应用岗位等,这个方向比较偏软件一点。但由于岗位较少,门槛也就稍微高一些。

二、mcu方向学习路线

0基础的同学建议按照步骤走(再次重申是个人看法,如果你觉得不对,就不要看下去了):

1、掌握基本电路知识,重点主要为电容、电感及滤波电路,还有一个傅立叶变换(可以看刘陈版本的电路分析基础这本书或者是b站进行学习)

2、模电(主要掌握二极管、稳压管、三极管、mos管、放大电路、运算放大器、反馈电路);

笔者个人推荐的书籍是黄丽亚的第三版模拟电子技术基础,学完前7章就够了。当然,也可以选择其他版本的,看个人喜好。

3、数电(主要掌握进制转换,反码补码、逻辑电路、触发器、寄存器、AD转换及存储器知识),推荐书籍为华中科技大学的电子技术基础(数字部分)。上述三步就是为了打牢硬件基础,能看懂电路原理图。

4、接下来学习一款EDA工具的使用,不要再去学嘉立创了!企业里边只有三大EDA工具:Altium Designer/Candence/Pads,任意挑一个去学习。个人比较推荐学习AD,可以在b站上看凡亿教育的课程进行学习。

5、学习C语言,个人还是推荐谭浩强红色的那本高校书籍,当然也有其他优秀课程,大家可以自行选择。C语言的学习是一个持续加深的过程,前期先掌握基础就行,需要学习的是前1-7章,第8章的指针变量/数组指针,第9章的结构体/共用体/枚举/typedef。

6、学习stm32,不要再浪费时间去学51老古董了。个人推荐正点原子,资料很充足,按照资料学基本就够了。同时一定要学标准库,前期不要把精力浪费在学hal库上,hal库等后边自己看一下就行。学习方法是买一款开发板(F1/F4都可以),跟着资料一步一步学,掌握基本常用外设如串口/GPIO/定时器/中断/PWM/输入捕获/LCD/ADC/IIC/SPI/485

7、做完上述步骤,恭喜你已经打好基础了,进一步继续深入学习c语言的提高部分,把前边说的第8章的二维指针/数组指针/指针数组等等指针的高阶用法掌握,以及动态内存分配函数等;还有第9章的链表;此处笔者推荐看人民出版社的c和指针一书,进行c语言的加深学习。这本书需要掌握如编译的底层原理/指针的高阶用法/递归函数/单向或者双向链表/预处理器等。

8、完成c语言的进阶学习之后,开始学习stm32内核,这里推荐看CM3权威指南这本资料,主要看前9章内容,至少要知道寄存器组/PendSV/SVC/systick定时器等,为学习RTOS打好基础。

9、开始学习RTOS,自行挑选一款rtos进行学习(ucos/freertos/rt-thread),笔者是同时学了ucos和free,个人比较推荐从ucos学起(也是正点原子的资料),毕竟资料比较多,底层原理讲的比较细,比如任哲老师的嵌入式实时操作系统原理及应用就是以ucosii进行讲解的。当然大家也可以选择其他的,这个阶段建议还是多看资料,少看课。因此笔者并没有什么推荐的课程。

ps:到这一步要开始做32和rtos的项目了,做完项目以后就可以去投实习/秋招,这个程度已经够找工作了。

10、学习常用数据结构:数组/堆/栈/链表/树/哈希表/队列,图不要求掌握,树学二叉搜索树就够,在弄清楚基本数据结构以后再去力扣上进行刷题,比如要知道栈不仅可以用数组实现,还可以用链表实现。

ps:这一步想进大厂必不可少,毕竟面试都是要手撕的!

11、学习RTOS源码,弄清楚任务调度/任务通信/时钟及延时/内存管理等。为什么要先去学习数据结构再回来看rtos源码,就是因为其源码中包含大量链表和队列的使用,如freertos中列表与列表项中涉及到双向链表的插入和删除操作,这样才能看得懂源码。

ps:到这一步已经够卷了,笔者觉得不用担心找不到工作了。接下来说的东西可以入职以后再进行学习

12、其他通用中间件的学习,如网络协议(mqtt/lwip协议等),选一个进行学习。还有图形库lvgl/ewmin等,也是选择一个进行学习。学习方法也是找资料,我依然用的是正点原子。

13、学习代码版本管理工具git的使用,需要掌握常用命令,如克隆,提交,上传以及创建分支等。学习方法笔者推荐是看官网。

三、linux方向学习路线

linux方向笔者还在摸索中,因此就简单说一下

1、先学会使用linux系统,学会Linux基本命令使用,学习方法推荐b站尚硅谷。

2、学习gcc、make工具链的使用及makefile脚本。

3、学习c++,主要掌握面向对象特性,如类和对象/继承/重载/多态/封装/虚函数/智能指针/动态内存等。推荐书籍为c++ primer第五版以及菜鸟编程网站。

4、Linux应用编程,如进程/线程、文件io、网络编程等。推荐资料--正点原子。

5、学习QT开发,推荐资料正点原子。

6、Linux下的裸机开发(推荐买板子学习,如imx6ull;掌握常用外设以及CortexA处理器架构),推荐资料--正点原子或者韦东山。

ps:学习linux驱动需要有电路原理图能力。

7、Linux驱动开发(结束裸奔,上操作系统了, 包括移植uboot/linux内核/根文件系统等、掌握Linux三大类驱动,包括字符设备/块设备/网络设备驱动),同时需要掌握GDB调试。

嵌入式软件工程师面试完全指南

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

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

全部评论
技术这行啊,要学的东西太多了
点赞 回复 分享
发布于 10-31 20:21 陕西

相关推荐

一、关于看资料还是看视频以下仅代表笔者个人看法,仅供参考。笔者主要推荐通过资料进行学习,如果有不理解的地方再配合视频进行学习。因为笔者认为看资料的效率会更高,接收的知识更成体系,防止看了视频还是一知半解的状态。个人推荐的资料如下(以freertos为例): 《FreeRTOS开发手册》、《CM3权威指南》、 《嵌入式实时操作系统原理及应用》、 《FreeRTOS实时内核使用指南》《操作系统精髓与涉及原理》(这是本书,可自行购买);此处先把所有资料列出来,后续再讲解什么时候用到某个资料(有需要上述资料的同学,私信我即可领取)。除此之外,多说一点的是:个人建议先补好C语言基础知识和数据结构的基础知识再来学习RTOS。因为RTOS里边存在大量的指针高阶用法,如函数指针/指针函数/二维指针等;以及数据结构,最典型的就是链表,Freertos里边还涉及到环形链表。因此,先将这些基础打牢固,再来学RTOS的时候就更加水到渠成一些。二、RTOS学习路线0基础的同学建议按照以下步骤走:1、学习任务基础知识:先打开书《操作系统》 (百度也行)了解一下什么是操作系统?为什么要用操作系统?个人习惯是再用一个东西之前, 需要了解为什么。其次打开《 FreeRTOS开发手册》以及《freertos内核使用指南》,学习任务的基础知识。包括什么是任务、任务的几种状态、任务优先级、任务堆栈、TCB及简单了解任务的调度等。2、学习移植RTOS:还是打开Freertos开发手册,跟着教程一步一步移植操作系统。这里的移植不仅是让你把源码移植进工程里,还需要你明白如何进行相应的中端配置、移植文件的修改、 以及内核裁剪的系统配置(可能到这一步的时候,有些东西你不知道为什么,先不用管,后边学了原理再来看)。3、学习简单的rtos使用:打开Freertos内核使用指南或者freertos开发手册,学习rtos中API 的参数、作用、以及使用示例。这里的API至少了解任务的创建、删除、挂起、延时(至少知道延时的时候会发生任务调度)、信号量等。上述目的就是让你先学会用,用的过程中就会自然而然的出现问题,接下来就知道该去探究原理了。4、学习rtos原理:打开《CM3权威指南》,学习以下重点知识即可:第二章、第三章(寄存器组、control寄存器等)、第7章(SvC和PendSV重点、其他的也是重点)、第8章(Systick定时器是重点,其他的也是重点)、 第9章主要了解中断入栈时push进哪些寄存器、 取向量、更新寄存器、异常返回等内容即可。4.1、了解完CM3架构的基础知识后,打开《嵌入式实时操作系统原理及应用》,主要了解任务调度算法,学习任务到底是如何切换的,需深刻理解任务切换实际上为堆栈指针切换这句话。ps:笔者在小红书发布了freertos学习合集,也可以配合起来看看,其中发布了任务切换原理的视频讲解。5、看RTOS的源码:此时之前学习的c基础和数据结构基础就可以派上用场了。看源码可以直接在工程里打开代码看,也可以打开《FreeRTOS开发手册》,里边也有相关源码的解析。建议看源码的顺序按照以下来:创建任务函数--开启多任务调度函数(看一下任务切换原理的代码怎么实现的)--队列--信号量等(也可以配合freertos内核使用指南)接下来需要重点看的是systick中断函数以及delay函数源码,主要了解Systick怎么作为rtos 时钟使用的,delay函数怎么实现任务切换的, 任务如何从阻塞态到就绪态的、相对延时和绝对延时的区别等。ps:到这一步也可以选择做一些rtos项目帮助理解各个API的用法、原理。要做到分析代码的执行时序是怎样的。6、学习rtos 的内存管理以及空闲任务:FreertoS开发手册就有详细介绍,需要了解什么是内存碎片,各种内存管理方法的优缺点是什么、空闲任务的作用,此处也要去看源码怎么实现的。7、进阶:继续学习FreeRTOS的软件定时器、 低功耗Tickless模式及时间标志组等。了解清楚原理,如何使用,建议也分析一下源码,看如何实现的。最后,本次分享就到这里,上述只是笔者个人的一些建议,希望能给大家带来一定的参考。找不到上述资料的可私信我领取。
点赞 评论 收藏
分享
评论
2
22
分享

创作者周榜

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