单片机从小菜鸡到老司机

大家好,我是科岩。

首先跟大家说一声抱歉,大家久等的嵌入式学习路径,今天终于来了。

经常有人问我,嵌入式该怎么入门,怎么学习,怎么精通,怎么成为专家。我前思后想掏心掏肺,花了大概2周的时间,写了这样的一个成长路径。

注意!本文又干又长,如果此时你无法抽出大约10分钟时间,建议看个开头,然后点个关注、收藏之后再(也不)看。

依然是用一个脑图呈现给大家,文中会仔细讲解脑图中全部内容。

如果想要一份高清版本,保存到电脑或手机里认真学习(吃灰),可以关注公众号「科岩成果」后,回复「单片机」下载。

图片和脑图的源文件都有提供。

闲话少说,正式接客。

首先如图,嵌入式学习路径之单片机。

为什么单说单片机呢,因为我觉得嵌入式是一个比较笼统的概念,可以按处理器性能大致分成两类。

性能低的比如51、stm32、arduino,这类设备一般用作开发比较便宜的产品,比如手环、插座、牙刷、小型玩具什么的,这样的芯片资源有限,没办法运行linux操作系统;

还有一类是高性能的,像我们手机那种处理器,能运行linux、安卓操作系统的,这类芯片一般用作开发比较贵的产品,像智能音箱、自动售货机、摄像头、路由器等等。

这两种性能不同的处理器都是嵌入式,但需要掌握的技术是有一定区别的,这期就先讲低性能的,单片机的成长路径,如果看完觉得不错记得关注,后面会再写一篇嵌入式Linux的成长路径。

依然是熟悉的4个阶段,这是科岩独创学习4阶段,小菜鸡、入门鸡、进阶机、老司机,也就是从入门到精通(入土)的几个阶段。

看完欢迎留言告诉我你在什么阶段。

小菜鸡

先从小菜鸡开始,小菜鸡就是一个纯小白,就是你茫然无知什么都不懂。需要学习的有三个部分,基础概念、C语言基础、单片机基础。

如图,基础概念内容如下:

你要知道单片机是什么;要知道MCU、RAM、ROM、IO引脚、中断、定时器这些概念指什么;另外,常见单片机有8位、16位和32位的。

还要对电路板有概念,什么是原理图,什么是PCB,这些硬件概念在小菜鸡阶段知道就行。

再然后是软件,其实也就是运行在单片机中的程序,我们也把它叫做固件。

有了硬件和软件,就要把软件安装到硬件中执行,这个过程叫做编译、下载、运行,一般会用到Keil、IAR、gcc等等工具。

我们人生中烧录到单片机的第一个程序一般是什么呢?

就是点灯,点灯其实就是嵌入式工程师的hello world,一般电路板上都有led灯,LED灯点亮了,就说明这块板子的硬件,包括电源、处理器、引脚等等是没有问题的,还说明软件的烧录、运行等一系列的步骤是没有问题的。

板子是好的,才有后面的工作。

所以作为嵌入式工程师,一般也自称为点灯工程师,>> 大家好我是点灯工程师,科岩 >_<

最后一点,就是知道什么是嵌入式工程师,一般行业内称呼一名嵌入式工程师都是某某工。

比如你姓张,大家就会称你为张公,姓李呢,就会叫你李公,像我呢,我姓老,不知道此刻看文章的你姓什么嘞?

工程师上班一般都在做什么呢?就是在画板子,写程序,调板子,烧板子。

你烧过板子么,反正我是烧过,特别好玩,直接冒烟,把我们上班的大楼都给整停电了,是不是很有趣。

嵌入式工程师的标准穿搭:黑框眼镜,格子衫,黑色或者灰色的双肩包。非常典型,工作经验一般可以通过发际线的高低做判断。

对单片机程序有概念之后,就要学习C语言了。

这里写了三点,参考c语言路径图;达到小菜鸡水平就可以上手单片机;最好是能达到进阶机。

这是什么意思呢,之前我做过一个C语言的学习路径图,也是分成了4个阶段。

小菜鸡是基础就是学C语言的语法;入门鸡算是培养兴趣可学可不学;进阶机比较高级,数据结构、算法、网络、linux都该学了,最好能到这个水平;老司机就不强求了,可以后面再学。

我就不详细展开了,这个如果想详细的去看的话,可以看下面这篇文章,如果想要脑图也可以到「科岩成果」下载。

C语言从小菜鸡到老司机

有了C语言基础,接下来就是一些单片机的基础了。

首先要选一款学习资料丰富的mcu,建议直接选STM32,资料非常丰富,如果有任何问题查资料基本都能找到答案,对初学者来说非常友好

接着就要写代码了,我们的程序一般是通过轮询,或者定时器,或者中断这三种方式来进行触发,要学会编写这三种方式的代码。

接下来是外设,单片机存在的意义是什么呢?

其实就是通过外设,可能是键盘也可能是传感器,这种输入类型的外设,输入一定的数据,进行处理再通过输出类型的外设,可能是显示屏,输出一定的结果。

在小菜鸡阶段要学习使用各种常见的外设,LED灯、蜂鸣器、键盘还有IO引脚,这都是最基础的。

还要学习这3种很常见的串行口,uart、spi、i2c,要掌握通信协议的设计和编解码的处理,很多传感器就是通过固定的协议与单片机通信,另外单片机再和其他单片机、PC机等设备通信时都会用到协议编解码。

接着要学习一些调试手段,比如说Keil和IAR软件的调试功能。都挺简单的,如果程序有问题,可以用调试手段来查查内存、某个变量的值,排查问题。

小菜鸡最后,要做几个简单的实践。

我列出来两个,一个是测距,可以用红外或者是超声传感器来做。

另外一个实践是,可以读一些传感器的数据,比如温湿度、人体检测,把数据显示在屏幕上。

小菜鸡阶段结束后,你就可以做些简单的小项目。菜鸡学习时间呢,大概两周左右就可以了。

入门鸡

接下来就来到了入门鸡阶段,有这么几个部分:单片机高级部分,学习电路板知识,再做几个复杂点的实践小项目。

先看单片机的高级,包括这些内容:

写代码要有一定的规范,包括缩进、注释、变量和函数的命名等等,要按规矩写。

入门鸡阶段,项目中要用一些基础的数据结构了,不要全局变量和flag满天飞;还要学些基础的算法,主要的就是排序和查找。

接着要会用状态机编写稍复杂的程序,小菜鸡学会的轮询、定时器、中断只能做些简单的程序,复杂点程序就要有结构进行控制了,状态机是比较好的一种代码框架,要理解状态机的原理、编写的手法。

再复杂点的程序,就得上操作系统了,学会使用嵌入式实时操作系统,也就是RTOS,要了解它们的任务、锁、信号量和消息队列是怎么使用的。

如果做和物联网相关的项目,就要编写网络相关的程序,得会写socket程序,调用socket接口收发tcp/udp/mqtt的数据。

单片机联网一般会用到无线模块,可以通过串口透传或者AT指令控制模块,比如Wifi、蓝牙、ZigBee等等传输数据。

很多项目中的单片机是需要用电池的,电池容量有限,所以要学会编写低功耗的程序,比如控制单片机睡眠、停机、待机,还有低功耗如何测试、有哪些指标衡量功耗的高低,都要掌握。

第二部分,要学习看电路板了。

得能看懂简单的原理图和PCB就行。

最后,入门鸡的实践:

我建议做一个物联网设备,连接某个云平台。

阿里云、腾讯云、百度云,都可以连,他们都有物联网的接入平台,接入后,设备要与平台 APP打通。

比如做一个联网的温湿度采集器,可以在APP上看到设备从传感器读取数据,也可以做一个联网的智能插座或者智能灯,通过APP来控制它的开关。

入门鸡要花一定的时间,可能是你工作个一年后到三年之间的这样的一个状态,会灵活的使用以上的这些软件接口与硬件器件,时间久了就可以编写复杂的程序,做复杂的项目了。

进阶机

接下来是进阶机阶段,这个阶段要学习的东西不但变多了,还更深入了。

我把进阶机的学习范围分成2大部分,一部分叫“通用内功”,就是几乎哪个行业都通用的东西,学会内功,才能以不变应万变;另一部分叫“独门绝技”,指的是某一个细分领域的专业技术知识,学会了至少不用担心失业。

咱们先看通用内功,首先是最上层,嵌入式实时操作系统源码的学习,我建议学习FreeRTOS、RT-Thread、μC/OS这三个比较常用的嵌入式系统。

入门鸡阶段是会用RTOS,进阶机就要学习任务、锁、信号量怎么实现了。

接下来是网络源代码的学习,同样的,在入门鸡阶段是会用网络接口,进阶机就要学习如何实现了。

我们可以通过lwip这样的轻型协议栈源码来学习TCP或者UDP,mqtt是物联网传输的协议,HTTP是WEB的常用协议,图中这几个源码都是可以直接学习的。

然后是模块的二次开发,模块二次开发指的是基于无线模块直接做编码,而不是通过MCU进行控制。

这样可以减少一颗MCU主控芯片的使用,节约硬件成本,毕竟咱们硬件行业成本第一啊!

接着可以学习对代码性能进行优化,我列出了4种方式,这些都可以了解,有的项目有特殊的需求,咱们就要知道怎么优化。

下面是代码的可移植性,其实也是按照一定的规范编写代码,我也是列出了4点。

如果写代码时习惯考虑代码的可移植性,那你写的代码也能很容易的移植到不同平台。有时我们做一款产品,产品升级了或者更换了硬件芯片,之前代码移植性好的话,可以很快替换成新平台。

然后是编译和链接的脚本,要学习C语言代码是如何编译成机器指令,机器指令又是如何在芯片中进行组织的。

代码编译完会进行链接,要指定加载地址、指定代码段、数据段地址,这个也是有些特殊的产品需要人工设置。

除了C语言,还要掌握几种其他编程语言,Python、lua、shell都建议学学。

学会了C语言,这些语言其实都不怎么用学,看看语法就能上手写,我们经常用这类语言处理有规律的文本、处理二进制固件,方便快捷。

后面三个是学习底层知识,首先要学会看芯片手册,通过芯片手册能学到太多东西了。

在工作的过程中会遇到各种各样的芯片,可能会有一些比较少见的特殊芯片,没有封装成C语言的库,或者某些不常用的功能芯片提供的库没有封装,这时你就要通过操作寄存器直接控制它们。

芯片手册第一次看肯定看不懂,这个也需要花时间,时间久了,看得多了自然就懂了。

而且每个芯片的芯片手册套路、结构都差不多,看懂一个,基本其他也都懂了,所以大家不用担心。

再往下一层就是汇编指令集,单片机arm的体系结构居多,应当学一下arm的指令集,比如说Cortex M系列的核,它有37个寄存器,要了解它的一些常见汇编指令。能看懂,能够编写简单的程序就可以了。

最后再下一层就是电子学了,要学模电和数电的知识,电压电流,电阻电容,半导体二极管等等,都要知道它们是干嘛的,接着门电路、CPU、存储器的电路是怎么设计的,知道理论就可以了。

上面这些知识都是内功心法,无论做哪个行业,只要和硬件打交道,都能用得上,是咱吃饭的家把什。

下面再看看独门绝技都有啥,独门绝技就是能让咱们吃的爽,吃的久。

首先是通信协议栈的开发,比如PHY层、MAC层、空口各层协议的开发,像Wifi、4G、5G都有类似的开发需求、岗位,现在5G这么火,如果你能参与开发一个5G模组,那就非常厉害了!

下面是算法,算法这个分支也是一个比较专业性的分支,我列出了一些咱们单片机上可以跑的算法,滤波、姿态,惯导,PID,还有slam算法,有些是做可穿戴设备需要的,有些是无人机、无人车需要。

做算法是有很高门槛的,基本都研究生起步,如果你没有读研究生,或者读了但对数学没兴趣,建议还是不要去搞算法了。

我学历就是个普通小本科,算法这方面简直是个白痴,不懂。算法是真的牛,算法永远的神!

接下来是安全,这个我不知道有没有人了解,也是个细分领域。包括芯片安全,网络安全。

比如为数据加个密再存储、比如给固件签个数字签名再烧录到芯片,这都是安全工程师需要设计和考虑的。

未来万物互连,越来越多的家电产品,甚至汽车也都能用手机控制。所以,嵌入式、物联网的安全不能忽略。

再后面是FPGA设计,学习编写Verilog HDL语言,学会用硬件描述语言设计组合逻辑电路和时序逻辑电路,这也是一个比较细的一个分支,专业性非常强。

学习了FPGA之后呢,还可以再学习下设计CPU,包括流水线,取指、译码、执行,总线,中断异常等等这些硬件的设计,这已经非常非常底层了。

为什么嵌入式工程师要学习FPGA或者设计CPU呢?

我觉得这是底层原理,会底层的原理,解决上层的问题会思路更开阔,好比你明白TCP的原理,那如果HTTP出了问题,你会更容易解决。

好,以上就是进阶机阶段需要学习的东西了,此刻的你觉得兴奋还是觉得可怕?

如果掌握了这些呢,工作中遇到的任何技术问题,基本上没有你解决不了的了。

进阶机阶段,一般是工作至少5年吧,5年8年10年都有可能。想要理解和掌握,既需要不断的学习理论知识,也需要积累实践经验。

进阶机到此结束,马上就要迎来最后一个阶段,老司机阶段。

让我们来一起揭开老司机的神秘面纱吧。

老司机

老司机阶段,分了4个部分,技术、管理、行业、公司。

到了老司机阶段,你不单单是一个懂技术的人了,还要懂管理、懂行业。

仍然可以继续学习技术,可以学一些横向的技术扩展,比如上位机、APP的编写;测试工具、测试流程的学习;有兴趣可以学学Matlab仿真。

如果喜欢画板子,可以多画画PCB;愿意做设计,也可以学学工业设计、结构设计这些知识。

那么管理呢,包括了这些内容:

可以边带团队边学习管理知识,要依靠团队的力量实现你想实现的产品或者功能。

你还要有一定的行业认知,就是你要懂行业,我大概总结了几个单片机涉及到的行业:

不要把目光集中在手上开发板的一亩三分地儿,要关注行业的市场空间,是否处在上升期。

要努力成为某个行业的专家,行业的专家,行业的专家!

什么是行业的专家?举个例子,如果你在医疗行业,那你就要懂些医疗方面的知识。

比如做个血糖仪,要学习血糖对人体有什么作用、正常血糖值是什么范围,还要懂一个血糖仪是怎么设计、生产的,都有哪些人参与,客户是哪些人,他们在哪,通过什么样的方式或者渠道能把产品卖给他们,有没有什么行业潜规则。

大家现在听我这么说可能觉得很难,但其实没多难,你如果喜欢一个行业,那就去那个行业干几年,稍微用点心,都不用太久,慢慢就不知不觉都学会了。

老司机的最后一点就是公司了,我列了整个电子行业上下游的产业链出来:

从最上层的芯片原厂再到中间的模组厂传感器厂、操作系统、云平台、运营商,最后是B端或C端的硬件厂商,或者是集成商或者渠道商。

无论哪种类型的公司,都会有嵌入式工程师的需求。

作为一个老司机的你,应该了解你们行业中头部、腰部、尾部的公司,了解他们的商业模式,他们的生存状态,了解同行在做什么产品,都有哪些业务,为什么开展这些业务,这是一个老司机应该懂的。

这些行业认知和公司认知,都是需要在多年的从业中,摸爬滚打获得的,这些经验在哪本书或哪篇文章中都是学不到的。

end

以上就是整个脑图的全部内容了,看到这一定又有人会说我在劝退了。

这乱七八糟的学科知识都需要学,一看就头大,一看就不想学,好,那么请问啊,你是想学哪种知识呢?有什么知识学会了就不用怎么动脑,躺着就能数钱的,也教教我。

坦白说,我真的没有在劝退。

刚刚毕业的我们参加工作,一定要树立一个正确的职业观。

没有谁的人生是简简单单的,也没有谁的职业生涯是轻松加愉快的。

既然一定是要去做一个职业,那就不论是嵌入式还是大家知道的其他的,后端呀,Java呀,PHP啊,Python啊, 这些所有的语言,所有的知识,你都是需要一个这样的一个成长阶段的。

如果最开始就树立着一个长远目标,就朝着老司机这样的方向去迈进,有一个指引,我相信你会非常明确的,你会获得一段成功的职业生涯和难忘的人生经历。

人的一生何其短暂,职业生涯多说不过40年,我希望,当你退休、回首往事的时候,不会因为虚度年华而悔恨,也不会因为碌碌无为而羞愧。

全文完。如果对你有启发有帮助,求赞、求在看、求转发,让更多的兄弟看到。

后面我还会再出一期嵌入式linux的学习路径,主要讲Linux系统工程师的,欢迎大家关注起来。

到这了,大家再见!

(0)

相关推荐

  • 应届生求职的那些事

    前两天有一位读者朋友问我一个关于嵌入式就业的问题: 正好我离开学校的时间也还不算长,也还清晰地记得当时找工作的一些事情.同时,从自己这两年的工作中也得出了经验. 所以这里试着分享一下这个话题,希望可以 ...

  • 在大公司天天调参数,感觉快废了

    知晓编程 80篇原创内容 公众号 01 基础知识 一个嵌入式工程师,很多都是从51单片机或者STM32单片机开始,对于单片机的开发环境,开发流程,基础外设都了解,做过一些实际的案例,比如点流水灯之类的 ...

  • 我的单片机转嵌入式Linux之路

    大家好,我是ZhengN.其实这是一篇大杂烩文,哈哈~ 好久没来扯谈了,今天是周末,我来简单分享我最近的情况及一些感想.经常看本公号的朋友应该有发现近几个月我写原创笔记的频率低了很多.原因有二:一方面 ...

  • 亚当熊 刺激战场:开头就说这把带妹吃鸡,老司机人狠话不多

    亲爱的熊粉们, 这是熊哥之前的视频,相信许多熊粉一定还没看过. 那么我们一起回顾一下以前的亚当熊如何在游戏的世界里作死和逗比. 亚当熊终于开直播啦! --我们去哪里看呢? --下载西瓜视频. --什么 ...

  • 卤味界老司机紫燕百味鸡教你怎么吃鸡

    历代以来,人们对卤制品的热爱超过绝大多数菜品,人们擅长采用各种各样的烹饪方式制作美食--煎.炒.烹.炸.熘,熬.烩.焖.烧.卤. 其中,卤这种制作工艺更是因为其简单易操作,能突出原料原有的口味.色泽而 ...

  • 亚当熊 吃鸡手游,荒野行动老司机翻车作死

    [视频在下方!!!] 很多粉丝一定没看过熊哥的一部分视频 熊哥自己偶尔回顾一下,感觉那时的自己非常有趣, 完全不像现在这样的娴熟老练. 不过,老视频隐约已经可以看到如今的逗比解说的影子. 老视频精编后 ...

  • 亚当熊 吃鸡手游,荒野行动老司机也会翻车

    [视频在下方!!!] 很多粉丝一定没看过老视频 熊哥自己偶尔回顾一下,感觉那时的自己非常有趣, 完全不像现在这样的娴熟老练. 不过,老视频隐约已经可以看到如今的逗比解说的影子. 老视频精编后重新出炉亮 ...

  • 新片丨《追凶者也》:憨包、小烂屎、土贼、乱逼麻麻、鸡枞、老司机到底是几个意思?

    稍有常识的迷影都知道,曹保平导演的几部重要电影几乎都和云南息息相关,从2001年第一部作品<绝对情感>到刚刚上映的<追凶者也>,都以云南外景.云南方言.云南明星等形式介入,表达 ...

  • 十年硬件老司机,结合实际案例,带你探索单片机低功耗设计!

    作者:YJGQDD(阿莫:hailing),整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 经过了多年的低功耗硬件设计(公司硬件设计和软件设计是分开的,我一直是做硬件,在面对低功耗生 ...

  • 单片机老司机是如何炼成的?

    大家好,我是科岩. 首先跟大家说一声抱歉,大家久等的嵌入式学习路径,今天终于来了. 经常有人问我,嵌入式该怎么入门,怎么学习,怎么精通,怎么成为专家.我前思后想掏心掏肺,花了大概2周的时间,写了这样的 ...

  • 老司机分享高申面试经验,炒鸡实用到飞起

    本文系TD「创作计划」第006篇文章,欢迎更多有才华的同学加入我们,创作更多优秀的内容,

  • 老司机在副驾驶只要看到这几个动作,就知道驾驶员肯定

    最佳答案 比如这几个动作1.双手握方向盘僵硬,领了驾照没多久的新人,对汽车方向盘的操作不够熟悉,再加之道路经验少,所以开车会有紧张感,这就造成了开车手握方向盘的姿态不够自然,肩膀不能自然下垂,握方向盘 ...