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

一、写在前面

感谢在 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 吉迷哥个人主页-哔哩哔哩视频

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenRTP 传输增加OpenRTPServer

开源地址 最近增加了OpenRTPServer, 已经修改完成一版放在了目录下,window和linux下编译都成功了,不过由于修改代码CMakefile 需要修改,先放放 OpenRTP开源地址 vlc得纠错传输方式 我发现我代码写错以后,vlc 依然能…

重要:民族共同体精品课格式说明

铸牢中华民族共同体意识精品课以微课形式呈现,包括微课 视频、教学设计讲义、课件等。 微课视频 微课视频应采用“教师讲解多媒体大屏”的形式,适当呈现授课教师画面,增强教学的交互性和画面的可视性。单个微课视频时长:高校专题…

【已解决】cannot import name ‘Literal‘ from ‘typing‘

问题描述 在用vscode进行debug的时候,报错cannot import name Literal from typing 解决方法 方法一:升级Python版本到3.8以上 我的python版本是3.7,但由于环境都配好了,升级太麻烦,没采用该方法 方法二&#xff1…

C++和Java该如何进行选择?

曾经的自己与许多C程序员都有着一样的盲目自信:认为掌握了C,在去学习Java上手会容易很多。 到底是谁给了你这种勇气和自信? 很多人经常会说,Java这种通过虚拟机运行的语言,虚拟机本身就是C开发的,根本就没…

Java 多线程(九)—— JUC 常见组件 与 线程安全的集合类

Callable 与 FutureTask Callable 接口和 Runnable 接口是并列关系,都是用来给线程提供任务的,只不过 Callable 接口的任务可以带有返回值。 但是 Callable 接口创建的任务不能直接传入 Thread 里面,这也是为了 解耦合,我们可以使…

pdf合并,这4款好用软件分分钟解决问题!

PDF作为一种跨平台、不易被篡改的文档格式,广泛应用于工作、学习和日常生活中。然而,当面对多个PDF文件需要合并成一个时,繁琐的手动操作往往让人头疼不已。别担心,今天就给大家安利4款超实用的PDF合并软件,它们不仅操…

c++二级指针

如果要通过函数改变一个指针的值&#xff0c;要往函数中传入指针的指针 如果要通过函数改变一个变量的值&#xff0c;那就要往函数中传入这个变量的地址 改变a的值和b的值 #include <iostream>using namespace std;void swap(int* a, int* b) {int temp *a;*a *b;*b …

pyvideotrans 最佳AI翻译软件

文章目录 体验视频翻译配音工具主要用途和功能预打包版本(仅win10/win11可用&#xff0c;MacOS/Linux系统使用源码部署)MacOS源码部署Linux 源码部署Window10/11 源码部署源码部署问题说明使用教程和文档语音识别模型:视频教程(第三方)软件预览截图相关联项目致谢 体验 不错&a…

根据Redis漏洞通知的整改修复过程

一、收到通知&#xff1a; 二、查看本校“宝山商城&#xff08;教学&#xff09;”已安装的Redis版本号 对照影响范围的版本号&#xff0c;在其内&#xff0c;所以需要升级Redis版本。 三、升级centos中的Redis版本 在Cent0S系统中&#xff0c;如果我们需要升级Redis版本&…

C++,STL 048(24.10.25)

内容 set容器对内置数据类型、自定义数据类型指定排序规则。 运行代码 &#xff08;1&#xff09;内置数据类型 #include <iostream> #include <set>using namespace std;// set容器默认排序规则为升序&#xff08;从小到大&#xff09;&#xff0c;可以通过仿函…

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…

基于SSM+微信小程序考试的管理系统(考试1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序考试的管理系统实现了管理员及用户。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;考试资料管理&#xff0c;用户交流管理&#xff0c;试卷管理&#xff…

新能源汽车充电设施在储充电站的应用

0引言 全球能源和环境问题促使新能源汽车受到关注&#xff0c;但其推广受充电设施和能源供应限制。光伏站、储能站和电动汽车充放电站作为可再生能源利用和储存方式&#xff0c;具有巨大潜力。本研究旨在探索新能源汽车充电设施与这些站点的融合模式&#xff0c;以支持新能源汽…

【ROS GitHub使用】

提示&#xff1a;环境配置为Ubuntu20.04&ROS Noetic 文章目录 前言一、创建工作空间目录二、尝试从GitHub上下载一个源码包&#xff0c;对它进行编译&#xff0c;运行这个源码包1.打开script文件夹&#xff0c;右键文件夹空白区域&#xff0c;选择在中端中打开&#xff1b;…

OceanBase 安全体系解析之身份鉴别

本文作者&#xff1a;金长龙爱可生测试工程师&#xff0c;负责 DMP 产品的测试工作。 本文以MySQL为参照&#xff0c;详细阐述了OceanBase 在MySQL模式下的安全体系中&#xff0c;身份鉴别的能力&#xff0c;涵盖了身份鉴别机制、用户名的构成规则、密码的复杂度&#xff0c;以…

ctfshow(66->70)--RCE/命令执行漏洞--禁用命令执行函数

Web66 源代码&#xff1a; if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }代码审计&#xff1a; POST传参c&#xff0c;eval进行代码执行。 思路&#xff1a; 由于题目过滤了命令执行函数&#xff0c;所以使用其他方法进行RCE。 先使用c…

自定义类型1:结构体的深入学习

文章目录 前言一、结构体类型的声明1、结构体回顾1.1、结构体声明1.2、结构体变量的创建和初始化 2、结构的特殊声明3、结构体的自引用 二、结构体的内存对齐1&#xff0c;什么叫偏移量2、对齐规则3、为什么存在内存对齐4、修改默认对齐数 三、结构体传参四、结构体实现位段1、…

通过异地组网工具+RustDesk实现虚拟局域网使用远程桌面RDP

通过异地组网工具RustDesk实现虚拟局域网使用远程桌面RDP 预期效果 常见的远程桌面工具就不多说&#xff0c;麻烦而且不好用 QQ 使用普及率高 卡顿、延迟高 TeamViewer 功能强大、兼容性好 官方查询商业用途频繁 向日葵 安全性高、支持多种设备 强制登录、免费用户限速、限…

详解varint,zigzag编码, 以及在Go标准库中的实现

文章目录 为啥需要varint编码为啥需要zigzag编码varint编码解码 zigzag编码解码 局限性 为啥需要varint编码 当我们用定长数字类型int32来表示整数时&#xff0c;为了传输一个整数1&#xff0c;我们需要传输00000000 00000000 00000000 00000001 32 个 bits&#xff0c;而有价…

Oracle CONNECT BY、PRIOR和START WITH关键字详解

Oracle CONNECT BY、PRIOR和START WITH关键字详解 1. 基本概念2. 数据示例3. SQL示例3.1. 查询所有员工及其上级3.2. 显示层次结构3.3. 查询特定员工的子级 4. 结论 在Oracle数据库中&#xff0c;CONNECT BY、PRIOR和START WITH关键字主要用于处理层次结构数据&#xff0c;例如…