本科阶段嵌入式方向技能树

项目介绍

这是一个电子科技大学软件学院本科阶段计算机体系结构学习&嵌入式开发的公开课/书籍/Blog/资料整理的项目,如果你有贡献的想法:

  1. 可以直接提交Pull Request
  2. 如果你是嵌入式工作室成员,请联系@starFalllfyxformal@gmail.com),@StevenXu98steven_xu98@163.com)等UESTC404组织的所有者,邀请你加入 UESTC404 中

学习资源分享

技能图谱

基础知识

作为一名软件学院的本科生,必须牢牢掌握以下计算机相关的知识:

技能点名称 技能点内容
编程语言 C语言, C++, Python
算法和数据结构 链表,栈,队列,字符串,二叉树,图,查找,排序,以及一些面试中经常考察的模板例如动态规划,滑动窗口,快慢指针,寻找第 K 个最大的元素等等
软件工程 编写文档, 代码质量, 自动化测试, Code Review, 持续集成工具
编译原理 编译器构造及各部分功能
计算机体系结构 CPU原型机, 总线, 存储,
操作系统 进程管理, 内存管理, 文件系统, …
计算机网络 OSI五层模型, TCP/IP协议栈, Linux网络编程, …

嵌入式方向

如果你对嵌入式方向有兴趣,需要掌握以下技能:

技能点名称 技能点内容
开发平台 CPU: Intel x86 x64, ARM64
MCU编程:C51, STM32
FPGA
嵌入式开发软件 Keil uVision, STM32Cube, JTAG debugger, System Viewer
嵌入式Linux Bootloader, Driver, …
实时操作系统 uCOS, FreeRTOS, ROS(严格来说是ROS2)
外设 Timer, ADC / DAC, ROM / RAM, PWM, I/O / GPIO, …
执行器 电机(步进, 无刷, 舵机, …), 电调, FOC
传感器 陀螺仪, 加速度计, 超声波, 红外, …
电子元件 电容, 电阻, 开关, 二极管, 晶振…
通信协议 Bluetooth, Zigbee, Wifi, UART, TCP, UDP, I2C, …
电路 PCB设计, 元件焊接
仪器 万用表, 示波器, 信号发生器, 逻辑分析仪, …

借一张导师的经典老图,差不多就这个学习路线。

image-20220115150133350

编程语言

C语言

书籍推荐:

名称 作者 介绍
C语言程序设计现代方法 K. N. King 入门推荐读物,讲解清晰
C与指针 Kenneth A·Reek 进阶读物,“C语言三剑客”之一
C陷阱与缺陷 凯尼格 进阶读物,“C语言三剑客”之一,重点讲解C中的注意事项
C专家编程 Peter van der Linden 进阶读物,“C语言三剑客”之一

资源推荐:

C++

书籍推荐阅读顺序:

阅读顺序 名称 作者 介绍
1 C++ Primer [美] Stanley B. Lippman / [美] Josée Lajoie / [美] Barbara E. Moo C++最经典教程
2 Effective C++ 梅耶 (Scott Meyers) C++开发必读经典
3 STL源码剖析 侯捷 理解STL源码必读
4 深度探索C++对象模型 [美] Stanley B·Lippman 从编译器层面认识C++对象模型

资源推荐:

Java

Python

汇编 - X86

汇编 - ARM

算法和数据结构

名称 作者 介绍
数据结构 邓俊辉 国内质量最高的数据结构课程,推荐在MOOC上跟学,教材链接

工具链

在大一上学完C语言之后,推荐自学一门课:MIT 的 The Missing Semester of Your CS Education,可以翻译为计算机科学课堂中学不到的知识。B站链接.

这门课会教你使用各种工具链,比如 在终端下Bash Shell 编程,VIM 编辑器,正则表达式,Git 版本控制,profiler, SSH 配置远程环境等等。灵活地使用工具链能极大地提高你的工作效率。

你可以考虑运用在这门课上学到的知识,在大一下的时候在 Github 上搭一个自己的博客。

版本控制:Git

编译工具:Makelile

嵌入式开发软件

  • Keil uVision
  • STM32Cube
  • jtag debugger

MCU编程

51单片机

STM32

学习指南

内核:多参考ARM Crotex M3/M4权威指南,结合《计算机组成原理》和《ARM处理器及应用》相关课程内容进行理解。需要了解的知识点有启动流程、中断流程、时钟树……

外设:对于MCU编程来说外设的学习主要分为以下步骤

  1. 硬件构造,例如挂载到哪个时钟总线上,硬件上是否需要依托其他外设工作……

  2. 协议原理,搞清楚通信协议内容和规则,了解下通信的信号是怎么样的。

  3. 寄存器功能,参考芯片《用户手册》详细了解外设相关寄存器功能,有多少个相关寄存器,每个寄存器是干什么用的,每一位又有什么用。

  4. 代码模仿,去原子、野火这些地方找点样例代码,学习下代码结构,让外设工作起来需要哪些配置步骤。

  5. 上手实践,自己去实现一套外设驱动,多尝试不同的配置不同的功能。

搞定这几个环节应该就能把相应的外设基本搞清楚,也能实现简单的功能了,接下来就是灵活应用,深入了解其中原理了。

嵌入式Linux

书籍推荐

名称 作者 介绍
LKD3 Robert Love linux内核的设计与实现,非常经典的入门书籍。可帮助理解操作系统
ELDD Sreekrishnan Venkateswaran linux设备驱动详细解读,稍难,是linux设备驱动相关的经典书籍。
Linux内核源代码情景分析 毛德操 / 胡希明 浙大毛教授著作。基于2.4内核,对代码有详细解读。虽2.4版本较老,但如此详细的解读也值得一读。
The Design of the Unix Operating System Maurice J. Bach
Linux 内核揭秘
Linux Device Drivers, 3rd Edition Jonahan Corbet

树莓派

NVIDIA Jetson

编译原理

名称 作者 介绍
15-411/611 Compiler Design - CMU Jan Hoffmann CMU的编译原理基础课程
自己动手写编译器 pandolia 实现一个简单的C编译器

软件工程

计算机体系结构

名称 作者 介绍
Computer Organization and Design, Fifth Edition David A. Patterson / John L. Hennessy 作者是图灵奖得主,提出RISC架构

计算机网络

名称 作者 介绍
计算机网络(第6版) James F.Kurose / Keith W.Ross

操作系统

名称 作者 介绍
清华大学操作系统课程(2019) 清华OS实验室的操作系统课程,课件、实验作业的质量都非常高

实时操作系统

名称 作者 介绍
μC/OS-III: The Real-Time Kernel for STM32 Jean J. Labrosse 经典实时操作系统, C语言编写
AliOS Things 国产实时操作系统,阿里巴巴面向物联网领域开发
TencentOS-tiny 国产实时操作系统,腾讯面向物联网领域开发
Huawei-LiteOS 鸿蒙操作系统物联网业务内核

项目实战

工作室往届的项目介绍:

名称 年级 介绍
Quadcopter 2015 基于STM32F411外设固件库的四轴keil5工程
基于Tensorflow的树莓派智能识别机器人 2016 基于Tensorflow的树莓派智能识别机器人
Quadcopter 2017 基于STM32F401RE的四轴飞行器
SkyEye 2021 基于ROS的VSLAM四轴飞行器
WuhuTakeOff 2021 基于FreeRTOS的四轴飞行器

一些推荐参加的本科阶段的科技创新类项目 & 比赛:

名称 介绍
Google Summer of Code 每年3月份开始提交申请的proposal
数学建模 要自学一下matlab
Robomaster
ACM
嵌入式综合设计 在廖老师指导下做四轴飞行器

找实习


本科阶段嵌入式方向技能树
https://jason-xy.github.io/2020/06/awesome-es/
作者
Jason Hsu
发布于
2020年6月22日
许可协议