关于嵌入式学习的一些短浅经验

一、写在前面

感谢在 10.23,各位大佬对我进行的模拟面试,我也发现了我对知识的不熟练的部分,比如 IPC 方法和线程同步方法的知识。模拟面试第四期-已经拿到大厂 OFFER 的研究生大佬-LINUX 卷到飞起_哔哩哔哩_bilibili

然后,沈阳小神仙 up 也问了我,给一些刚入门的同学,关于嵌入式学习的建议。

其实,我也就学了三四年,还是一个嵌入式小菜鸡,Linux 也是刚入门,只能做一些建议以及谈谈自身的学习经验。

我直播的时候给出了一个暴论,"让他们别卷嵌入式了",这里补充一下:

  • 如果像我一样只是一个双非,就别搞 Linux 驱动开发了(岗位饱和,需要 bg),把 RTOS 和 MCU 学精了,比如,去现在风口的汽车电子企业就很好了;
  • 如果你是 92 佬,就可以去冲一冲 Linux 的开发,保底找个应用开发应该可以的,也有机会拿到驱动岗;
  • 还有可以选择硬件开发,双非也有机会进入芯片原厂,比如,唯一给我机会的一个芯片原厂,他虽然是软件开发岗,但是是偏向于给芯片写测试的,对模电硬件理论要求高。

学习过程的总结就一句话:多动手做,比如一块屏幕怎么点亮,在裸机、RTOS、LINUX 都可以试试,10.1 寸的屏幕可以点,那么 3.1 寸的呢?怎么上报一个触摸?等等。

下面我会给出一些学习路线和教程视频链接,从这几个方面:

  • 嵌入式软件-单片机与实时操作系统开发
  • 嵌入式软件-Linux 学习
  • 硬件知识学习(对于软件工程师)
  • 嵌入式硬件学习

韦东山课程学习路线:

新的系列详细参考ARM 单片机/RTOS 入门嵌入式 Linux 快速入门

二、嵌入式软件-单片机与实时操作系统开发

嵌入式软件是基于设计好的电路板,进行软件的开发,实现所需要的功能,使用的语言一般是 C 语言。这一块需要一些些电路和数电的基础(因为要看得懂原理图),一些微机原理的知识(这个学了单片机应该没啥问题了就),需要计算机 408 的四个科目的知识。

2.1 编程语言

c 语言:知道基础语法,不用再去学了,如果你大致学过了,就遇到什么问题学那一块的,或者去查相关的资料,不要再全部听一遍了没意义。

数据结构:链表,栈,队列

这些学习直接去搜索或者看书即可

2.2 入门

2.2.1 STM32

不建议从 51 单片机开始学习了,学 HAL 库(ST 提供的封装函数库-硬件抽象层),便于 STM32 项目快速部署。

学习过程中需要多动手操作,多去翻看手册!理解

【正点原子】手把手教你学 STM32 HAL 库开发全集【真人出镜】STM32 入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili

这个教程有 199 节课,其实后面都是各种模块的实验,都是类似的,可以用到什么再去看什么。

建议至少看到 113 节定时器部分;然后把后面的 ADC/DAC/IIC 部分也学习一下。

嵌入式学习路线,本人从单片机开始学习的,先推荐一些 STM32 的学习资料,然后给出韦东山百问网的教程学习路线

建议看正点原子、野火、杨桃电子(原杜洋工作室)或韦东山百问网的免费教程。非常好。四选一,购买买对应的开发板即可

【正点原子】手把手教你学 STM32 HAL 库开发全集【真人出镜】STM32 入门教学视频教程 单片机 嵌入式

【野火】STM32 HAL 库开发实战指南 教学视频 手把手教学 STM32 全系列 零基础入门 CubeMX+HAL 库

【洋桃电子】STM32 入门 F4:F407+CubeMX+HAL 库(CubeIDE)+蓝牙 WIFI ESP8266+原创例程+独家 PPT 图表(更新中)

【百问网】韦东山 HAL 快速入门与项目实战(更新中)

2.2.2 FreeRTOS

实时操作系统的引入可以开发根据复杂的系统了,而不是上面裸机的一个线程的简单程序。

理论课程:

韦东山 freeRTOS 快速入门 (100ask.net)

韦东山 freeRTOS 系列教程:FreeRTOS 的内部机制_哔哩哔哩_bilibili

2.3 实践

2.3.1 蓝桥杯部分试题

目的主要是熟悉 HAL 库,以及 ST 提供的库代码生成工具 CubeMX。

快速根据要求完成项目,培养一个软件的思维

2.3.2 MQTT 智能家居(STM32F103+HAL+FreeRTOS)

学习 HAL 库,FreeRTOS 的应用

毕设级项目:基于 STM32F103-PRO 开发板-使用 MQTT 实现智能家居 (100ask.net)

2.4 进阶

进阶学习的话就可以学习一些国产的芯片使用,他们很可能不是使用 hal 库,而是使用标准库封装,但是殊途同归,底层都是操作寄存器。更加丰富的实时操作系统 RT-thread。

2.4.1 GD32

立创·天空星 STM32/GD32【快速入门 即学即用】_哔哩哔哩_bilibili

2.4.2 RT-thread

有了 freeRTOS 的基础可以直接看官方文档教程,写得非常好

新手指导 (rt-thread.org)

三、嵌入式软件-Linux 学习

学习规划:这里引用各方观点,都是我觉得有道理的。

【正点原子】学习嵌入式 Linux 到底学什么?来看看左盟主怎么说

【Linux 驱动开发工资很高!听听正点原子左盟主聊一下驱动开发技术方向和学习路线】

韦东山老师的建议:Linux 驱动开发岗位并不仅仅是写"驱动",在实际工作中"写驱动的工作并不多",很多时候仅仅是修改驱动、适配驱动。所以"驱动开发工程师"实际上是"底层系统工程师",需要你了解整个系统:从 u-boot 移植、内核裁剪、驱动开发、文件系统映像制作 都要了解。更高端的需要你深入理解内核,比如进程管理、内存管理 等等,目的是:当系统出现故障时,你要从整个系统的角度分析问题、解决故障,并且从系统的角度优化 产品:OTA 升级的方案、如何节省成本、如何优化系统比如快速启动。

  • 入门:通过学习驱动程序成为"底层系统工程师"是很好的路径,因为"内核大部分是由驱动组成的",我们就先学习驱动。
    Linux 驱动=驱动框架+硬件操作,硬件操作的占比很小,更复杂的是驱动框架。你要"领悟"的是驱动框架的套路,怎么做。

  • 系统:u-boot 基本很少改,知道启动流程即可;内核裁剪:大概知道内核启动流程、知道 make menuconfig 接口;重点是镜像的制作,这需要 2 方面的知识:文件系统里 init 程序启动流程,制作镜像的脚本。这部分知识零散,但是不难。

3.1 应用开发

看书就行,正点原子的**《嵌入式 Linux C 应用编程指南》、《UNIX 环境高级编程(第三版)》**(我还在看,经典永不过时!)

然后,去做项目,在使用过程中,理解应用编程接口、多线程多进程等等。

项目的话,先推荐韦东山老师的 Linux 项目,在 b 站上,都是免费的。

反正很多,去搜索的话。

3.2 驱动开发

入门:

子系统学习

迅为的文档和课程也都值得看一看。还讲了设备模型,这部分我是看别的教程都没有单独详细讲解的!

北京迅为电子的个人空间-北京迅为电子个人主页-哔哩哔哩视频

3.3 操作系统

推荐南京大学的蒋炎岩老师,专业、前沿、课程通俗易懂、深入浅出。

绿导师原谅你了的个人空间-绿导师原谅你了个人主页-哔哩哔哩视频

书籍:《奔跑吧 Linux 内核》

四、硬件知识学习(对于软件工程师)

学会看懂原理图就可以了,可以看下面这些,然后在学习第一部分单片机开发过程中,跟着教程多去查看原理图就可以了

极速入门数模电路 开箱认识电子元器件 全新面包板入门电子制作 P01_哔哩哔哩_bilibili

五、嵌入式硬件学习

嵌入式硬件是做硬件电路的设计,大公司会分为画原理图的和画 PCB 的,这一行需要电路,数电,模电等等科目的知识。(找工作非常好,没有软件那么卷,工资也不低)

数电、模电、信号处理(有些雷达公司要求)

PCB 吉迷哥的个人空间-PCB 吉迷哥个人主页-哔哩哔哩视频

请点击左侧菜单 (移动端为右下角)选择要查看的所有笔记吧。

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心7 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552714 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552718 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552719 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节