本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发

本文主要是介绍本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言
到了毕业季,很多朋友仔细如何学习嵌入式,这个问题其实很难以回答,每个人的具体情况都不一样,也没有什么万能的方法,保证大家都能学好嵌入式。本篇文章,博主将结合我自己的经历和理解,谈论下博主自己的学习路线,希望能够对大家有所帮助。 大家需要根据自己的水平看自己当前处于什么阶段的。
一般嵌入式学习(以stm32为例)中,主要集中在四个方面:C语言、STM32(外设及内核)、RTOS、工具链。接下来将详细的阐述下,上述四个方面该如何学习,如果是本身没什么基础的同学,可以直接按照博主说的学习,博主本人就是这么学习的。

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

C语言

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

开发环境

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

C语言入门

C语言的视频视频B站很多,大体上没有太大差距吧(指内容),博主自己也只是看过一些郝斌的C语言视频,这个可以看看,博主学习的时候更喜欢看书,主要是看书信息接受效率高。这里推荐一本C语言入门级别书籍:《C程序设计语言》,作者是布莱恩·克尼汉,丹尼斯·里奇。C语言创始人写的一本书,非常经典,在世界上都享有盛名。大名鼎鼎的Hello world程序就是这本书提出来的。这本书的经典程度网上一搜就有,博主就不多赘述了,用它作为C语言入门书籍完全没问题。书里面的代码风格也是值得借鉴学习的,非常建议读一读该书。 

在这里插入图片描述

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

在这里插入图片描述
这三本书应该读哪个?

这三本书,博主都研究过。三本书的内容有不少重复的地方,看完一本之后,另外两本看的也挺快的。如果有时间的话,建议三本都看看,时间不够的话,就只看《C与指针》这一本也行,这本书内容详实,有入门有提高,从浅到深,也可以拿来入门C语言。至于其他的书籍,博主因为没有过多研究,就不推荐了。以上C语言的资料学习完成之后,基本上对于C语言有了较深入的理解了,应付平常开发应该没有太大的问题。 

stm32

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

stm32基础

stm32芯片里面的内容其实非常多,但作为初学者,并不需要关心特别高深的内容。我们只需要掌握stm32常用的开发以及基本的知识点。博主根据自身的开发经验和经历,总结了如下常用的外设:GPIO、UART(串口)、中断、TIMER(定时器)、AD、DA、SPI、I2C、PWM、DMA。这些外设都是非常常见的,基本上所有的ARM芯片都会有。上述外设的学习可以不分先后,但还是推荐按照上面的顺序进行。除此之外,还要学会使用一款开发工具链(推荐Keil,毕竟是ARM公司的)。能够掌握基本的Keil使用方法就行了。比如多文件编译、调试仿真、常见配置等。学习完基本的外设之后,就可以动手写一些简单的项目,巩固所学知识。这些项目博主以后都会放到公众号里面,供大家免费下载学习,也会出一些文章,讲解项目的思路,供大家学习。

stm32进阶

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

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

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

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

硬件主线

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参考手册》配合起来一起学习。 

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

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

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

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

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

stm32深入

这部分内容属于较深入的技术了,适合对技术(工资)有追求的同学,需要静下心来,慢慢研究的技术。这些技术都是较深入的,如果连上面的内容(指入门、提高部分)都学不会的话,这些内容还是算了,别为难自己,即学不懂,学了也没啥用(水平不够,用不到)。这里只放一下学习大纲,有兴趣的自己学习。

C语言
在这里插入图片描述
芯片内核
在这里插入图片描述
Keil提高
在这里插入图片描述
FreeRTOS
在这里插入图片描述

学习方法

这里嵌入式技术,是工程类技术要通过实践为主,这里推荐这个实战项目:

  1. STM32智能小车 手把手和整个开发过程都记录十分方便学习掌握
    基于HAL库的,里面有驱动开发,也有PID算法、适合入门加进阶学习。

STM32智能小车V3-STM32入门教程-openmv STM32循迹小车stm32f103c8t6-电赛 嵌入式 PID控制算法 编码器电机 跟随 电磁循迹

然后这也有标准库的

[stm32入门教程][STM32实战项目]STM32智能小车V1.5-stm32f103c8t6-stm32最小系统-手把手入门教程-嵌入式开发-嵌入式学习

参考文章与书籍:
嵌入式C语言自我修养:添加链接描述
添加链接描述

这篇关于本专业不好找工作,也许可以试试嵌入式 嵌入式学习路线 从C语言到MCU开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114822

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁