赞
踩
最近我朋友的弟弟要学嵌入式,作为前辈,当初按照其他前辈的入门指南学习也踩过些坑,所以干脆就自己在整了一个,且是给朋友弟弟看的,就写的通俗详细点(废话多点)。
但毕竟我也才入门不久,对嵌入式学习路径有个基础的认知,可能说的也一些问题或表达不够清晰或者疏漏的,希望大家能够点赞收藏,也望大佬在评论区指点,然后学就完了~~
先展示大致学习路径
C语言 –>数据结构–>数字/模拟电路 –>单片机 –>FreeRTOS –>Linux –>Linux驱动
接下来就详细说说每块内容大致要学习什么
首当其冲的就是 C 语言了,学软件肯定是要学习编程语言的,每个编程语言都在某个领域有着突出的优势,比如说 Java 更适合做网站的后端开发、Python 更适合做人工智能等。
C 语言更不用说,作为古老又长青的编程语言,因为较早的出现以及简单高效的特性,它率先抢占了市场,导致了目前大多数的嵌入式产品都是用C语言编写的(占比大概百分之五六十)。
所以其实大多数编程语言都是可以做嵌入式开发的,只是用 C 语言的人比较多而已。
接下来就说说 C 语言大概要学些什么吧!(不用学的太多,难的也基本用不上)
学习路径我推荐两个,一个是我学的鹏哥的视频,一个是浙江大学翁恺的视频。
鹏哥的视频是讲的更加精细,有时候会结合习题,所以更好打基础
翁恺的视频主打的就是快速入门,还能了解到计算机基础知识(不过我没看多少)
看你时间充不充裕了,毕竟基础不牢地动山摇,下面是视频链接
报菜名环节,建议学完之后看看下面的内容有没有学到,或者先只学这些内容,时间紧张嘛就快速过一遍,能看得懂代码就行
学完还是实战一下,比如做个小游戏,或者去做做简单的C语言题目,游戏我就没什么推荐的了,我C语言没做过游戏项目,做题的话推荐个网站,你可以每天做一两道,巩固下知识对吧。下面是链接:
写代码简单模式:C 语言经典100例 | 菜鸟教程 (runoob.com)
写代码困难模式:题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台
如果你尝试在 LeetCode 刷了算法题,就知道一个道理:为什么我明明基础知识都学了,为什么完全解不出题目的痛苦,就像做数学题一样,我们缺乏了解题的思路,数据结构与算法可以说就是给你拓宽思路的知识一样,教你在遇到什么情况下可以更快更高效的解决一道题目。
在学数据结构之前,你实现一个功能也许会写几十上百行代码才行,但是学了数据结构之后,你也许可以通过一个思路,仅用几行代码就实现了功能,这就是数据结构与算法的重要性。
说实话,我看到数据结构与算法是Java的,也不知道给什么推荐,就按B站高播放量的来了,你也可以自己搜索找想看的。下面是链接:
数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili
毕竟是扩宽解决问题思路的内容,你可以草率些,了解其中的基本概念就行,下面我只列出建议一定要学的知识,其他知识也可以学,自然是懂得越多越好的
数字/模拟电路是个纯理论的东西了,也挺枯燥的,但又很重要,毕竟要走的是嵌入式软件开发的方向,与Java那种软件开发的方向不同,我们需要经常性的接触一些硬件比如说:Led灯、电阻、电容、开关、各种元器件模块,也就难免的要知道这些硬件在原理图中是什么样的:
数字/模拟电路能帮助我们快速熟悉电路知识以及一些原理图,所以其中的基础知识是必要的,同时其也能更好的帮助我们了解单片机实现功能的逻辑,让我们在学单片机不至于太懵。
当然,也只是基础知识是必要的,更加深入的东西可以暂时不了解(后面学习暂时用不到)
这真的是先了解,学了单片机后再回来温习才是最有效果的,入门快的就是黑马的嵌入式开发入门模电了,下面是链接:
黑马程序员嵌入式开发入门模电(模拟电路)基础,从0到1搭建NE555模拟电路、制作电子琴,集成电路应用开发入门教程
报菜名环节,只说必要的知识,这里也包含了一些计算机基础知识:
说实话,你可以在学完C语言之后直接来学习单片机知识(如果你能听得懂单片机的课程的话)
单片机的英文名是MCU,意思是微控制器,其实跟手机芯片、电脑芯片一样,单片机把对数据处理的功能放在了一个芯片中,将一个计算机系统集成在了一个芯片上。
那单片机与手机芯片、电脑芯片有什么区别吗?自然是有的,单片机MCU又称微控制器,重点就在这个"微"字,指明了它是个小而简单的物品,单片机无法像电脑手机芯片一样处理过于复杂的功能,单片机只能实现相对简单的功能,甚至对于实现功能所需要的内存空间也需要注意(芯片有个专门存储软件的地方,我们写好程序后会通过烧录器将程序烧录到芯片中,因为存储有限,程序过大也许无法存储,当然一般来说不会)
但也正是它体积小、实现功能简单,它本身的价格也就非常的低廉,也因此广泛应用,常见到过马路时的红绿灯、家用电器微波炉、空调、车载系统、监控、导航等等,只要是需要通过软件来控制功能的,基本都是嵌入式。
单片机可以说是非常的多,以前国外各厂卷芯片,国内也卷,造成的是市面上有成千上万的单片机,型号也是各异,不过它们的实现逻辑其实大同小异,因为内核都来自一个公司。
有这么多芯片,自然有特别突出的,比如说51系列的单片机和32系列的单片机,这两个系列也有学习使用的经单款:STC89C52、STM32F103C8T6
这两款也是接下来要学习视频用到的芯片了,视频按照顺序学习,其中51单片机可以选择跳过,但最好还是学,视频推荐如下:
其中,STM32 使用的是标准库版本,实际工作用到的却基本是 HAL 库版本,学习时最好学标准库版本(便于理解),学完标准库后也可以去学习 HAL 库版本。
单片机的学习,就得按照视频一一学了,我就不详述学习内容了,直接提点实战建议。
实战建议有很多,比如很多参加电赛的人,都会做的平衡、循迹小车
因为学的是STM32,所以就推荐STM32的实战视频了,下面是链接:
[stm32入门教程][STM32实战项目]STM32智能小车V1.5-stm32f103c8t6-stm32最小系统-手把手入门教程-嵌入式开发-嵌入式学习
如果你想做一些物联网项目的话,比如智能家居(远程控制灯的开关之类的),这些需要元器件与网络连接来驱动,所以需要WIFI、蓝牙功能,这就需要学习其他的芯片如ESP32。也可以通过STM32与ESP8266连接来实现WIFI连接的功能,项目推荐的话,我就推荐我学习做过的,下面是链接:
【挽救小白第一季】STM32+8266+小程序智能家居毕设实战
至此,其实已经可以找一份嵌入式软件开发的工作了(也可以说单片机开发),继续学下去,能得到的提高自然越多,FreeRTOS 的学习视频基本都要用到视频up主做的板子,所以需要额外的购买花销,有些将的FreeRTOS课程还是结合了 STM 的 Hal 库版本,这里你可以先去学习下 Hal 库版本。
接下来来介绍一下 FreeRTOS:
先说说单片机,当你学了单片机之后,就会发现其将主要的程序都写在一个while()循环内,除了一些需要特殊处理的事情(比如中断),只会跑while(),C语言又是按顺序执行程序的,所以在同一时刻(瞬间),单片机只能运行一项功能。
举个例子,就比如你现在在打游戏,突然有朋友给你发消息了,你要么继续打游戏,打完了再回复消息;要么停止目前的游戏,去回复信息。
以上的情况,FreeRTOS 就能解决同一时刻只能做一件事的问题。
FreeRTOS 是 免费的嵌入式实时操作系统,没有操作系统的嵌入式开发称作单片机的裸机开发。
视频推荐方面,你可以学韦东山的 FreeRTOS 开发,也可以学 正点原子的,真对比的话肯定是原子哥讲的课清晰易理解;韦东山是学习时长短、板子用各种模块组装的,元器件可以拆到做其他的事情(甚至用江科大的 stm32 开发套件都行,就是要自己动手连接线路了),视频推荐如下:
韦东山 FreeRTOS入门与工程实践(FreeRTOS教程 基于STM32,以实际项目为导向)
毕竟 FreeRTOS 的源码就七八千行,功能就那些,其实挺简单的,大概说说,接下来是报菜名环节:
我在讲述单片机时,也说过,单片机有一块存储程序的地方,以stm32f103c8t6为例,这个地方就是 Flash(有的单片机用的EEPROM),而其 Flash 的大小只有 64 K,肯定装不下 windows 这样几个G大小的。
这时候你要么考虑选择 Flash 容量大的,要么考虑用外部存储设备存储数据(SD卡、外部EEPROM),但是这些方式成本都明显的上去了,运行程序的速度也不如直接存在 Flash 里(Flash读写速度是超级快的)
所以 FreeRTOS、Linux这些小巧却功能健全的 OS 才这么适合做为嵌入式开发的首选 OS
我们都知道,汽车里有个车载系统,现在的汽车都很智能,能检测周围障碍物,能自动停车一堆功能,那他用的是什么系统呢?
肯定不是 windows 操作系统对吧,不同于电脑,为了更贴合当前的车型,并实现各自独有的功能,汽车开发了独属于一个系列甚至一个车型的车载操作系统 ,而这些车载操作系统基本是基于用 Linux 驱动研发出来的。
Linux 驱动是一种允许计算机操作系统与其他硬件设备进行交互的软件。它可以帮助操作系统控制和管理硬件设备的功能,并使其能够正常运行。
在车载操作系统中,Linux驱动可以用于支持各种传感器、控制器和其他设备的功能。
作为超级无敌实用的 Linux ,自然优质的课程百花齐放,黑马、韩顺平、尚硅谷的 Linux 教学视频,都通俗易懂易理解,但这些都主要学的还是 Linux 的使用、指令、Shell (当然也很好),毕竟咱要学 Linux 驱动为主,所以我就推荐了韦东山的Linux 应用驱动开发课程了:
【韦东山】韦东山手把手教你嵌入式Linux快速入门到精通 | Linux应用驱动开发基于I.MX6ULL/STM32MP157/T113/D1H开发板
当你学完 Linux 基本使用时,你已经属于是初级嵌入式软件工程师了,学了 Linux 驱动、内核这些自然是更上一层楼。
但学完 Linux 使用后,我们更应该的是巩固基础,熟悉 C 语言、单片机知识、学习熟悉开发工具(xshell、vim、git、串口助手灯)、扩展知识(WiFI、蓝牙等)、仿真调试、数据结构与算法、网络协议、C 语言代码规范等等内容。
为什么要学这些,因为嵌入式开发工程师深入后有更多细分方向,比如你可以选择继续做单片机开发;或者是选择做驱动开发;学好各种协议后,可以走应用开发方向;其他的还有网络开发方向、人工智能方向等等
不同的方向要学习的内容也天差地别,所以我才建议学完 Linux 使用后,先进行基础巩固才更加合适。
接下来就是报菜名环节:
下面链接是 Linux 命令大全,Linux 的使用挺简单的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。