原本这篇文章我打算写这段时间学习总结好的mysql和数据结构之树的技术总结文章:

但是就在刚才给一位网友发qt源码包时,突然又聊到了这个嵌入式学习路线的问题,所以这篇文章我会分享一些免费的资源学习以及学习路线:
ps网友一:

ps网友二:

ps网友三:

其实在很早之前,准确的说应该是今年的五月份左右,当时我也分享过我自己的学习经历(ps:当时可能讲的不太详细:简单的总结和分享);其实结合之前很多网友问我offer方向选择以及我自己毕业一年来,大大小小的求职过程和观察的经历来看:
(1)如果在学校或者说你已经出来上班不久,就能够非常明确自己要走哪个方向那肯定是很好,你只要努力朝自己定的目标慢慢靠近进行(当然这其中会遇到许多挫折和挑战也是在所难免的,不可能一帆风顺!)
(2)当然也有那种经历过弯路之后的,才明确要走哪个方向的(我觉得大部分人可能都是这样过来的,包括我自己也是这样过来的)
(3)当然有些人也有听从前辈的建议走哪个方向的,这都没错,毕竟是前人的经验,至少说可以让少采坑。
不过我这里我认为对方向的选择,应该建立在对行业的了解基础上(比如待遇问题,这个肯定是我们最为关注的话题,以及今后是否有发展性!),再去做一个合理的选择(结合自身情况,考虑到时间成本,试错成本,自己是否能够承受住这种错误等等),不过往往大部分人在还没出来上班之前,对行业的认识可能比较浅,一般可能是出来上班之后,才会对行业有一个更深的认识!其实总的来说,方向的选择,会受到很多因素影响;就拿刚才来说,上班上了一两年左右的时间,差不多对行业摸得非常清楚,这个时候可能你对职业方向规范会比较清楚;前期刚出来对于方向的选择还真不好说。下面是嵌入式的路线(应该大部分人是这样走的,这里不包含硬件来说):
(a)51单片机+stm32+rtos+linux(分应用和驱动)
(b)直接到linux(先做linux应用,后期再做linux驱动,或者两者都结合做)
还有一个非常有意思的话题,很多技术群里面会聊到互联网和嵌入式工资的对比,然后一大波对嵌入式的吐槽就开始了;其实说老实话,作为打工人,这两个行业薪资对比上后期确实有差距,但是我想说的是嵌入式待遇也不差,为什么我会这样说(这里看到文章的大佬不要喷我,我只是站在我的经历来看待这个问题!):
我读大专的时候,学的专业是汽车电子技术,就拿我这个学历来说,出来去4s店做技术人员, 你知道实习和转正多少钱吗?在我大专还没有毕业的时候,我和实验室的小伙伴已经体验过一次创业的历程,这期间我也会去市场了解情况,比如去连锁店里面洗洗车(精洗的那种)以及做保养:

ps:这是当我在连锁店里面一天洗了大概90辆汽车(有大部分是suv,洗suv最累了)
然后空闲的时候,我就向这些学长问一下待遇咋样;我清楚的记得当时一个学长和我实习期一个月1000块(当时我是在赣州那边,因为我大专是在赣州读的),而且还不吃住的那种哦,转正也才1500;你看到这里,你会脱口而出:卧槽!才这么点钱,这怎么活啊,但是事实就是这样,赣州消费水平也不低,平时吃个饭也怎么要十来块;还有后来我在学校准备专升本(hh,说到这个我自己也不咋后悔没有考上,有得就失,鱼和熊掌不可兼得!),听我的同学以及同学院的朋友出去去其他城市分享的待遇情况,比我刚才好不了多少,工资大概也就三千最多,如果是做汽车销售,按提成来拿的话,工资可能就会更高一点。你说这么点工资在现在这个社会怎么活,更别说有存钱的说法了,连养活自己都很难。所以在我毕业一年了,我平时也会和一些以前同学和朋友聊到他们现在在干啥:


还有我的大部分同学,有些去做销售买保险的和卖房的都有,也去自己开店做老板的也有;总之据我的了解做汽车的大部分都转行业了,汽车行业太难熬了(这里不是在吐槽这个行业,实际待遇情况就是这样);和我待在实验室的兄弟们,估计就剩下两个左右还在做汽车行业,其他都早转了!大部分像我这种学历(这里包括本科的要养活自己也很难),如果最终要在汽车行业里面待下去的话,想要赚钱的话,只有自己出来单干,开连锁店;不然靠工资的话,生活可能确实很难!
回忆到这里,再拿嵌入式行业来对比的话(对我自己来对比),我说嵌入式真香(看到这句话也不要喷我,我是站在我的角度来看问题),你可能一开始就是搞软件或者电子的专业的,自然会想到互联网对比;互联网我没有经历过,但是就目前来说,很多从机械转到嵌入式行业来看的话,待遇提高了不少,至少生活了不那么累,收入还比较可观(尤其是对我这种学历不好的人来说!)。这里你又想说,干嘛不直接转到互联网去呢(报个培训班去,上车快),话确实如此,但是我想说的是,有多少人在他第一次拿的一个开发板,成功实现了自己的第一个程序功能,那是多么的开心,一种发至内心高兴,然后从此之后就迷上了这个行业。嗯,多的话,就不再多说了,上面的分析,可能是站在我的角度来思考和分享,如果你真正喜欢或者有能力去做一个方向的话,就大胆去做,不用去纠结于别人的观点,别人的观点和思想始终是别人的,你只是听听,觉的是这样,我们只能去参考和学习,但是我们自己要真正发自内心去思考是否适合自己,做最真实的自己,不要活在虚假和遐想的虚拟世界里面!
一、路线资源分享:
说了这么多,下面我分享一些学习路线资源,不过仅供参考哈:

ps:这里我分享的资源都是免费可以找到的,属于白嫖的那种!
1、c语言:
在学习c语言的过程中,除了一些基本的语法知识点外,在我们嵌入式实际开发当中,有些知识点会经常被用到(以及面试的时候,面试官非常喜欢问这些方向):
a、指针(函数指针,指针函数,数组指针,指针数组,结构体数组指针,结构体指针数组,结构体函数指针,结构体指针函数),这里举的一些概念,最好自己去搞清楚本质,然后实践一下
b、字符串处理函数,应该说这个在面试里面,最喜欢考如何实现这些字符串处理函数:
-
strcpy(p, p1) 复制字符串
-
-
strncpy(p, p1, n) 复制指定长度字符串
-
-
strcat(p, p1) 附加字符串
-
-
strncat(p, p1, n) 附加指定长度字符串
-
-
strlen(p) 取字符串长度
-
-
strcmp(p, p1) 比较字符串
-
-
strcasecmp忽略大小写比较字符串
-
-
strncmp(p, p1, n) 比较指定长度字符串
-
-
strchr(p, c) 在字符串中查找指定字符
-
-
strrchr(p, c) 在字符串中反向查找
-
-
strstr(p, p1) 查找字符串
-
-
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素
-
-
strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移
-
-
strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移
c、结构体 、 联合体
ps:以上只是简单的列举了一些知识点,后期的面试题目,我会以视频的方式分享给大家,这样可能会比较直观一点。
d、学习资源推荐,如果你是自学的话,而且免费的话,可以到b站找这个郝斌老师的c语言视频学习,这个视频讲解的还是非常通俗易懂的:

如果你学完了基础,也可以看看c语言三剑客,提高自己:



2、c++:
c++的知识点比较多而且非常细,这里我就列举了,我直接推荐学习视频:

因为在嵌入式行业里面,用到c++扩展库的话,会比较少,不过你可以学习一下STL标准库,boost库可以有时间去学习一下(一般这种做c++服务器或者后台比较用的比较多一点),书籍推荐:

当然现在市场上,对于ui在linux方面qt用的比较多,你也可以去b站上找教程:


当然平时可以去官网或者博客上找一些大神的文章来学习参考,会少走很多弯路。
3、数据结构和算法:

比较推荐这个老师讲解的数据结构,算法的话,我推荐一个大佬的课程(不过是收费的,看个人意愿了):

ps网站:https://www.acwing.com/activity/
不过我建议在学习的过程当中,可以去leetcode官网去按照专题刷数据结构和算法,这样一边学一边用,可能效果比较好一点;如果你一点数据结构和算法的基础理论都没有的话,直接去刷的话,效果不怎么好,而且刷题也要多总结和归纳,不要死磕,适当看一下题解(先思考一下自己是否有思路解,如果没有的话,再去看):

这里说一点,做嵌入式,也非常有必要去学习数据结构和算法的,不管是为了面试还是今后的程序生涯,都会有很大的帮助,所以非常值得去学习,不要去纠结要不要去学习:

4、操作系统:
说到操作系统理论,在面试的时候,面试官问的深的话,会你为啥这样,这样是怎样实现和处理的,所以操作系统课程非常有必要学习学习:


书籍推荐:

如果对risc-v架构感兴趣的可以去官网下载文档学习:

书籍推荐:

5、linux学习:
这个可能是我们的重头戏;其实做linux应用的话,我个人看到过和了解的情况,大概可能分三个方向(可能不全,不包含linux后台和音视频编解码那种偏互联网):
a、linux应用做ui方向:qt、minigui
b、做ipc通信的
c、做网络编程的(一般侧重点在网络产品上面,或者说自己能不能实现一个协议栈)
ps注:其他方向可以到boss直聘或者其他招聘网站详细了解一下

在b站上有很多免费的linux应用学习视频
linux驱动的话,我个人不是很了解(我了解一点点:uboot一种,linux内核移植以及内核剪切优化,linux驱动外设开发);详细也可以去招聘网站上了解。
这里我提一个建议,如果你有想要了解的岗位,可以第一时间去招聘网站上了解一下,可以多看几个公司的岗位招聘要求,大致我想你也对这方面的岗位方向就比较清楚了!
其实关于学习linux这块的话,我的建议还是系统的去学习不管是linux应用还是驱动,这样学起来有章节,不至于感觉太乱,市场上韦老师、朱老师的linux课程都是非常不错的选择!
书籍推荐(有网络编程书籍和驱动都有的,具体我不推荐哪本,网络的这些最好都看一下):

对了,在linux里面makefile(可以看陈浩老师的:跟我一起写makefile)和cmake以及shell脚本,在做应用方面和驱动都用的比较多,平时也要掌握
6、代码管理工具其他资源汇总:
(1)、一般在嵌入式里面,svn和git都会用到,这里可以参考菜鸟教程的教程走一篇就可以:

git教程的话,可以看廖雪峰老师的教程:

当然也可以在模拟环境下练习命令:


ps网站:https://oschina.gitee.io/learn-git-branching/
(2)、在线笔记记录我喜欢用石墨文档或者语雀:


(3)如果对音视频编解码感兴趣的话,可以学习一个前辈的文章:
文章链接:https://blog.csdn.net/leixiaohua1020
(4)自己编写的文档直接转换成pdf文档,我习惯使用Typora

二、写在最后:
文章中有些观点仅供参考(学完了基本理论知识,多实践,不要一直停留在你一直都在学的转态)!这里还分享一个面试亮点,平时养成写博客或者把自己写的项目放到github上,当你去面试的时候,可以把这些写到你的简历上去,这个是非常受面试官喜爱的,也许你技术不咋样,但是人家就是看重你爱学习的习惯和能力!
我最后想说的是,在我们这个年纪,不要太安逸,多投资自己的大脑学习;有目标就会有动力,话说2020年就还剩下一个月,回想一下2019年定的目标,是否有去努力实现!在年轻的时候,莫要给自己留遗憾,我们唯一能够改变的是自己,那就是靠自己去努力奋斗,实现自己的目标!
最后,文章中的资料可以在后台加我微信领取,有什么问题也可以私聊我,我会认真的和你交心!
转载:https://blog.csdn.net/Dada_ping/article/details/110021862