一名初级嵌入式软件工程师该学什么?初级嵌入式软件工程师入门学习路径推荐

嵌入式软件工程师入门指南

一、前言

最近我朋友的弟弟要学嵌入式,作为前辈,当初按照其他前辈的入门指南学习也踩过些坑,所以干脆就自己在整了一个,且是给朋友弟弟看的,就写的通俗详细点(废话多点)。

但毕竟我也才入门不久,对嵌入式学习路径有个基础的认知,可能说的也一些问题或表达不够清晰或者疏漏的,希望大家能够点赞收藏,也望大佬在评论区指点,然后学就完了~~

先展示大致学习路径

C语言 –>数据结构–>数字/模拟电路 –>单片机 –>FreeRTOS –>Linux –>Linux驱动

接下来就详细说说每块内容大致要学习什么

二、C 语言

(一)C 语言介绍

首当其冲的就是 C 语言了,学软件肯定是要学习编程语言的,每个编程语言都在某个领域有着突出的优势,比如说 Java 更适合做网站的后端开发、Python 更适合做人工智能等。

C 语言更不用说,作为古老又长青的编程语言,因为较早的出现以及简单高效的特性,它率先抢占了市场,导致了目前大多数的嵌入式产品都是用C语言编写的(占比大概百分之五六十)。

所以其实大多数编程语言都是可以做嵌入式开发的,只是用 C 语言的人比较多而已。

(二)学习视频推荐

接下来就说说 C 语言大概要学些什么吧!(不用学的太多,难的也基本用不上)

学习路径我推荐两个,一个是我学的鹏哥的视频,一个是浙江大学翁恺的视频。

鹏哥的视频是讲的更加精细,有时候会结合习题,所以更好打基础

翁恺的视频主打的就是快速入门,还能了解到计算机基础知识(不过我没看多少)

看你时间充不充裕了,毕竟基础不牢地动山摇,下面是视频链接

比特鹏哥c语言2023完整版视频教程

浙江大学翁恺教你C语言程序设计

(三)学习内容

报菜名环节,建议学完之后看看下面的内容有没有学到,或者先只学这些内容,时间紧张嘛就快速过一遍,能看得懂代码就行

  1. 搭建 C 语言的编程环境
  2. 第一个程序Hello World
  3. 变量
  4. 数据类型
  5. 表达式
  6. 判断
  7. 循环
  8. 数组
  9. 二维数组
  10. 函数(定义、参数、变量、调用等)
  11. 数组运算
  12. 搜索
  13. 排序
  14. 指针
  15. 宏定义
  16. 枚举
  17. 结构体
  18. 字符串

(四)实战建议

学完还是实战一下,比如做个小游戏,或者去做做简单的C语言题目,游戏我就没什么推荐的了,我C语言没做过游戏项目,做题的话推荐个网站,你可以每天做一两道,巩固下知识对吧。下面是链接:

选择题:牛客网专项练习 (nowcoder.com)

写代码简单模式:C 语言经典100例 | 菜鸟教程 (runoob.com)

写代码困难模式:题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台

三、数据结构与算法

(一)数据结构与算法介绍

如果你尝试在 LeetCode 刷了算法题,就知道一个道理:为什么我明明基础知识都学了,为什么完全解不出题目的痛苦,就像做数学题一样,我们缺乏了解题的思路,数据结构与算法可以说就是给你拓宽思路的知识一样,教你在遇到什么情况下可以更快更高效的解决一道题目。

在学数据结构之前,你实现一个功能也许会写几十上百行代码才行,但是学了数据结构之后,你也许可以通过一个思路,仅用几行代码就实现了功能,这就是数据结构与算法的重要性。

(二)学习视频推荐

说实话,我看到数据结构与算法是Java的,也不知道给什么推荐,就按B站高播放量的来了,你也可以自己搜索找想看的。下面是链接:

数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili

数据结构零基础教程数据结构与算法

(三)学习内容

毕竟是扩宽解决问题思路的内容,你可以草率些,了解其中的基本概念就行,下面我只列出建议一定要学的知识,其他知识也可以学,自然是懂得越多越好的

  1. 数据结构基本概念(如时间复杂度、空间复杂度这些基础知识也包括在内)
  2. 线性表
  3. 堆栈
  4. 队列
  5. 树,二叉树
  6. 排序算法
    • 冒泡排序、插入排序
    • 快速排序
  7. 查找算法
    • 二分查找
    • 顺序查找

四、电路基础

(一)数字/模拟电路介绍

数字/模拟电路是个纯理论的东西了,也挺枯燥的,但又很重要,毕竟要走的是嵌入式软件开发的方向,与Java那种软件开发的方向不同,我们需要经常性的接触一些硬件比如说:Led灯、电阻、电容、开关、各种元器件模块,也就难免的要知道这些硬件在原理图中是什么样的:

在这里插入图片描述

数字/模拟电路能帮助我们快速熟悉电路知识以及一些原理图,所以其中的基础知识是必要的,同时其也能更好的帮助我们了解单片机实现功能的逻辑,让我们在学单片机不至于太懵。

当然,也只是基础知识是必要的,更加深入的东西可以暂时不了解(后面学习暂时用不到)

(二)学习视频推荐

这真的是先了解,学了单片机后再回来温习才是最有效果的,入门快的就是黑马的嵌入式开发入门模电了,下面是链接:

黑马程序员嵌入式开发入门模电(模拟电路)基础,从0到1搭建NE555模拟电路、制作电子琴,集成电路应用开发入门教程

(三)学习内容

报菜名环节,只说必要的知识,这里也包含了一些计算机基础知识:

  1. 数制转换(二进制、十进制、十六进制以及相互转换)
  2. 逻辑门(与或非以及他们的组合、TTL、MOS、CMOS等)
  3. 译码器、编码器、计数器、寄存器、触发器等控制器
  4. 各种存储器如RAM、ROM、EEPROM、FLASH等
  5. AD和DA转换也可以看看,这个不太影响后面学习,但知道会在学单片机脑瓜子清晰些

五、单片机

(一)单片机介绍

说实话,你可以在学完C语言之后直接来学习单片机知识(如果你能听得懂单片机的课程的话)

单片机的英文名是MCU,意思是微控制器,其实跟手机芯片、电脑芯片一样,单片机把对数据处理的功能放在了一个芯片中,将一个计算机系统集成在了一个芯片上。

那单片机与手机芯片、电脑芯片有什么区别吗?自然是有的,单片机MCU又称微控制器,重点就在这个"微"字,指明了它是个小而简单的物品,单片机无法像电脑手机芯片一样处理过于复杂的功能,单片机只能实现相对简单的功能,甚至对于实现功能所需要的内存空间也需要注意(芯片有个专门存储软件的地方,我们写好程序后会通过烧录器将程序烧录到芯片中,因为存储有限,程序过大也许无法存储,当然一般来说不会)

但也正是它体积小、实现功能简单,它本身的价格也就非常的低廉,也因此广泛应用,常见到过马路时的红绿灯、家用电器微波炉、空调、车载系统、监控、导航等等,只要是需要通过软件来控制功能的,基本都是嵌入式。

(二)学习视频推荐

单片机可以说是非常的多,以前国外各厂卷芯片,国内也卷,造成的是市面上有成千上万的单片机,型号也是各异,不过它们的实现逻辑其实大同小异,因为内核都来自一个公司。

有这么多芯片,自然有特别突出的,比如说51系列的单片机和32系列的单片机,这两个系列也有学习使用的经单款:STC89C52STM32F103C8T6

这两款也是接下来要学习视频用到的芯片了,视频按照顺序学习,其中51单片机可以选择跳过,但最好还是学,视频推荐如下:

51单片机入门教程-2020版

STM32入门教程-2023版

其中,STM32 使用的是标准库版本,实际工作用到的却基本是 HAL 库版本,学习时最好学标准库版本(便于理解),学完标准库后也可以去学习 HAL 库版本。

(三)实战建议

单片机的学习,就得按照视频一一学了,我就不详述学习内容了,直接提点实战建议。

实战建议有很多,比如很多参加电赛的人,都会做的平衡、循迹小车
网图-平衡车
因为学的是STM32,所以就推荐STM32的实战视频了,下面是链接:

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

如果你想做一些物联网项目的话,比如智能家居(远程控制灯的开关之类的),这些需要元器件与网络连接来驱动,所以需要WIFI、蓝牙功能,这就需要学习其他的芯片如ESP32。也可以通过STM32与ESP8266连接来实现WIFI连接的功能,项目推荐的话,我就推荐我学习做过的,下面是链接:

【挽救小白第一季】STM32+8266+小程序智能家居毕设实战

六、FreeRTOS

(一)FreeRTOS介绍

至此,其实已经可以找一份嵌入式软件开发的工作了(也可以说单片机开发),继续学下去,能得到的提高自然越多,FreeRTOS 的学习视频基本都要用到视频up主做的板子,所以需要额外的购买花销,有些将的FreeRTOS课程还是结合了 STM 的 Hal 库版本,这里你可以先去学习下 Hal 库版本。

接下来来介绍一下 FreeRTOS:

先说说单片机,当你学了单片机之后,就会发现其将主要的程序都写在一个while()循环内,除了一些需要特殊处理的事情(比如中断),只会跑while(),C语言又是按顺序执行程序的,所以在同一时刻(瞬间),单片机只能运行一项功能。

举个例子,就比如你现在在打游戏,突然有朋友给你发消息了,你要么继续打游戏,打完了再回复消息;要么停止目前的游戏,去回复信息。

以上的情况,FreeRTOS 就能解决同一时刻只能做一件事的问题。

FreeRTOS 是 免费的嵌入式实时操作系统,没有操作系统的嵌入式开发称作单片机的裸机开发。

(二)学习视频推荐

视频推荐方面,你可以学韦东山的 FreeRTOS 开发,也可以学 正点原子的,真对比的话肯定是原子哥讲的课清晰易理解;韦东山是学习时长短、板子用各种模块组装的,元器件可以拆到做其他的事情(甚至用江科大的 stm32 开发套件都行,就是要自己动手连接线路了),视频推荐如下:

正点原子 手把手教你学 FreeRTOS 实时系统

韦东山 FreeRTOS入门与工程实践(FreeRTOS教程 基于STM32,以实际项目为导向)

(三)学习内容

毕竟 FreeRTOS 的源码就七八千行,功能就那些,其实挺简单的,大概说说,接下来是报菜名环节:

  1. FreeRTOS 移植
  2. 任务创建和删除
  3. 任务挂起与恢复
  4. 中断
  5. 优先级和阻塞
  6. 任务管理和调度
  7. 列表
  8. 任务切换
  9. 同步互斥与通信
  10. 队列
  11. 信号量
  12. 事件组
  13. 任务通知

七、Linux 与 Linux 驱动

(一)Linux 介绍

我在讲述单片机时,也说过,单片机有一块存储程序的地方,以stm32f103c8t6为例,这个地方就是 Flash(有的单片机用的EEPROM),而其 Flash 的大小只有 64 K,肯定装不下 windows 这样几个G大小的。

这时候你要么考虑选择 Flash 容量大的,要么考虑用外部存储设备存储数据(SD卡、外部EEPROM),但是这些方式成本都明显的上去了,运行程序的速度也不如直接存在 Flash 里(Flash读写速度是超级快的)

所以 FreeRTOS、Linux这些小巧却功能健全的 OS 才这么适合做为嵌入式开发的首选 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 使用后,先进行基础巩固才更加合适。

接下来就是报菜名环节:

  1. 安装虚拟机
  2. 常用 Linux 指令
    • cd
    • ll
    • mkdir
    • rmdir
    • cp
    • mv
    • rm
    • touch
    • ln
    • cat
    • find
    • vi
    • tar
    • ping
    • curl
  3. vi / vim
  4. shell 编程

下面链接是 Linux 命令大全,Linux 的使用挺简单的

Linux 命令大全 | 菜鸟教程 (runoob.com)

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 成为一名嵌入式软件工程师需要学习以下几项技能: 1. 熟练掌握 C/C++ 编程语言 2. 了解嵌入式系统的基本结构和工作原理 3. 了解常用的嵌入式系统设备(如微控制器、传感器、外设等)的驱动编写 4. 熟悉常用的嵌入式开发工具(如编译器、调试器、烧录器等) 5. 了解常用的嵌入式操作系统(如Linux、FreeRTOS等)的使用 6. 熟练掌握嵌入式系统的硬件原理,如电路设计,单片机设计等 7. 了解嵌入式系统的常用通信协议,如串口通信,网络通信,I2C,SPI等 8. 熟悉嵌入式系统常用的编程技巧和调试方法 9. 了解嵌入式系统的安全性和可靠性。 ### 回答2: 要想从零开始成为一名嵌入式软件工程师,你需要学习以下内容: 1. 编程语言:首先你需要学习一种或多种常用的嵌入式编程语言,如C、C++或汇编语言。这是开发嵌入式系统的基础,你需要掌握语法、数据结构和算法,以及如何在嵌入式环境中使用它们。 2. 嵌入式系统架构:了解嵌入式系统的硬件和软件架构,包括处理器体系结构、外设接口和总线协议等。这将帮助你理解如何与硬件交互,并编写高效的嵌入式软件。 3. 操作系统:理解嵌入式操作系统的工作原理,比如实时操作系统(RTOS),以及如何使用其提供的功能和服务。掌握任务调度、内存管理和设备驱动等概念对于开发稳定和可靠的嵌入式系统至关重要。 4. 嵌入式开发工具:学习使用嵌入式开发工具集,如集成开发环境(IDE)、编译器、调试器和仿真器。这些工具可以帮助你编写、调试和测试嵌入式软件,并优化系统的性能和功耗。 5. 电子学基础知识:了解电路设计、数字和模拟电子元件、传感器和接口等基础知识,能够理解硬件电路和嵌入式软件之间的互动。 6. 实践项目:通过参与实际的嵌入式项目,锻炼你的实际操作和问题解决能力。可以自己制作小型嵌入式系统,或参与开源项目,与其他开发者合作,提升技能和经验。 7. 持续学习和实践:嵌入式技术发展迅速,时刻关注新的技术和行业趋势,并不断学习和实践,保持专业技能的更新和提升。 总之,成为一名嵌入式软件工程师需要学习编程语言、嵌入式系统架构、操作系统、嵌入式开发工具、电子学基础知识,并通过实践项目不断提升自己的技能和经验。 ### 回答3: 要从0开始成为一名嵌入式软件工程师,需要学习以下内容: 1. 编程语言:掌握C和C++是非常重要的,因为大部分嵌入式系统的开发都是使用这两种语言进行的。学习这些语言的语法和特性,以及如何应用到嵌入式开发中。 2. 计算机体系结构:理解计算机的基本原理,包括中央处理器(CPU)、内存、输入输出等组成部分的工作原理和互联关系。熟悉嵌入式系统所采用的特定体系结构,如ARM、AVR等。 3. 操作系统:学习操作系统的原理和特点,了解嵌入式系统中常用的操作系统,如嵌入式Linux、FreeRTOS等。掌握任务调度、内存管理和设备驱动等方面的知识。 4. 电子硬件基础:了解电子电路、模拟与数字电路、传感器和执行器等基本电子元器件的原理和工作方式。学会使用示波器、逻辑分析仪等常用的测试和调试工具。 5. 嵌入式开发工具和平台:熟悉使用嵌入式开发环境,如编译器、调试器、仿真器等。了解常见的开发板和开发工具,如Arduino、Raspberry Pi等。 6. 算法和数据结构:掌握常用的算法和数据结构,如排序、查找、链表、树等。熟悉各种算法的特点和适用场景,为嵌入式系统的优化和性能提供支持。 7. 嵌入式系统设计与开发学习嵌入式系统的整体设计过程,包括需求分析、架构设计、模块划分、接口设计等。掌握嵌入式软件开发的常用技术和方法,如面向对象设计、事件驱动编程等。 同时,积极参与开源项目、实际项目或者自己动手做一些小项目,通过实践来提高实际操作能力和解决问题的能力,逐渐深化对嵌入式软件工程师的理解和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值