这是一个电子科技大学软件学院本科阶段计算机体系结构学习&嵌入式开发的公开课/书籍/Blog/资料整理的项目,如果你有贡献的想法:
- 可以直接提交Pull Request
- 如果你是嵌入式工作室成员,请联系@starFalll([email protected]),@StevenXu98([email protected])等UESTC404组织的所有者,邀请你加入 UESTC404 中
-
推荐的学习主线:
时间 内容 大一上 C语言,STM32/51单片机开发入门 大一下 数据结构和算法, STM32裸板开发,Linux操作及使用,项目实战 大二上 arm体系架构(嵌入式linux),STM32从裸板到应用,计算机组成原理,软件工程项目实战 大二下 C++, 实时操作系统RTOS,操作系统,Linux系统编程,计算机网络,项目实战 大三上 编译原理,Linux内核与驱动(嵌入式linux),项目实战,找实习 大三下 企业实习/教研室科研/海外交换 -
欢迎大家随时更新
-
参考阅读
作为一名软件学院的本科生,必须牢牢掌握以下计算机相关的知识:
技能点名称 | 技能点内容 |
---|---|
编程语言 | 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设计, 元件焊接 |
仪器 | 万用表, 示波器, 信号发生器, 逻辑分析仪, ... |
借一张导师的经典老图,差不多就这个学习路线。
书籍推荐:
名称 | 作者 | 介绍 |
---|---|---|
C语言程序设计现代方法 | K. N. King | 入门推荐读物,讲解清晰 |
C与指针 | Kenneth A·Reek | 进阶读物,“C语言三剑客”之一 |
C陷阱与缺陷 | 凯尼格 | 进阶读物,“C语言三剑客”之一,重点讲解C中的注意事项 |
C专家编程 | Peter van der Linden | 进阶读物,“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++对象模型 |
资源推荐:
名称 | 作者 | 介绍 |
---|---|---|
数据结构 | 邓俊辉 | 国内质量最高的数据结构课程,推荐在MOOC上跟学,教材链接 |
在大一上学完C语言之后,推荐自学一门课:MIT 的 The Missing Semester of Your CS Education,可以翻译为计算机科学课堂中学不到的知识。B站链接.
这门课会教你使用各种工具链,比如 在终端下Bash Shell 编程,VIM 编辑器,正则表达式,Git 版本控制,profiler, SSH 配置远程环境等等。灵活地使用工具链能极大地提高你的工作效率。
你可以考虑运用在这门课上学到的知识,在大一下的时候在 Github 上搭一个自己的博客。
- Keil uVision
- STM32Cube
- jtag debugger
内核:多参考ARM Crotex M3/M4权威指南,结合《计算机组成原理》和《ARM处理器及应用》相关课程内容进行理解。需要了解的知识点有启动流程、中断流程、时钟树......
外设:对于MCU编程来说外设的学习主要分为以下步骤
-
硬件构造,例如挂载到哪个时钟总线上,硬件上是否需要依托其他外设工作......
-
协议原理,搞清楚通信协议内容和规则,了解下通信的信号是怎么样的。
-
寄存器功能,参考芯片《用户手册》详细了解外设相关寄存器功能,有多少个相关寄存器,每个寄存器是干什么用的,每一位又有什么用。
-
代码模仿,去原子、野火这些地方找点样例代码,学习下代码结构,让外设工作起来需要哪些配置步骤。
-
上手实践,自己去实现一套外设驱动,多尝试不同的配置不同的功能。
搞定这几个环节应该就能把相应的外设基本搞清楚,也能实现简单的功能了,接下来就是灵活应用,深入了解其中原理了。
名称 | 作者 | 介绍 |
---|---|---|
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 |
- 树莓派新手入门教程
- 树莓派有什么好用的系统
- 树莓派NAS
- 树莓派安装OpenCV
- ......
- CUDA on ARM入门教程
- Hello AI World
- ......
名称 | 作者 | 介绍 |
---|---|---|
15-411/611 Compiler Design - CMU | Jan Hoffmann | CMU的编译原理基础课程 |
自己动手写编译器 | pandolia | 实现一个简单的C编译器 |
- 编写文档: Doxygen, Sphinx
- 代码质量:
- C: 华为C语言编程规范
- C++: Google C++ Style Guide
- Java: 阿里巴巴Java开发手册
- Python: PEP8, isort, black, Pyre
- 自动化测试: Robot, pytest
- Code review: Gerrit
- 持续集成工具: Travis CI
名称 | 作者 | 介绍 |
---|---|---|
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 | |
嵌入式综合设计 | 在廖老师指导下做四轴飞行器 |