01

前言

最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。

本文将嵌入式学习路线分为几个方面:

嵌入式基础必备知识

51单片机

STM32单片机

小而美的RTOS

ARM+LINUX

在这个快节奏的时代,能静下心,耐住性子看看文章,实属不易。

02

嵌入式基础知识

老子曰:“合抱之木,生于毫末:九层之台,起于垒土;千里之行,始于足下”,根基的重要性不言而喻。

那么对于嵌入式这条路线而言,如何建立一个稳固的根基?

2.1、学习内容

  • C语言基础

该部分,主要包括几个核心知识点:三大语法结构常用的数据类型函数结构体指针文件操作等。

  • 硬件基础知识

该部分,核心知识点在于:电路基础知识数电模电基础知识常用的电子元器件等。

  • 数据结构

核心知识点:数组队列链表堆栈散列表等。

  • 操作系统

核心知识点:进程管理内存管理文件管理输入输出管理等。

  • 计算机原理

核心知识点:数据表示和运算存储系统指令系统总线系统中央处理器输入输出系统等。

2.2、学习建议

  • 对于C语言基础学习,一定要重点熟练掌握,根基的牢固直接决定了我们的代码质量。

  • 对于硬件基础学习,要适当了解,要能够看懂一些简单的电路结构,认识常用的电子元器件。

  • 对于数据结构学习,前五个是必备学习的,可能在刚开始学习的时候,可能会感觉不到作用在哪里,但是随着接触到嵌入式底层设计以及算法设计的时候,才会恍然大悟。

  • 对于操作系统学习,重点学习其思想,对相关知识点有一个大概的了解,后续接触到继续重点学习,这些无论是RTOS,还是Linux,都有涉及到的。

  • 对于计算机原理学习,可以将其看作是嵌入式系统的各个模块的详解,会让你对嵌入式有一个整体的了解,每一个部分都值得深究。

2.3、学习资料

  • C语言基础:推荐经典书籍《C语言程序设计》(第2版)谭浩强版本

  • 硬件基础:大学里面的《数电模电》书籍所涉及的知识即可。

  • 数据结构:推荐经典书籍《数据结构》——严蔚敏版

  • 操作系统、计算机原理:我用的是《王道》的系列丛书,个人感觉不错。

计算机组成、数据结构、操作系统、数据库是嵌入式或者说计算机的入门必读书籍,并且也被列入高校教材内,是真正的基础知识。

以上,不一定是全部看完才能体验编程的乐趣,这个基础是一个循序渐进的过程,也不是一朝一夕就能完成的,可以先有一个大概,后续做项目时,哪里不懂补哪里!

这里涉及到一个重要的学习方法:项目导向的学习法。

03

嵌入式入门篇——51单片机

在上面的基础知识进行熟悉之后(C语言基础、计算机组成、硬件基础必备),我们准备叩开嵌入式世界的大门。

入门篇,依旧推荐51单片机,当然有人会说,直接上STM32岂不更好?

我的看法:建议新手还是以51单片机来入门,因为STM32体系架构比51大很多,对于新手刚开始可能会不太容易适应。

3.1、学习内容

该部分,主要在最小嵌入式系统中,实现各种有趣的实验。通过51单片机的学习,我们要做到:

  • 软件类

主要知识点有:认识单片机熟悉逻辑运算点亮一颗LED灯按键检测串口通信定时器中断等。

  • 硬件类

主要知识点有:电阻元器件了解基本模块电路了解时钟电路尝试绘制51单片机原理图和PCB

3.2、学习建议

  • 对于软件类,我们主要做到:认识单片机,熟悉单片机的GPIO的输入、输出操作,串口通信协议掌握等,这些部分都是任何一款嵌入式设备的必备技能

  • 对于硬件类:我们主要做到:能看懂电路图熟悉一些简单模块的设计电路,了解Altium Designer的使用方法。

3.3、学习资料

51单片机郭天祥的51单片机教程,经典著作,经久不衰,强烈推荐。

庄子说:“水之积也不厚,则其负大舟也无力。“

该部分,是嵌入式领域的基石,只有将基础打牢,才能负得起Linux泰坦号。

04

STM32进阶

STM32是C51的进阶版,拥有C51的基础知识,开发STM32会得心应手。

STM32的系统架构以及硬件设计相比于C51来说,都是上升了一个维度的,这也是为什么我推荐入门学习C51的原因。

STM32F407平台为基础,去学习目前嵌入式主流的一些技术,探寻底层的原理,做到不同平台,都能够得心应手。

4.1、学习内容

  • 基础练习

该部分,主要练习:点亮LED灯GPIO的输入输出操作中断操作UART通信IIC通信

  • 进阶练习

该部分,主要练习:DMA通信SPI通信CAN通信LCD显示屏ADC

  • 高阶练习

该部分,主要学习:STM32时钟架构总线架构电源管理代码框架SDIO通信USB通信等。

4.2、学习建议

  • 对于基础练习,主要目的是为了方便让我们从C51STM32环境的过渡。

  • 对于进阶练习,主要练习一些通信类相关的协议,可以结合一些传感器进行开发。

  • 对于高阶练习,主要目的是为了熟悉单片机的设计架构,编程的框架,以及一些更复杂的通信技术。

另外,STM32会有寄存器和库函数两个版本,建议交叉学习,理解会更加深刻。

4.3、学习资料

STM32单片机:推荐正点原子、野火的STM32F103或者STM32F407系列。

两家的学习资料都非常丰富,既有详细的文档说明,也有完整的学习视频教程,非常适合新手入门学习。

俗话说:“有道无术,术尚可求,有术无道,止于术”。要明白道和术的区别,不要本末倒置

05

小而美的RTOS

RTOS,实时操作系统,可以理解为STM32Linux之间的桥梁,由于其实现思想大都取之于Linux,所以也称之为精简版的Linux

我们常用的有实时操作系统有:UCOSVxWorkFreeRtos,近些年RT-Thread也异军突起。

学习这些简单的嵌入式系统,一来能够帮助我们为学习Linux操作系统打下基础,二来也能够扩宽我们的职业道路。

前面也说过了,无论是UCOSFreeRtosRt-thread,其内部的设计思想大同小异,下面主要以Ucos为例。

5.1、学习内容

  • 实时系统学习

该部分,主要学习:移植Ucos系统多任务管理调度算法消息队列信号量互斥量事件内存管理等。

5.2、学习建议

  • 对于实时系统学习,除了上述的那些核心知识点外,还要结合2.1 基础必备知识操作系统书籍加深理解。

5.3、学习资料

RTOS的学习:依旧推荐正点原子,野火,因为这些实时操作系统开发,可以基于STM32开发板,同时也有非常详细的文档和视频教学。

06

ARM+Linux篇

学习完RTOS后,基本嵌入式所涉及的技术已经掌握一半了,你也可以独立完成一些小的项目,也可以找到一个不错的工作,但是一定不要自我满足,有机会一定要接触Linux。

还是那句话:ARM+Linux,也是最为复杂的东西,如果你不去接触Linux,你永远不知道嵌入式的魅力。

Linux开发又分为驱动开发内核开发应用开发,每一个方向都需要几年甚至几十年的积累。

作为初学者,我们要做的就是宏观了解,扩大我们的知识面,然后去选择自己感兴趣的方面。

6.1、学习内容

  • Linux基础篇

该部分主要学习:Linux常用命令VIM学习Linux的Shell编程Gcc编译Makefile等。

  • 驱动篇

该部分主要学习:内核模块编译原理字符设备驱动框架平台设备驱动设备树Pinctrl子系统I2C子系统中断子系统块设备驱动框架Bootloader

  • 内核篇

该部分主要学习:系统调用存储管理进程管理内存管理文件管理等。

  • 应用篇

该部分主要学习:QT编程TCP/IP协议HTTP协议等。

6.2、学习建议

  • 对于基础学习,刚接触到Linux,一般比较难上手,与之前的单片机完全不同,需要一个熟悉环境的过程。

  • 对于驱动学习,重要在于明白“如何在Linux环境下编写驱动程序”,驱动的底层原理还是那样,加了一层层的框架,需要我们去熟悉。

  • 对于内核学习,上述也是系统的几大核心特色,重点在于"如何使Linux性能最优"

  • 对于应用学习,上述的几个方面也是基础,重点还在于开发什么应用,去学习哪方面的知识,没有定论。

对于Linux,有句老话“学习Linux,3年才算入门,5年才勉强算Linux工程师,对于不太熟悉的领域,博主也不敢妄加断言。”

6.3、学习资料

  • 对于基础学习,推荐《鸟哥的Linux私房菜》《Unix环境高级编程》等入门书籍。

  • 对于驱动开发,推荐《Linux设备驱动开发详解》Linux内核源码详解等。

  • 对于内核学习,推荐《Linux Shell脚本攻略》《深入理解Linux内核》等。

  • 对于应用开发,推荐《嵌入式Linux应用开发完全手册》《Unix网络编程》等。

  • 另外,推荐正点原子,野火,韦东山三个Linux开发教程,韦老师的课程好评居多,但还是看哪个更适合自己。

-END-


往期推荐:点击图片即可跳转阅读

23年电赛备赛内部会议

终于大学毕业了,聊聊这些年学嵌入式的体会吧。

只要加班给钱,我能让公司破产。

其实吧,学嵌入式也不是很难。相关推荐

  1. 北海哪里可以学计算机编程,编程真的很难吗?为什么会认为学编程难?

    学习蜜月期:这是一个充满喜悦的.非常容易取得成功的过程,借助精雕细琢的资源,你会解决那些看似很难,但全是可以攻破的问题.你会掌握基本的语法结构,对于取得的成就很开心. 迷雾悬崖:这是一个痛苦的自我实现 ...

  2. 计算机网络难学吗,计算机网络课程真的很难学吗-之续

    如果我们的教材是按照TCP/IP协议体系结构的层次来写,那么其中的章节一般应该包括:计算机网络概论.网络体系结构通述.物理层.链路层.共享介质访问控制(实质上讨论以太网).IP协议.传输层协议.应用层 ...

  3. 学C语言找女朋友很难吗?进来看看别人是怎么做的

    大学时上的那些课到底有什么用? 尤其是想和大家聊聊大学里的一个热(keng)门(die)课程:C语言 上了大学才知道,不是只有学计算机的孩子才学C语言. 作为理工类的基础课程之一,相信很多小伙伴都亲身 ...

  4. 程序员自学软件工程很难学吗

    程序员自学软件工程难在哪里呢?首先你要有一定的自觉性.自制能力.很多人从初中苦读到高中,考上大学的人都不差,肯定也下过一番苦功夫的,但是上了大学就放飞自我了,甚至在毕业后就再也没有碰过书本.让他静下心 ...

  5. 重庆工商大学c语言实验一答案,重庆工商大学嵌入式实验考试题目答案 - 副本.doc...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp嵌入式开发 重庆工商大学嵌入式实验考试题目答案 - 副本.doc ...

  6. gtk移植到嵌入式_物联网时代的盛行,应届毕业生是学嵌入式好呢,还是安卓或ios呢?...

    截至2019年7月1日,看了一遍所有答案,感觉挺有意思的,这里说别学嵌入式的人挺多的,并明示或暗示题主去移动开发.除了赞同「即将到来的物联网时代」是一个伪命题以外,以及感谢某些答案给我一些信息之后,下 ...

  7. 安徽工程大学C语言程序设计实验报告,安徽工业大学嵌入式实验报告.docx

    安徽工业大学嵌入式实验报告 <嵌入式系统实验报告>指导教师:陆勤姓名:程少锋学号:139074366班级:物联网131班实验一B 熟悉实验开发环境一.实验目的熟悉ADS1.2 开发环境,学 ...

  8. 学嵌入式有两个诀窍:勤奋刻苦+不要脸

    "最近看到很多学生朋友和我当年一样没有方向,所以把我的经历写出来与大家共勉,希望能给刚入行的朋友们一点点帮助." 一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MI ...

  9. 学嵌入式为什么要学Linux?

    学嵌入式为什么要学Linux? 2015年04月08日 16:04:49 Lmikic 阅读数 3098 首先,ARM只是一个32位处理器,可以像51单片机一样用汇编直接操作它的寄存器.RAM.ROM ...

最新文章

  1. 成功解决tornado.application - ERROR - Exception in callback <bound method Nanny.memory_monitor of <Nanny
  2. Windows下MinGW编译vim7.4
  3. 初一模拟赛总结(2019.5.25)
  4. Verilog HDL中位运算符、逻辑运算符和缩减运算符的区别
  5. Nodejs入门[在互联网上非常经常,非常疯狂的一个转载]
  6. slf4j + log4j2配置日志引擎
  7. SAP自学指南:案例公司的特点
  8. Python爬虫知识点四--scrapy框架
  9. 2022年MathorCup 赛题浅评
  10. Hi,传说中的《超级搜索术》你看了吗?来看看小编的超级总结吧!
  11. Flowable工作流引擎表用途整理
  12. IntelliJ IDEA 激活 破解补丁
  13. 计算机图像处理之形状变换
  14. 阿里云免费ssh证书的免费购买,创建、下载,部署证书详细步骤
  15. 动物miRNA靶基因本地预测(三)—— 靶基因预测与结果分析
  16. 计算机技术协会主持词,协会表彰大会主持词
  17. php中可以表示当前日期的函数,在PHP中,可以使用()函数来获取当前日期和时间...
  18. LeetCode 1061. Lexicographically Smallest Equivalent String
  19. python制作简易生词本
  20. 使用Vue CLI 3提升您的Vue.js工作流程

热门文章

  1. ADC值转换为电压值(机械语言得出电压值)
  2. getRealPath
  3. 2022我的Android大厂面试之旅,350道Android面试真题分享
  4. 3 Genymotion的安装与使用
  5. 加域时提示找不到网络路径
  6. 为什么使用消息队列、消息队列优缺点和适用场景?
  7. android中android:layout_marginBottom的不起作用问题
  8. win10 安装msi程序异常解决,使用msiexec命令安装
  9. msiexec.exe进程介绍及如何修复被丢失的msiexec.exe系统文件
  10. 猜数字游戏——c语言