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

一、写在前面

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp+uniCloud前端独立开发全栈项目Vue3版本学习路线,轻松开发H5、微信小程序、APP

概述 嗨,大家好,我是爱搞知识的咸虾米,这个学习路线是uniappuniCloud生态开发微信小程序、H5、APP等实战项目,从零基础开始到各种类型的项目案例,使用比较新的vue3语法糖版本,通过前端的技术可以轻松开发上…

微信小程序——消息订阅

首先用到的就是wx.requestSubscribeMessage接口。 注意:用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面 requestSubscribeMessage() {uni.requestSubscribeMessage({tmplIds: [],//需要订阅的消息模板的id的集合,一次调用最多可…

Docker 常用命令全解析:提升对雷池社区版的使用经验

Docker 常用命令解析 Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个可移植的容器中。以下是一些常用的 Docker 命令及其解析,帮助您更好地使用 Docker。 1. Docker 基础命令 查看 Docker 版本 docker --version查看 Docker 运行…

向量检索学习记录

1、Faiss Faiss是一个用于高效相似搜索和密集向量聚类的库;(支持单个/多个GPU)官方文档:Home facebookresearch/faiss Wiki GitHub 安装(如果编译有问题,有些选项需要关下,比如GPU, Python&a…

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域,但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

微信机器人自动回复了解下

现在使用微信来做私域营销和维护客户的非常多,在工作上会频繁地遭遇客户提出的相同问题,当我们的好友数量众多时,手动逐个回复可能会耗费大量的时间。 幸运的是,多微管理系统的自动回复功能为我们带来了福音。帮助咱们解决这一难…

原创作品——GIS和监控软件设计

这套数据可视化大屏软件UI设计旨在提供一个直观、高​‌‌效且易于理解的界面,用于展示和分析大量的能源数据和信息。以下是关于该系统UI设计的详细介绍: 整体布局与设计风格: 界面以蓝色调为主,代表冷静、专业和科技的氛围。 布…

VisualStudio2022配置2D图形库SFML

文章目录 1. 下载安装SFML库2. 创建C项目并配置SFML配置include目录和库目录链接SFML库配置动态链接库 3. 测试 1. 下载安装SFML库 SFML(Simple and Fast Multimedia Library)C库,适合2D游戏和图形界面,提供了以下模块&#xff1…

通过conda install -c nvidia cuda=“11.3.0“ 安装低版本的cuda,但是却安装了高版本的12.4.0

问题 直接通过 conda install -c nvidia cuda"11.3.0"安装得到的却是高版本的 不清楚原理 解决方法 不过我们可以分个安装 runtime toolkit 和 nvcc 安装指定版本的 cudatoolkit 和 nvcc conda install -c nvidia cuda-cudart"11.3.58" conda instal…

电机学习-SVPWM合成原理

一、核心理论 SVPWM 算法的理论基础是平均值等效原理 ,即在一个开关周 T s T_s Ts​内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。 引用于《现代永磁同步电机控制原理及MATLAB仿真》 二、合成原理 在扇区 I 为例: 矢量 U o…

【实用知识】Spring Boot 优雅捕捉异常的几种姿势

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3

改进yolo11-DLKA等200全套创新点大全:路面坑洼检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者视频可…

【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程

引言 OpenAI 推出的 DALLE 工具因其能够生成令人惊叹的艺术作品而备受瞩目。DALLE 不仅能够生成静态图像,还能根据用户的需求进行风格化处理,创造出独特的艺术作品。通过 OpenAI 的 API,你可以轻松将 DALLE 的强大功能集成到你的 Python 程序…

单反相机内存卡误删照片怎么办?别急,这里有恢复方法

在摄影的世界里,单反相机无疑是众多摄影爱好者与专业摄影师的首选工具。它不仅能够捕捉细腻丰富的画面细节,还提供了高度的操作灵活性和可扩展性。然而,在使用单反相机的过程中,我们难免会遇到一些技术上的困扰,其中之…

【网络面试篇】三次握⼿、四次挥手综述

目录 一、三次握手 1. 过程描述 2. 为什么不是四次握手?为什么不能两次握手? 二、四次挥手 1. 过程描述 2. 为什么是四次挥手? 一、三次握手 1. 过程描述 ① 客户端 向 服务器 发送 SYN 报文、初始化序列号 ISN(seqx&…

自定义鼠标事件在拖拽中的使用

目标: 显示鼠标在容器元素中划过时经过的元素,但是容器内肯能会出现大量元素,所以直接给容器元素添加click事件,通过elementFromPoint的API模拟子元素被点击事件效果 看看效果吧 涉及的重要对象 MousEvent 参考 MDN 相关代码 operateCont…

[项目详解][boost搜索引擎#2] 建立index | 安装分词工具cppjieba | 实现倒排索引

目录 编写建立索引的模块 Index 1. 设计节点 2.基本结构 3.(难点) 构建索引 1. 构建正排索引(BuildForwardIndex) 2.❗构建倒排索引 3.1 cppjieba分词工具的安装和使用 3.2 引入cppjieba到项目中 倒排索引代码 本篇文章,我们将继续项…

C++《vector的模拟实现》

在之前《vector》章节当中我们学习了STL当中的vector基本的使用方法,了解了vector当中各个函数该如何使用,在学习当中我们发现了vector许多函数的使用是和我们之前学习过的string类的,但同时也发现vector当中一些函数以及接口是和string不同的…

在Postgresql中对空间数据进行表分区的实践

在数据库管理中,合理地对数据进行分区可以提高查询性能和数据管理效率。 本文将详细介绍在Postgresql中对空间数据进行表分区的实践过程。 测试计算机容量有限,测试最大数据量为1,000,000条。 关键字: Postgresql PostGIS 表分区 空间数据 测试计算…