#0 写在前面
嵌入式方面的知识包罗万象,网上的嵌入式教程更是卷帙浩繁。我在这一块的知识也只是略知皮毛,挂一漏万在所难免。理解的方式多种多样,不要把我当成权威,也不要认为这篇Roadmap是唯一的标准,而是希望把这篇Roadmap当成一个参考。如果你是初学者,那么需要多进行自己的思考。如果你已经比较熟悉嵌入式开发,也欢迎提出各种批评。
#1 什么是嵌入式
我自己对嵌入式的理解是:丐中丐版计算机,或是乐高式计算机。
如果你没进行过嵌入式开发,而仅仅是进行应用软件开发,那么你的开发路径可能是这样:搭建开发环境---->进行软件设计与开发---->测试与debug---->发布。
但是如果你进行嵌入式开发,开发路径则可能是这样:先构思出自己要做什么东西---->根据自己的开发目标、经济情况、技术力选择需要的组件---->进行PCB设计与焊接---->测试PCB---->进行软件设计与开发---->测试与debug---->发布
两者的区别就是:进行嵌入式开发,必须要对硬件方面的知识有一定的把握。
买来的成品电脑,在硬件方面可以说已经是万事俱备,只欠东风了,需要思考的问题主要集中在软件上面。而进行嵌入式开发,就是一个搭建系统的过程,需要考虑到一个系统的方方面面。而搭建起来的系统,其本质还是一个计算机(系统核心还是CPU)。因此不仅要思考软件上的问题,也要思考硬件上的问题。
#2 需要掌握哪些技能或知识
硬件
- 电路分析(要求不高,起码看得懂电路,会分析简单的电路)
- 数字电路(重要,包含很多基础的概念)
- 模拟电路(要求不高,简单了解一下二极管、晶体管、FET管和运算放大器的性质即可)
- 计算机组成原理(重要,是理解很多问题的基础)
软件
- 汇编语言
- C语言(两种比较常见的开发语言)
其他
- 英语(读文档、学习一般教程必备,很多优秀的教程都是用英语写的)
- 喜欢diy、喜欢深入研究的热情
如果你学习了以上内容,那么你的知识量已经足够支持你开发一些简单的项目了。但这只是学习的一个开始,如果再深入一步的话,就会接触到更多更深入、更抽象的技术领域,比如信号与系统、高频电路设计、操作系统……因为我水平有限,所以就不再列举更深的知识点了。
#3 学习资料和学习顺序的建议
建议学习顺序
- C语言、计算机组成原理、汇编语言
- 电路分析、模拟电路
- 数字电路(学会后再结合机组重新理解)
当然,这个顺序也仅供参考。
学习资料
电路分析
来自MIT,经典教材,结合MOOC一起学习更好(还能顺便熟悉一下印度口音
数字电路
是我上数电课用的教材。把各种概念讲的比较清楚,感觉英文原版比中文版易懂一点。
模拟电路
Electronic Devices and Circuit Theory
模电入门经典教材,反正是让我入门了。而且读起来也不困难,逻辑很连贯,行文也比较有趣。
计算机组成原理
经典教材了,怎么吹都不为过。。。读一遍,相信一定有所收获。
汇编语言
我看过前半本,感觉挺好的,至少帮我过了汇编考试。和机组放在一起可以有更深入的理解。
C语言
这本书写的深入浅出,概念清晰,比谭浩强那本红皮C语言不知道高到哪里去了。
这本书很厚,不用全看完,就当成C语言的新华字典,哪里不会查哪里。
以上教材基本都有pdf资源,而且我也都读过,阅读体验都不错。当你对以上知识都有大概把握以后,就可以进行进一步学习了。推荐一点资源:
STM32入门教程(基于HAL库+CubeMX+MDK-ARM)
成电漆强老师的课。漆强老师是电子设计竞赛的带队老师,水平在线,这个教程直接手把手带你入门。
有很多开源书籍,但基本开发思想是标准库,与漆强老师主讲的HAL库有一点区别。
懂得都懂
#4 后记
我不是一个厉害的嵌入式开发者,所以这篇Roadmap必定有很多漏洞,因此还是建议批判的阅读。也欢迎大家提出自己宝贵的建议。